1、切換適用於主備工做狀態良好。主庫變動狀態爲備庫,備庫變動狀態爲主庫。node
2、故障轉移,適用於主庫故障、崩潰,不可修復,讓備庫變動狀態,接替主庫角色。sql
2.一、切換前準備
數據庫
一、檢查主庫上是否存在standby redo logfile服務器
select group#,member,type from v$logfile where type='STANDBY';session
2、在物理standby數據庫上檢查當standby端切換爲主庫時,是否能傳遞redo數據到新的standby數據庫oracle
tnsping orcl 10 app
3、在主庫上測試到備機得tnsnames是否聯通ide
四、在swithover前檢查物理standby數據庫上是否有臨時表空間的設置性能
五、檢查主庫和物理standby數據庫是否有離線的數據文件測試
六、肯定主庫和物理備份庫的最大歸檔日誌序列號是否匹配
在主庫上查詢每個實例的最大歸檔序列號
在備庫上查詢每個備庫的最大歸檔序列號
select thread#,max(sequence#) from v$archived_log where applied='YES' group by thread#;
七、檢查物理standby 上的MRP 進程是否處於運行狀態
八、確保數據庫無job運行,同時禁止rman、exp或者expdp備份
若是有考慮禁止job運行,並kill掉。方法以下:
declare
begin
DBMS_JOB.BROKEN(27,true);
end;
kill會話信息
根據sid查詢出session信息
select SID,SERIAL# from V$Session where SID='9';
alter system kill session '9,43767';
九、設置JOB_QUEUE_PROCESSES =0
十、在rac環境中關閉一個數據庫實例
oracle@snode1:~> srvctl stop instance -d srac -n snode2
oracle@snode1:~> srvctl status instance -d srac -i srac1,srac2
Instance srac1 is running on node snode1
Instance srac2 is not running on node snode2
十一、備庫中止redo應用,而且確保standby數據庫處於掛載狀態
srvctl stop database -d trac -o immediate;
srvctl start database -d trac -o mount;
12、建議給主庫和物理standby庫作個全備份
一、在主庫上執行以下命令查詢主庫狀態是否爲TO STANDBY 或者SESSION ACTIVE
SQL> select switchover_status,open_mode,database_role from v$database;
二、在主庫上執行以下swithover命令。
SQL>alter database commit to switchover to physical standby with session shutdown;
三、在standby節點上運行switchover命令
SQL> select name,open_mode,database_role,protection_mode from gv$database;
NAME OPEN_MODE DATABASE_ROLE PROTECTION_MODE
--------- -------------------- ---------------- --------------------
SRAC MOUNTED PHYSICAL STANDBY MAXIMUM PERFORMANCE
SRAC MOUNTED PHYSICAL STANDBY MAXIMUM PERFORMANCE
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
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
Database altered.
4、在新主庫節點上從新啓動rac到 read write 狀態
srvctl stop database -d torcl -o immediate;
srvctl start database -d torcl -o open;
SQL>select db_unique_name,database_role,open_mode from v$database;
五、在新備庫(原主庫)節點上重啓數據庫並應用redo log
srvctl stop database -d orcl -o immediate;
srvctl start database -d orcl -o open;
alter database recover managed standby database using current logfile disconnect from session;
3、failover步驟
一、failover主要用於主庫因爲服務器層或存儲層產生的問題致使primary database變的不可訪問。
二、對於faileover的考慮
standby數據庫的硬件性能要知足生產環境。
確保全部可用的redo被應用到standby數據庫。
faileover後new primary database處於最大性能保護模式。而無論以前數據庫的保護模式最大保護或者最大性能。
1、若是主庫崩潰後可以啓動主庫到mount狀態,則執行以下命令
alter system flush redo to 'db_unique_name';
注意須要給standby 數據庫的db_unique_name加單引號。
例如,假設備庫的db_unique_name爲dg2 則在主庫執行以下命令
生產環境命令爲在主庫執行以下命令:alter system flush redo to ‘torcl’;
2、檢測主庫和standby數據庫的狀態,在主庫上檢測生成的最大歸檔日誌文件
在主庫檢測生成的最大歸檔日誌文件
Select thread# max(sequence#) from v$archived_log group by thread#;
在備庫檢測已經應用的最大歸檔日誌文件
select max(sequence#) from v$archived_log where applied='YES' group by thread#;
以下圖
select REGISTRAR,sequence#,applied from v$archived_log order by sequence#;
3、在備庫處理未傳遞和應用的歸檔
說明
若是備庫查詢到的已經應用的最大日誌序列號和主庫有差異,則須要從主庫手動拷貝歸檔到備庫,並在備庫上註冊和應用歸檔。
若是無差異,則無需執行這一步驟
ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_7.arc';
Alter database recover managed standby database disconnect from sessions;
若是主庫的歸檔已經傳遞到了備庫,可是沒有應用,則手動應用。
若是主庫徹底不可用,則備庫須要恢復,恢復前須要在備庫上應用全部已經傳遞過來的歸檔
四、在standby庫即備庫上中止redo應用
說明
Force 關鍵字用於當即終止RFS進程傳遞
FINISH 關鍵子用於failover和恢復當前standby redo logfile
SQL> alter database recover managed standby database cancel;
alter database recover managed standby database finish force;
select thread#,sequence#,process,status,client_process from v$managed_standby
在物理standby上執行以下命令使備庫變動主庫。
SQL>alter database commit to switchover to primary with session shutdown;
六、查詢轉換後的數據庫狀態
select db_unique_name,database_role,standby_became_primary_scn from v$database;
7、重啓standby新數據庫到 read write狀態。
srvctl stop database -d torcl -o immediate;
srvctl start database -d torcl -o open;