一、
切换前检查
1.
备库检查manager recovery
处于运行状态
SQL> SELECT PROCESS FROM V$MANAGED_STANDBY WHERE PROCESS LIKE 'MRP%';
2.
主库检查database
处于实时应用状态
SQL> SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID=2;
RECOVERY_MODE
-----------------------
MANAGED REAL TIME APPLY
如果备库没有处于实时应用状态,就需要重启实时应用
SQL>
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
3.
确保主库和备库临时文件匹配
对于临时文件,确保主库存在的临时文件备库也应存在。在初始备库创建后,主库新创建的临时文件不会传到备库。主备库执行以下SQL
:
SQL> SELECT TMP.NAME FILENAME, BYTES, TS.NAME TABLESPACE
FROM V$TEMPFILE TMP, V$TABLESPACE TS WHERE TMP.TS#=TS.TS#;
如果查询不匹配,需要立即修正不匹配内容。
4.
确保所有数据文件均为online
状态
SQL> SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE';
如果有数据文件处于offline
状态,在
switchover
之前需要将数据文件
offline
。
5.
确保备库不存在GAP
备库执行
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
THREAD#
LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1
8
0
82
如果没有返回结果,则说明不存在GAP
(断档);如果存在结果,则说明存在
GAP
。上述结果说明,
GAP
内容包含归档日志
sequence80,81,82
。需要主库复制上述归档日志,传输到备库,并且注册在备库,如下
SQl> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
二、
思路清晰
step1:
清理参数和
jobs
step2:
确保主库切换状态正常
step3:
主库执行
switchover
step4:
检查备库切换状态正常
step5:
备库执行
switchover
step6:
打开新主库和备库
step7:
新备库实时应用日志
step8:
检查主备库状态
三、
switchover
切换
1.
清理可能阻塞切换的parameters and jobs
1)
查看当前执行的JOBS
SQL> SELECT * FROM DBA_JOBS_RUNNING;
SQL>
SELECT OWNER, JOB_NAME, START_DATE, END_DATE, ENABLED FROM
DBA_SCHEDULER_JOBS WHERE ENABLED='TRUE' AND OWNER <> 'SYS'
;
如果有正在运行的job,
如果有必要就终止这些
job
。
2)
终止当前的job
SQL> EXECUTE DBMS_SCHEDULER.DISABLE(job_name);
2.
确保主库switchover_status
正常
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
注:主库的状态应为to primary
或
session active
。如果主库状态为
session active
,那么在切换时需要追加
with session shutdown
选项。如果主库是
RAC
,那么在切换前停止第二个节点。
3.
主库执行switchover
到备库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;
4.
检查备库switchover_status
正常
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
to primary
5.
备库switchover
为主库
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
此时,新主库处于Mount
状态,新备库处于
shutdown
状态
6.
打开新主库
SQL> alter database open;
7.
打开新备库
SQL> startup;
此时新备库模式为read only
;
8.
新备库实时应用日志
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
9.
检查主备库状态
SQL> select db_unique_name,open_mode,database_role,switchover_status from v$database;
---- end ----