WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606
全部博文(599)
分类: Oracle
2010-01-22 18:02:37
一、物理备数据库的切换
切换必须在当前主数据库上发起,并且在目标备数据库上完成。下面的步骤描述如何执行切换。
第 1 步检验是否可能执行切换。
在当前主数据库上,在主数据库上查询 V$DATABASE 固定视图的SWITCHOVER_STATUS 列,以检验是否可能执行切换。例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
1 row selected
在 SWITCHOVER_STATUS 列中的TO STANDBY 值指出可能切换主数据库到备角色。如果TO STANDBY 值没有显示,则检查Data Guard 配置是否正确起作用(例如,检查所有的LOG_ARCHIVE_DEST_n 参数值被正确指定)。如果在 SWITCHOVER_STATUS 列中的值是SESSIONS ACTIVE,你需要终止可能阻碍切换处理的活动用户或SQL会话。如果,在执行这些步骤之后,SWITCHOVER_STATUS 列还是显示SESSION ACTIVE,你能通过添加WITH SESSION SHUTDOWN 子句到步骤2 中描述的ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY 语句来成功执行切换。
第 2 步在主数据库上发起切换。
要更改当前主数据库到物理备数据库角色,在主数据库上使用下面 SQL 语句:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
在这个语句完成后,主数据库转换到备数据库。当前控制文件在切换前备份到当前SQL会话跟踪文件。这使得有可能重构当前控制文件,如果必要的话。
第 3 步关闭并重启前主实例。
关闭前主实例,并重启和安装数据库:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
注意:在切换过程的这个点,两个数据库都配置为备数据库。
第 4 步检验 V$DATABASE 视图中的切换状态。
在你更改主数据库到物理备角色,以及配置中的备数据库接收到切换通知之后,你应该检验目标备数据库是否处理切换通知,通过查询目标备数据库上的V$DATABASE 固定视
图的SWITCHOVER_STATUS 列。
例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY
1 row selected
如果 SWITCHOVER_STATUS 列中的值是SESSION ACTIVE,你需要确定并终止可能阻碍切换处理的活动用户或SQL 会话。
如果,在执行这些步骤之后,SWITCHOVER_STATUS 列还是显示SESSION ACTIVE,你能处理到步骤5,并过添加WITH SESSION SHUTDOWN 子句到切换语句。
第 5 步切换目标物理备数据库角色到主角色。
当备数据库实例安装在重做应用模式或对只读访问打开时,你能将物理备数据库从备角色切换到主角色。必须是这些模式之一,主数据库的切换请求才能被调度。在备数据库处于适当的模式,在你希望更改主角色的物理备数据库上,执行下面的SQL 语句:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
第 6 步完成备数据库到主角色的转换。
你执行的任务依赖于物理备数据库是否曾经以只读模式打开过:
l 如果物理备数据库自从上次启动过后没有以只读模式打开过,执行SQL ALTER DATABASE OPEN 语句来打开新的主数据库:
SQL> ALTER DATABASE OPEN;
l 如果物理备数据库自从上次启动过后曾经以只读模式打开,你必须关闭目标备数据库并重启:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
注:
不需要关闭并重启在切换的时候联机的其它备数据库(不包括在切换中的)。这些备数据库在切换完成后将继续正常起作用。
第 7 步如果必要,在备数据库上重启日志应用服务。
对于新的物理备数据库和 Data Guard 配置中的每个其它物理或逻辑备数据库,如果日
志应用服务没有预先配置在切换过程中持续打开,使用合适的命令来重启日志应用服务。
第 8 步开始发送重做数据到备数据库。
在新的主数据库上执行下面语句:
SQL> ALTER SYSTEM SWITCH LOGFILE;
二、物理备数据库的故障转移
本小节描述如何执行包含物理备数据库的故障转移。
在包含物理备数据库的故障转移过程中:
l 在所有情况中,在故障转移后,原主数据库不能再参与在 Data Guard 配置中。
l 在大多数情况中,其它逻辑或物理备数据库不直接参与配置中剩余的故障转移,并不必须关闭或重启。
l 在一些情况中,可能有必要在配置新的主数据库之后重建所有备数据库。
这些情况在下面的故障转移步骤中的适当位置描述。
注:
Oracle 推荐你只使用在下面小节中描述的故障转移步骤和命令来执行故障转移。不要使用ALTER DATABASE ACTIVATE STANDBY DATABASE 来执行故障转移,因为这条语句可能导致数据丢失。
故障转移步骤
本小节描述了转换挑选的物理备数据库到主角色必须执行的步骤。任何也是配置中的一部分的其它物理或逻辑备数据库将保留在配置中,并将不需要关闭或重启。
如果目标备数据库操作于使用日志写进程(LGWR)的最大保护模式或最大可用性模式,在归档重做日志文件中不应该存在中断,你能直接进行到步骤4。否则,从步骤1 开始以确定是否必须执行一些手工中断解决步骤。
第 1 步确定并解决归档重做日志文件中的任何中断。
要在目标备数据库上确定是否在归档重做日志文件中存在中断,查询V$ARCHIVE_GAP 视图。V$ARCHIVE_GAP 视图包含对于每个线程已知丢失的归档重做日志文件的序列号。返回的数据只反映最高的中断。
例如:
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM
V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 90 92
在这个例子中,中断包括线程 1 的归档重做日志文件序号90、91、和92。如果可能,
从主数据库拷贝所有确定的丢失的归档重做日志文件到目标备数据库,并注册它们。这必须
对于每个线程执行。
例如:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
第 2 步重复步骤1 直到解决所有中断。
在步骤 1 中执行的查询只显示最高的中断信息。在解决那个中断后,你必须重复步骤1直到查询返回零行。
第 3 步拷贝任何其它丢失的归档重做日志文件。
要确定是否还有其它丢失的归档重做日志文件,在目标备数据库上查询V$ARCHIVED_LOG 视图以获得每个线程的最高序列号。
例如:
SQL> SELECT THREAD# AS THREAD, MAX(SEQUENCE#)
2> OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
THREAD LAST
---------- ----------
1 100
从包含比目标备数据库上可用的最高序列号更高序列号的主数据库,拷贝任何可用的归档重做日志文件到目标备数据库并注册它们。这必须对每个线程执行。
例如:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
在所有可用的归档重做日志文件已经注册后,如步骤 1 中描述地查询V$ARCHIVE_GAP 视图,检验没有更多的中断在步骤3 中引入。
注:
如果,当执行步骤1 到3 时,你不能解决在归档重做日志文件中的中断(例如,因为你
没有访问故障主数据库所在的系统),在故障转移过程中会发生数据丢失。
第 4 步在目标物理备数据库上发起故障转移。
执行下面语句以发起故障转移:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
FORCE 关键词终止目标物理备数据库上活动的RFS 进程,使得故障转移能不用等待网
络连接超时而立即进行。
注:
故障转移添加一个重做结束的标识到最后一个归档的日志文件的头部,并发送重做到所有允许的对于主数据库有效的目的地(使用VALID_FOR=(PRIMARY_ROLE, *_LOGFILES)或VALID_FOR=(ALL_ROLE, *_LOGFILES)属性指定)。
在SQL 语句中FINISH 关键词必须跟在所有其它关键词后面,除了FORCE、WAIT、或NOWAIT。
第 5 步转换物理备数据库到主角色。
一旦 SQL ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE 语句成功完成,通过执行下面SQL 语句更改物理备数据库到主数据库:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
在执行这条 SQL 语句之后,目标备数据库经历到主角色的转换。作为结果,你不能再使用这个数据库作为备数据库,并且任何后继的从原主数据库接收的重做不能被应用。再故障转移过程中,备重做日志文件在其它所有从原主数据库导出的备数据库上被自动归档并恢复。只有当备目的地在新的主数据库上正确定义时这才会发生。
没有必要关闭并重启任何其它在配置中没有参与故障转移的备数据库。
第 6 步完成备数据库到主数据库角色的转换。
你在本步骤执行的任务依赖于物理备数据库是否曾经以只读模式打开过:
l 如果物理备数据库自从上次启动过后没有以只读模式打开过,执行ALTER DATABASE OPEN 语句来打开新的主数据库。
SQL> ALTER DATABASE OPEN;
然后,跳到步骤 7。
l 如果物理备数据库自从上次启动过后曾经以只读模式打开,你必须关闭目标备数据库并重启:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
目标物理备数据库现在经历到主数据库角色的转换。
第7 步备份新的主数据库。
在执行 STARTUP 语句之前,备份新的主数据库。立即执行备份是必要的安全措施,因为你无法在没有完整的数据库备份拷贝的情况下,恢复故障转移之后的更改。
作为故障转移的结果,原数据库不能再参与在 Data Guard 配置中,并且所有其它备数据库现在接收和应用从新的主数据库的重做数据。