1、主库
select open_mode,database_role,protection_mode,protection_level,switchover_status from v$database;
alter system switch logfile;
alter system archive log current;
alter database commit to switchover to physical standby with session shutdown;
如果swtichover_status状态为session active,就需要在命令中加入with session shutdown子句。
执行后,我们发现Primary ora11g已经关闭。
加入with session shutdown相当于杀掉连接进程了,此时库已经关闭了,保险起见,我们执行下
shutdown abort
重启主库到mount阶段,确保主库不会在有连接导致数据变动
startup mount
查看主库状态
select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
alter database open;
Database altered.
此时主库虽然这样打开,但是还是read only的状态。因为上面执行了alter database commit to switchover to physical standby with session shutdown;这条语句。
查看主库切换状态:
select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
2、备库
select open_mode,database_role,protection_mode,protection_level,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
SWITCHOVER_STATUS
--------------------
READ ONLY PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
NOT ALLOWED
注意备库的SWITCHOVER_STATUS此时是not allowed状态,说明备库日志并未应用完。
此时如果直接执行切换主库的操作,会报错
SQL> alter database commit to switchover to primary with session shutdown ;
alter database commit to switchover to primary with session shutdown
*
ERROR at line 1:
ORA-16139: media recovery required
要等这个switchover_status状态变成to primary以后才能切,我第一次不知道,在这中间一通停库起库,结果就变成to primary了,不知道还有没有其他方法
SQL> select open_mode,database_role,protection_mode,protection_level,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
SWITCHOVER_STATUS
--------------------
MOUNTED PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
TO PRIMARY
执行切换alter database commit to switchover to primary with session shutdown ;
SQL> alter database commit to switchover to primary with session shutdown ;
Database altered.
3、在新的备库上(原主库)执行启用日志实时应用模式
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
执行启动日志实时应用
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
查看状态
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
SQL> select status ,gap_status from v$archive_dest_status where dest_id in (1,2);
STATUS GAP_STATUS
--------- ------------------------
VALID
VALID
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
NOT ALLOWED
SQL> select open_mode,database_role,protection_mode,protection_level,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- ---------------- -------------------- -------------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE NOT ALLOWED
4、主库(新的主库,原备库)查看状态
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY
SQL> select status ,gap_status from v$archive_dest_status where dest_id in (1,2);
STATUS GAP_STATUS
--------- ------------------------
VALID
VALID NO GAP
SQL> select open_mode,database_role,protection_mode,protection_level,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS
-------------------- ---------------- -------------------- -------------------- --------------------
READ WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO STANDBY