[Oracle]oracle adg role transaction(角色切换)


本文总阅读量

1、如果保护模式使maximum protection mode,在主库宕掉的情况下使用failover必须将备库的保护模式切换为maximium performance才能执行切换操作

ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;

2、手动执行switchover进行角色切换

2.1、确认主库的状态,是否可以切换为备库角色

SELECT SWITCHOVER_STATUS FROM V$DATABASE;
只有值为TO STANDBY或者SESSIONS ACTIVE才表示主库可以被切换为备库,如果不是这两个值,则不能进行切换(可能redo transport配置问题或者功能异常)

2.2、开始主库执行切换

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
如果2.1查到的值为to standy,那么执行上面的语句可以省略WITH SESSION SHUTDOWN

2.3、关闭数据库,并启动到mount状态

1
2
SQL> SHUTDOWN ABORT;
SQL> STARTUP MOUNT;

2.4、从库查询切换状态是否可以切换为主库

1
2
3
4
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY

只有值为TO_PRIMARY或者SESSIONS ACTIVE才表示备库可以切换为主库角色,如果不是这两个值,需要确认redo apply是否激活和redo transport状态是否正常。

2.5、备库执行切换为主库角色

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
如果2.4查到的值为to_primary,可以省略WITH SESSION SHUTDOWN

2.6、打开新的主库

ALTER DATABASE OPEN;

2.7、在新的从库启用redo apply

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

3、当主库宕机无法启动,使用failover的方式切换备库为主库

3.1、如果主库是处在mount状态,没办法open的情况下,可以使用下面命令把未传送到备库的archive和redo发送到备库,以确保数据不丢失

SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;
target_db_name为备库的DB_UNIQUE_NAME

3.2、如果主库不能够被mount,但是主库的操作系统可以被正常访问,备库查看每个日志线程的最高日志序列号

1
2
3
4
03:48:57 SYS@ cbislave> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;
THREAD LAST
---------- ----------
1 45

主库的归档日志对应为
-rw-r----- 1 oracle oinstall 172M Sep 6 03:48 1_45_1017616040.dbf
把当前45号及以后的归档拷贝到从库,并把丢失的日志注册到从库,注册命令如下:
SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';

3.3、查看和解决归档日志间隙

查看视图v$ARCHIVE_GAP,来查看备库是否有redo gap

1
2
3
4
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';

3.4、如果3.2和3.3的步骤都没办法操作(比如主节点没办法访问),那么只能执行后面的切换,会丢失数据

3.5、备库停止redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

3.6、结束应用所有收到的redo data

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

如果这一步没有报错,进行下一步操作。如果提示错误,一些收到的redo data没有被应用,试着解决提示的错误在执行下一步。如果3.2、3.3、3.4提到的日志间隙没有解决也会提示对应的日志间隙的错误。如果错误不能解决,在备库执行下面语句(面临数据丢失)
SQL> ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE;

3.7、备库查看切换状态

1
2
3
4
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO PRIMARY

值为TO PRIMARY或者session active表示可以切换为主库角色。

3.8、备库切换为主库角色

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
3.7查到的值为to_primary,可以省略WITH SESSION SHUTDOWN

3.9、打开新的主库

SQL> ALTER DATABASE OPEN;

3.10、新的主库起来之后建议执行以下全库备份

4、经过上面3的步骤之后,旧的主库(如果能起来的话)不可用了,但是可以使用flashback database方法切换为备库

4.1、在新的主库(旧的备库)上查看旧的备库切换为新的额主库的scn值

SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;

4.2、在旧的主库上执行闪回,将其闪回到4.1查询到的scn号

1
2
3
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> FLASHBACK DATABASE TO SCN standby_became_primary_scn;

4.3、下面切换旧的主库为物理备库

1
2
3
4
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
如果语句执行成功,会将当前的控制文件转换为standby控制文件
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;

4.4、开始向新的备库(旧的主库)传输redo

在新的主库上先执行下面语句

4.4.1、查看归档地址状态

SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION,ERROR,SRL FROM V$ARCHIVE_DEST_STATUS;

4.4.2、如果有必要启用地址

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_n=ENABLE;

4.4.3、执行日志切换,确保新的备库可以收到redo

1
2
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> SELECT DEST_ID, DEST_NAME, STATUS, PROTECTION_MODE, DESTINATION, ERROR,SRL FROM V$ARCHIVE_DEST_STATUS;

4.5、新的备库启动redo apply

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

目录
  1. 1. 1、如果保护模式使maximum protection mode,在主库宕掉的情况下使用failover必须将备库的保护模式切换为maximium performance才能执行切换操作
  2. 2. 2、手动执行switchover进行角色切换
    1. 2.1. 2.1、确认主库的状态,是否可以切换为备库角色
    2. 2.2. 2.2、开始主库执行切换
    3. 2.3. 2.3、关闭数据库,并启动到mount状态
    4. 2.4. 2.4、从库查询切换状态是否可以切换为主库
    5. 2.5. 2.5、备库执行切换为主库角色
    6. 2.6. 2.6、打开新的主库
    7. 2.7. 2.7、在新的从库启用redo apply
  3. 3. 3、当主库宕机无法启动,使用failover的方式切换备库为主库
    1. 3.1. 3.1、如果主库是处在mount状态,没办法open的情况下,可以使用下面命令把未传送到备库的archive和redo发送到备库,以确保数据不丢失
    2. 3.2. 3.2、如果主库不能够被mount,但是主库的操作系统可以被正常访问,备库查看每个日志线程的最高日志序列号
    3. 3.3. 3.3、查看和解决归档日志间隙
    4. 3.4. 3.4、如果3.2和3.3的步骤都没办法操作(比如主节点没办法访问),那么只能执行后面的切换,会丢失数据
    5. 3.5. 3.5、备库停止redo apply
    6. 3.6. 3.6、结束应用所有收到的redo data
    7. 3.7. 3.7、备库查看切换状态
    8. 3.8. 3.8、备库切换为主库角色
    9. 3.9. 3.9、打开新的主库
    10. 3.10. 3.10、新的主库起来之后建议执行以下全库备份
  4. 4. 4、经过上面3的步骤之后,旧的主库(如果能起来的话)不可用了,但是可以使用flashback database方法切换为备库
    1. 4.1. 4.1、在新的主库(旧的备库)上查看旧的备库切换为新的额主库的scn值
    2. 4.2. 4.2、在旧的主库上执行闪回,将其闪回到4.1查询到的scn号
    3. 4.3. 4.3、下面切换旧的主库为物理备库
    4. 4.4. 4.4、开始向新的备库(旧的主库)传输redo
      1. 4.4.1. 4.4.1、查看归档地址状态
      2. 4.4.2. 4.4.2、如果有必要启用地址
      3. 4.4.3. 4.4.3、执行日志切换,确保新的备库可以收到redo
    5. 4.5. 4.5、新的备库启动redo apply

Proudly powered by Hexo and Theme by Lap
本站访客数人次
© 2020 zeven0707's blog