随笔-42  评论-12  文章-0  trackbacks-0
一个data guard 配置由一个主数据库和一个或多个备用数据库组成,当你需要完成主库的维护操作时,你需要转换主库和一台备用数据库的角色。要查看当前数据库的角色,可以查询V$DATABASE视图的DATABASE_ROLE列。
本文章描述了Data Guard角色管理服务以及允许你改变和管理Data Guard配置中的数据库角色的操作,包括以下主题:
角色转换介绍
包括物理备用数据库的角色转换
包括逻辑备用数据库的角色转换
1、角色转换介绍
oracle Data Guard支持两种角色转换操作:
Switchover
允许主数据库与它的备用数据库中的一台转换角色。转换期间没有数据丢失。转换之后,每一个数据库继续使用它的新角色参与工作。
Failover
当主数据库失败时转换一个备用数据库成为主数据库。如果在问题发生之前,主数据库没有工作在最高保护模式或者最高可用性模式,可能会丢失一些数据。切换完成后,发生问题的数据库不再参与Data Guard配置进行工作。
注意:Oracle Data Guard的Switchover和Failover不会自动调用。你必须使用SQL语句或者Data Guard broker初始化一个switchover 或者 failover的操作。
1.1使用哪种角色转换

通常,考虑一下修复主库和完成角色转换哪个更快。如果你能修复主库,你可以不需要配置客户端应用连接新的数据库。但是,如果修复操作会导致数据丢失,你可以闪回备用数据库,如果你启用闪回数据库,你就需要重建所有的备用数据库。
如果你决定使用角色转换并且配置中包含一个或多个物理备用数据库,oracle推荐你使用可用的物理备用数据库完成转换。
2、包含逻辑备用数据库的角色转换:
如果逻辑备用数据库被配置为只包含主库的数据子集时,会导致数据丢失。
在角色转换后,需要配置中的所有物理备用数据库进行重建。
2.1Switchovers
一个Switchover包括两个阶段。第一部分,主库被转换为备用数据库。第二部分,一个备用数据库被转换为主库角色。
在当前主数据库:
第一步,验证是否能够完成switchover
在主数据库,查询V$DATABASE视图的SWITCHOVER_STATUS列,例如:
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
1 row selected
TO STANDBY值表示主数据库可以转换成备用角色。如果不显示TO STANDBY,你需要验证Data Guard配置是否正确,比如所有的LOG_ARCHIVE_DEST_n参数是否正确配置。如果值是SESSIONS ACTIVE,你需要检查和终止活动的用户,如果始终显示SESSIONS ACTIVE,你可以在语句ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY之后附加WITH SESSION SHUTDOWN子句来完成切换。
第二步,在主数据库发起切换
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
第三步,关闭和重新启动主实例
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
在目标物理备用数据库:
第四步,验证switchover状态
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY
1 row selected
第五步,切换物理备用数据库为主库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
第六步,关闭并重新启动备用数据库
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
注意:不需要关闭和重新启动其他的备用数据库
在新的物理备用数据库和其他的备用数据库:
第七步,如果需要的话,重新启动日志应用服务
在新的主数据库:
第八步,开始传送日志数据
SQL> ALTER SYSTEM SWITCH LOGFILE;
2.2包含物理备用数据库的Failovers
在所有情况下,Failover之后,主数据库不能够再次加入Data Guard配置中。
在多数情况下,其他的备用数据库不直接参与failover,不需要被重新启动
在某些情况下,配置新的主数据库后,需要重建所有的备用数据库
注意:oracle建议你使用文中推荐描述的命令和步骤来完成failover,不要使用ALTER DATABASE ACTIVATE STANDBY DATABASE来完成failover,因为这个语句会导致数据丢失。
2.2.1failover步骤
第一步,解决缺少的归档重做日志
要确定是否备用数据库缺少归档重做日志,查询V$ARCHIVE_GAP视图,这个视图包含每个线程缺失的归档重做日志文件顺序号。
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 90 92
从主库复制所有缺失的文件到备库,并登记它们:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
第二步,重复第一步,直到解决所有日志缺失问题
第三步,复制其他缺失的归档日志文件。
要确定是否缺少其他的归档日志文件,在目标备用数据库查询V$ARCHIVED_LOG视图获取每个线程最大的顺序号。
SQL> SELECT UNIQUE 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';
所有可用的归档日志文件都登记之后,查询V$ARCHIVE_GAP视图确认是否缺失文件。
第四步,在目标物理备用数据库开始failover操作
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
如果目标物理备用数据库没有配置备用重做日志文件,需要加上FINISH SKIP STANDBY LOGFILE子句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
2> FINISH SKIP STANDBY LOGFILE;
第五步,转换物理备用数据库为主数据库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
运行完这个语句之后,备库被转换为主库,结果,你不能够使用这个数据库作为备用数据库也不能够应用后来从主库传输过来的日志。这期间,备用重做日志文件自动归档,并且恢复在所有其他的备用数据库
在新的主数据库:
第六步,重启新的主数据库
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
第七步,可选择的,备份新的主数据库
第八步,可选择的,恢复失败的主数据库
使用闪回恢复恢复到某时间点
重建失败的主数据库
3、包括逻辑备用数据库的角色转换
3.1Switchover
在主数据库:
第一步,验证是否可以进行Switchover
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
1 row selected
TO STANDBY,TO LOGICAL STANDBY或者 SESSIONS显示主数据库可以被转换成逻辑备用角色。
第二步,准备当前的主数据库
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO LOGICAL STANDBY;
在目标逻辑备用数据库:
第三步,准备切换目标逻辑备用数据库
SQL> ALTER DATABASE PREPARE TO SWITCHOVER TO PRIMARY;
在当前的主数据库:
第四步,验证switchover状态
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO LOGICAL STANDBY
1 row selected
当查询结果是TO LOGICAL STANDBY时,你可以进行下一步
第五步,切换主数据库为逻辑备用数据库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO LOGICAL STANDBY;
主数据库转换成逻辑备用数据库,你不需要关闭和重新启动。
在目标逻辑备用数据库(新的主数据库):
第六步,验证switchover状态
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO PRIMARY
1 row selected
如果是TO PRIMARY,你可以进行下一步
第七步,切换目标备用数据库为主数据库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
不需要关闭和重启
第八步,确保所有备用数据库开始接收重做数据
在新的主数据库:
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
在新的逻辑备用数据库,启动sql 应用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY;
3.2包括逻辑备用数据库的Failover
在所有情况下,原始的主数据库和所有物理备用数据库都不能保持在新的Data Guard配置中。
在多数情况下,其他的逻辑备用数据库不需要重新启动
在少数情况下,配置新的主数据库之后需要重建所有的备用数据库
在逻辑备用数据库:
第一步,复制和登记缺失的归档重做日志文件
在逻辑备用数据库,查询DBA_LOGSTDBY_LOG视图来确定哪些日志文件是缺少的,然后登记它们。例如:
SQL> COLUMN FILE_NAME FORMAT a55;
SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L
2> WHERE NEXT_CHANGE# NOT IN
3> (SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#)
4> ORDER BY THREAD#,SEQUENCE#;
THREAD# SEQUENCE# FILE_NAME
---------- ---------- -----------------------------------------------
1 6 /disk1/oracle/dbs/log-1292880008_6_1.arc
1 10 /disk1/oracle/dbs/log-1292880008_10_1.arc
缺失文件的顺序号为7,8,9
复制,然后登记它们:
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE
2> '/disk1/oracle/dbs/log-%r_%s_%t.arc';
Database altered.
第二步,确保所有可用的归档重做日志都被应用了
SQL> SELECT APPLIED_SCN, NEWEST_SCN FROM DBA_LOGSTDBY_PROGRESS;
APPLIED_SCN NEWEST_SCN
----------- ----------
190725 190725
当两个值相等时,表明所有日志都被应用了。
注意:启动sql应用:SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NODELAY FINISH;
Database altered.
第三步,远端目标
如果没有配置基于角色的目的地,检验新的主数据库的初始化参数中对应远端逻辑备用目的地,并手工启用对于每一个目的地的日志归档。
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH;
第四步,激活新的主数据库
SQL> ALTER DATABASE STOP LOGICAL STANDBY APPLY;
SQL> ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE;
在其他的逻辑备用数据库:
第五步,在其他备用数据库准备恢复
在每一个逻辑备用数据库创建数据库链接。
SQL> ALTER SESSION DISABLE GUARD;
SQL> CREATE DATABASE LINK chicago
2> CONNECT TO username IDENTIFIED BY password USING 'chicago';
SQL> ALTER SESSION ENABLE GUARD;
检验数据库链接
SQL> SELECT * FROM DBA_LOGSTDBY_PARAMETERS@chicago;
第六步,开始sql应用
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY chicago;
如果出现ORA-16109错误,你必须要重建逻辑备用数据库,然后把它加进Data Guard配置中。
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY chicago;
ALTER DATABASE START LOGICAL STANDBY APPLY NEW PRIMARY chicago
ERROR at line 1:
ORA-16109: failed to apply log data from previous primary
在新的主数据库:
第七步,可选的,备份新的主数据库
第八步,可选的,恢复失败的主数据库





posted on 2007-12-11 13:34 tianjuchuan 阅读(1019) 评论(0)  编辑 收藏 引用 所属分类: dataguard
只有注册用户登录后才能发表评论。