目录
一.逻辑备库的switchover操作" >一.逻辑备库的switchover操作
首页 数据库 mysql教程 Oracle 11g Data Guard 之逻辑备库角色转换

Oracle 11g Data Guard 之逻辑备库角色转换

Jun 07, 2016 pm 02:50 PM
data guard oracle 角色 逻辑

逻辑备库不复制数据库服务,在进行switchover或者failover时,连接主库服务的中间层将不能连接(因为服务的创建没有被复制),或者连接不正确的版本(因为服务属性的修改没有被复制)。 Oracle集群不复制管理逻辑备库的服务,必须手动对主库与备库进行同步,

   逻辑备库不复制数据库服务,在进行switchover或者failover时,连接主库服务的中间层将不能连接(因为服务的创建没有被复制),或者连接不正确的版本(因为服务属性的修改没有被复制)。

   Oracle集群不复制管理逻辑备库的服务,必须手动对主库与备库进行同步,具体的详参Oracle集群管理和部署的相关内容。

一.逻辑备库的switchover操作

   当进行switchover操作来改变主库和逻辑备库的角色时,总是在主库启动switchover,然后在逻辑备库完成操作,其中的步骤必须按顺序,否则将不能成功执行switchover。

1.确保主库可以进行switchover操作

通过查询V$DATABASE的SWITCHOVER_STATUS值来确定主库是否可以进行switchover操作:

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
登录后复制
登录后复制
登录后复制

   只要SWITCHOVER_STATUS查询结果是TO STANDBY或者SESSIONS ACTIVE,就表明主库和逻辑备库之间可以进行switchover。否则,查看Data Guard配置是否正确,比如所有的LOG_ARCHIVE_DEST_n参数是否配置正确。

2.当前主库进行切换的准备工作

在当前主库切换为逻辑备库角色之前,先执行如下SQL:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;
登录后复制

   该语句表明当前主库将很快被切换为逻辑备库角色,并且开始接收新主库传来的redo数据。在主库执行这一步是为了接收被记录在当前逻辑备库redo数据流中的数据字典,见步骤3。

如果该步骤成功执行,那么V$DATABASE.SWITCHOVER_STATUS列的值为PREPARING SWITCHOVER。

3.目标逻辑备库切换准备

通过如下的SQL创建目标逻辑备库的数据字典:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY; 
登录后复制

   该语句还同时启动了逻辑备库的redo传输服务,该数据库将开始将自身的redo数据发送到当前的主库以及Data Guard配置中的其他备库。接收逻辑备库redo数据的这些数据库但并不应用这些redo数据。

   当数据字典开始写入redo数据流中,逻辑备库的V$DATABASE.SWITCHOVER_STATUS值变为PREPARING DICTIONARY,一旦操作成功执行,SWITCHOVER_STATUS变为PREPARING SWITCHOVER。

4.确认当前主库已经为未来的主库redo数据流做好了准备

   在完成主库到备库角色的切换之前,通过查询V$DATABASE的SWITCHOVER_STATUS值来确认数据字典已经被主库接收,如果数据字典未被接收,那么切换操作将不能完成。因为当前主库不能够解析新主库传来的redo数据。

SWITCHOVER_STATUS的值表明了switchover的进程,当值为TO LOGICAL STANDBY时,进入步骤5.

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
登录后复制
登录后复制
登录后复制

备注:终止主库switchover操作:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
登录后复制
登录后复制

终止逻辑备库switchover操作:

SQL> ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;
登录后复制
登录后复制

5.切换主库到逻辑备库角色

通过如下SQL切换主库到逻辑备库角色:

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;
登录后复制

该语句将等待当前所有主库停止所有的事务以及防止任何新用户启动新事务,并且建立切换提交的时间点。

   该语句还将防止用户对逻辑备库的数据做任何的修改操作,为了确保快速执行完,执行该switchover语句前确保主库在没有更新活动的静止状态,比如,所有用户暂时不要登录主库。可以通过V$TRANSACTION视图查询当前正在进行的事务中可能延迟执行该SQL的详细信息。

