目录
LLL的数据库培训-19-第二部分—Oracle基础知识培训—第11讲—Oracle11g的ADG—主备库切换流程(linux/windows通用)
一、主备库切换
注:A和B是两台服务器,他们两个的名称不会改变
1、主库(A)进行关闭再启动(为断开前端链接)
SQL>shutdown immediate SQL>startup lsnrctl stop lsnrctl start
2、先查看主备库归档是否同步
SQL>select unique thread#,max(sequence#) over(partition by thread#)last from v$archived_log;
如果同步(即序列号一致),可以进行切换;
如果不同步,需要排查完成,同步后再进行切换。
3、主库(A)进行日志切换,再次查看主备库同步情况
SQL>alter system switch logfile; SQL>select unique thread#,max(sequence#) over(partition by thread#)last from v$archived_log;
如果同步(即序列号一致),可以进行切换;
如果不同步,需要排查完成,同步后再进行切换。
4、原主库(A)操作,切换为新备库:
(1)查看switchover_status状态:
select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
①如果switchover_status为TO_STANDBY说明可以直接转换
alter database commit to switchover to physical standby;
②如果switchover_status为SESSIONS ACTIVE 则关闭会话
alter database commit to switchover to physical standby with session shutdown;-- 主库有会话连接的时候
(2)关闭数据库
shutdown immediate; ORA-01012: not logged on
(3)打开数据库,但不挂载
startup nomount;
(4)备库(B)执行语句,查看状态
select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
此时查看备库,switchover_status是否为to primary状态,如果是,则可以正常切换。
如果switchover_status是not allowed,则说明主库进行switchover有问题,重新运行上面语句。
(5)原主库(A)以备机模式挂载数据库
alter database mount standby database;
①原主库(A)执行下句:
select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;
查看switchover_status是否为recovery_needed,如果是,则下一步;
②查看原备库(B)语句:
select switchover_status from v$database;
switchover_status是否为to primary,
如果是,可以进行切换。
如果不是,而是sessions active状态,说明备库有连接,进行备库数据库关闭并挂载重启(startup mount)即可恢复。
5、原备库(B)查看并切换为新主库(B)
(1)select DATABASE_ROLE from v$database; --备库为PHYSICAL STANDBY 状态,主库为PRIMARY状态
(2)select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database; SWITCHOVER_STATUS 如果为not allowed,表示当前备库为不可以做switch的操作,需要等主库进行switchover后就可以switchover操作了。 如果为to primary,表示可以进行备库到主库的转换了。
(3)alter database commit to switchover to primary; 如果出现:ORA-01093: alter database close only permitted with no sessions connected 解决: alter database commit to switchover to primary with session shutdown;
(4)shutdown immediate;
(5)startup;
6、新备库(A)设备库此时为mounted状态,先同步数据,再设置为Open,再同步
SQL> alter database recover managed standby database using current logfile disconnect from session; SQL> alter database recover managed standby database cancel; SQL> alter database open; SQL> alter database recover managed standby database using current logfile disconnect from session;
7、查看新主备库的角色
select DATABASE_ROLE from v$database;--新备库(A)为PHYSICAL STANDBY 状态,新主库(B)为PRIMARY状态
8、原备库(B)更换为新主库(B)后,此库的archivelog日志可以直接删除,不在此库的rman记录中。
可以使用RMAN>CROSSCHECK ARCHIVELOG ALL;进行查看最新的archivelog,把不在其中的,系统下删除即可。
9、新主\库备库分别执行下列语句,并查看归档日志是否一致,如果一致,则切换成功
新主备库查看序列号:
SQL>select unique thread#,max(sequence#) over(partition by thread#)last from v$archived_log;
新主库(B)切换归档
SQL>alter system switch logfile;
新主备库查看:
SQL>select unique thread#,max(sequence#) over(partition by thread#)last from v$archived_log;
如果序列号一致即成功。
二、如果双方IP也要进行更换或对调
1、先关闭新备库同步
SQL> alter database recover managed standby database cancel;
2、在关闭新备库数据库
SQL>shutdown immediate
3、再关闭新主库数据库
SQL>shudown immediate
4、更换主备库IP(更换或对调IP)
5、更改tnsnames.ora mesorcl和mesorclstd的IP对调
6、重启监听(主备库):
lsnrctl stop, lsnrctl start
7、打开主库
SQL>startup
8、打开备库并执行同步
SQL>startup mount SQL> alter database recover managed standby database using current logfile disconnect from session; SQL> alter database recover managed standby database cancel; SQL> alter database open; SQL> alter database recover managed standby database using current logfile disconnect from session;
9、查看主备归档日志是否一致
SQL>select unique thread#,max(sequence#) over(partition by thread#)last from v$archived_log;
10、主库执行日志切换,再查看主备库的序列号是否一致
SQL>alter system switch logfile; SQL>select unique thread#,max(sequence#) over(partition by thread#)last from v$archived_log;
至此切换完成。