欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

物理standby的Failover

程序员文章站 2022-06-14 22:48:32
...

参考与:《三思笔记》此书 物理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服务器。