此时,主库已经在往备库角色过渡了,你不可以关闭或者重启数据库。

6.确保所有可用的redo数据都已经被应用到将转为新主库的目标逻辑备库中

   当完成主库到逻辑备库角色的切换,而且配置中的备库已经接收了切换通知,应确认切换通知已经被目标备库处理,这个可以通过查询目标备库V$DATABASE中的SWITCHOVER_STATUS来核实,一旦所有可用的redo数据已经应用到了逻辑备库,SQL应用会按照预期的角色转换目标而自动关闭。

SWITCHOVER_STATUS值的更新显示switchover的进度,当值为TO PRIMARY,则进入第7步。

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
登录后复制
登录后复制
登录后复制

7.切换逻辑备库到主库角色

执行如下SQL,完成逻辑备库到主库角色的转换:

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
登录后复制

   不需要对Data Guard配置中的逻辑备库进行关闭或者重启的操作,因为配置中的其他逻辑备库将变成新主库的备库,但是任何物理备库还是原主库的备库。

8.新的逻辑备库开启SQL应用

新逻辑备库上执行SQL:

SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
登录后复制

二.逻辑备库的failover操作

   本节介绍逻辑备库的failover操作,逻辑备库的failover必须对故障的主库以及所有的逻辑备库进行正确的操作。另外如果主库没有开启闪回功能,那么就只能通过当前主库的备份来重建主库,或者通过主备库切换解决该问题。

根据数据库配置的保护模式和重做传输服务的属性,主库可能会自主恢复所有或部分的修改操作。

   1.将主库未发送的重做日志发送到目标备库

   如果主库可以装载(mounted),那么有可能可以将主库未发送的重做日志发送到目标备库。如果该操作能成功执行,那么零数据丢失的failover是可能的,即便主库不是运行在零数据丢失的保护模式下。

   注意,该操作要确保目标备库的Redo Apply是开启的,并且主库是mount状态。

   主库执行如下SQL:

SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;
登录后复制

   这里的target_db_name是指接收主库传来的重做日志的备库的DB_UNIQUE_NAME,这个SQL将主库未发送的重做日志刷到目标备库,并且等待重做数据被应用到备库。

   2.复制并注册所有的归档重做日志到目标逻辑备库,以使目标逻辑备库成为新的主库。

   根据配置的组件条件,你可以访问主库的归档重做日志,那么:

  • 确定逻辑备份数据库是否有任何归档重做日志文件丢失;

  • 从主数据库复制丢失的日志文件到逻辑备份数据库;

  • 注册复制的日志文件。

逻辑备份数据库注册归档的重做日志文件:

SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE -

> '/disk1/oracle/dbs/log-%r_%s_%t.arc';

Database altered.
登录后复制

3.启用LOG_ARCHIVE_DEST_STATE_n

   如果之前没有配置基于角色的归档传输路径,配置新主库对应的远程逻辑备库的初始化参数中的远程日志传输路径,手动启用该参数。

比如启用LOG_ARCHIVE_DEST_2:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
登录后复制

   为确保新主库重启后,此次做的更改仍然有效,可以将该参数写进数据库文本初始化参数文件,一般来说,当数据库是主库角色时,必须开启归档到远程目的地,如果是备库角色,该参数就应该disable。

4.激活新主库

在目标备库上执行SQL:

SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY;
登录后复制
            该语句关闭RFS进程,在目标备库成为新主库之前,应用目标备库中剩下的重做日志,然后停止SQL应用,激活主库。如果没有FINISH APPLY子句,那么在目标备库转为主库角色前,当前目标备库不会应用还未应用的重做日志。

   5.Failover后恢复其他备库

   确保现有的其他备库继续为新主库提供保护。

   6.备份新主库

   在执行failover之后,备份新主库,立即执行备份是一个必要的安全措施,因为没有完整的数据库备份,就不能在failover之后对数据库进行恢复。

   7.还原失败的主库

   Failover之后,原主库可以转换成新主库的逻辑备库,或者可以应用新主库的备份重建为逻辑备库。一旦原主库转换为备库角色,就可以通过swtichover重新转换成主库角色。

