参考与:《三思笔记》此书 物理standby的 failover 注意几点: 1 failover 之后, 原primary 数据库默认不再是data guard 配置的一部分。 2 多数情况下,其它逻辑/物理standby 数据库不直接参与failover的过程,因此这些数据库不需要做任何操作。 3 某些情况
参考与:《三思笔记》此书
物理standby的 failover
注意几点:
1 failover 之后,原primary 数据库默认不再是data guard 配置的一部分。
2 多数情况下,其它逻辑/物理standby 数据库不直接参与failover的过程,因此这些数据库不需要做任何操作。
3 某些情况下,新的primary 数据库配置之后,需要重新创建其它所有的standby 数据库。
另外,如果待转换角色的standby 处于maximum protection 或maximum availability 模式的话,归档日志应该是连续存在的,这种情况下你可以直接从第3 步执行,否则建议你按照操作步骤从第1 步开始执行。
一般情况下failover 都是表示primary 数据库瘫痪,最起码也是起不来了,因此这种类型的切换基本上不需要primary 数据库做什么操作。所以下列步骤中如果有提到primary 和standby 执行的,只是建议你如果primary还可以用,那就执行一下,即使它能用你却不执行,也没关系,不影响standby 数据库的切换:)
1、检查归档文件是否连续
查询待转换standby 数据库的V$ARCHIVE_GAP 视图,确认归档文件是否连接:
SQL>SELECT THREAD#, LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
no rows selected
如果返回的有记录,按照列出的记录号复制对应的归档文件到待转换的standby 服务器。这一步非常重要,必须确保所有已生成的归档文件均已存在于standby 服务器,不然可能会数据不一致造成转换时报错。文件复制之后,通过下列命令将其加入数据字典:
注册:gap文件:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
2、检查归档文件是否完整
分别在primary/standby 执行下列语句:
该语句取得当前数据库各线程已归档文件最大序号,如果primary 与standby 最大序号不相同,必须将多出的序号对应的归档文件复制到待转换的standby 服务器。不过既然是failover,有可能primary 数据库此时已经无法打开,甚至无法访问。
3、启动failover执行下列语句
15:30:42 scott@felix SQL>conn / assysdba
Connected.
15:30:51 sys@felix SQL>alter database recover managedstandby database finishforce;
Database altered.
FORCE 关键字将会停止当前活动的RFS 进程,以便立刻执行failover。
15:30:58 sys@felix SQL>select swtichover_status from v$database;
select swtichover_status from v$database
*
ERROR at line 1:
ORA-00904: "SWTICHOVER_STATUS":invalid identifier
15:31:21 sys@felix SQL>select status from v$instance;
STATUS
------------------------
MOUNTED
我们可以发现备库已经由open变成mount状态;
15:42:07 sys@felix SQL>alter database open;
Database altered.
15:42:18 sys@felix SQL>
剩下的步骤就与前面switchover 很相似了
4、切换物理standby 角色为primary
15:42:18 sys@felix SQL>alter database commit to switchover to primary;
Database altered.
15:45:18 sys@felix SQL>select switchover_status from v$database;
SWITCHOVER_STATUS
----------------------------------------
NOT ALLOWED
15:45:38 sys@felix SQL>select open_mode from v$database;
OPEN_MODE
----------------------------------------
MOUNTED
15:48:16 sys@felix SQL>alter database open;
Database altered.
15:48:36 sys@felix SQL>select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ WRITE
此时primary 数据库已经不再是data guard 配置的一部分,我们需要做的就是尝试看看能否恢复原primary 数据库,将其改造为新的standby服务器。