本文参阅Oracle官方文档翻译,不足之处欢迎批评指正!害羞


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

oracle如何查表空间大小 oracle如何查表空间大小 Apr 11, 2025 pm 08:15 PM

要查询 Oracle 表空间大小,请遵循以下步骤:确定表空间名称,方法是运行查询:SELECT tablespace_name FROM dba_tablespaces;查询表空间大小,方法是运行查询:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

oracle数据库如何导入 oracle数据库如何导入 Apr 11, 2025 pm 08:06 PM

数据导入方法:1. 使用 SQLLoader 实用程序:准备数据文件、创建控制文件、运行 SQLLoader;2. 使用 IMP/EXP 工具:导出数据、导入数据。提示:1. 大数据集推荐 SQL*Loader;2. 目标表应存在,列定义匹配;3. 导入后需验证数据完整性。

如何在oracle中创建表 如何在oracle中创建表 Apr 11, 2025 pm 08:00 PM

创建 Oracle 表涉及以下步骤:使用 CREATE TABLE 语法指定表名、列名、数据类型、约束和默认值。表名应简洁、描述性,且不超过 30 个字符。列名应描述性,数据类型指定列中存储的数据类型。NOT NULL 约束确保列中不允许使用空值,DEFAULT 子句可指定列的默认值。PRIMARY KEY 约束标识表的唯一记录。FOREIGN KEY 约束指定表中的列引用另一个表中的主键。请参见示例表 students 的创建,其中包含主键、唯一约束和默认值。

oracle如何查看实例名 oracle如何查看实例名 Apr 11, 2025 pm 08:18 PM

在 Oracle 中查看实例名的方法有三种:命令行中使用 "sqlplus" 和 "select instance_name from v$instance;" 命令。在 SQL*Plus 中使用 "show instance_name;" 命令。通过操作系统的任务管理器、Oracle Enterprise Manager 或检查环境变量 (Linux 上的 ORACLE_SID)。

Oracle安装失败如何卸载 Oracle安装失败如何卸载 Apr 11, 2025 pm 08:24 PM

Oracle 安装失败的卸载方法:关闭 Oracle 服务,删除 Oracle 程序文件和注册表项,卸载 Oracle 环境变量,重新启动计算机。若卸载失败,可使用 Oracle 通用卸载工具手动卸载。

oracle如何增加表字段 oracle如何增加表字段 Apr 11, 2025 pm 07:30 PM

使用 ALTER TABLE 语句,具体语法如下:ALTER TABLE table_name ADD column_name data_type [constraint-clause]。其中:table_name 为表名,column_name 为字段名,data_type 为数据类型,constraint-clause 为可选的约束。示例:ALTER TABLE employees ADD email VARCHAR2(100) 为 employees 表添加 email 字段。

oracle如何去重查询 oracle如何去重查询 Apr 11, 2025 pm 07:33 PM

Oracle 提供多种去重查询方法:DISTINCT 关键字返回每列的唯一值。GROUP BY 子句对结果分组并返回每个分组的非重复值。UNIQUE 关键字用于创建仅包含唯一行的索引,查询该索引将自动去重。ROW_NUMBER() 函数分配唯一数字并过滤出仅包含第 1 行的结果。MIN() 或 MAX() 函数可返回数字列的非重复值。INTERSECT 运算符返回两个结果集的公共值(无重复项)。

oracle视图如何加密 oracle视图如何加密 Apr 11, 2025 pm 08:30 PM

Oracle 视图加密允许您加密视图中的数据,从而增强敏感信息安全性。步骤包括:1) 创建主加密密钥 (MEk);2) 创建加密视图,指定要加密的视图和 MEk;3) 授权用户访问加密视图。加密视图工作原理:当用户查询加密视图时,Oracle 使用 MEk 解密数据,确保只有授权用户可以访问可读数据。

See all articles