1. switch:用戶主動切換; 2. failover:主庫出現故障,強行切換; switchover:一般switchover切換都是計劃中的切換,特點是切換后,不會丟失任何數據,而且這個過程是可逆的,整個dataguard環境不會被破壞,原來dataguard環境中的所有物理和邏輯standby都
1. switch:用戶主動切換;
2. failover:主庫出現故障,強行切換;
switchover:一般switchover切換都是計劃中的切換,特點是切換后,不會丟失任何數據,而且這個過程是可逆的,整個dataguard環境不會被破壞,原來dataguard環境中的所有物理和邏輯standby都可以繼續工作。
在進行dataguard的物理standby切換前需要注意:
1、確認主庫和從庫間網絡連接通暢;
2、確認沒有活動的會話連接在數據庫中;
3、primary數據庫處于打開的狀態,standby數據庫處于mount狀態;
4、確保standby數據庫處于archivelog模式;
5、如果設置了redo應用延遲,那么將這個設置去掉;
6、確保配置了主庫和從庫的初始化參數,使得切換完成后,dataguard機制可以順利的運行。
switch切換過程:先主庫再備庫
主庫:
由于主庫處于open狀態,有訪問的,所以v$database視圖中,switch_status為session active,而由primary切換到standby需要數據庫為open狀態,因此,執行切換命令時,帶上with session shutdown選項即可。
執行完切換命令后,關閉數據庫,重新啟動數據庫到mount狀態等待日志傳輸,開啟日志應用。
查看alert log可以看到主庫做了哪些動作:主庫斷開所有session(未提交事務會回滾),備份控制文件,切換日志并歸檔,傳輸日志到備庫,給備庫一個End-Of-REDO的信號,切換為standby,重新啟動到mount。
查看switchover狀態:
SQL> select database_role,switchover_status from v$database;
附: A:switchover_status出現session active/not allowed
當出現session active的時候表示還有活動的session
SQL> alter database commit to switchover to physical standby with session shutdown;
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount standby database;
備庫:
確認是否可以切換為主庫,如果switchover_status為recovery needed或switchover latent,需要apply完所有歸檔日志才能切換。如果是sessions active則帶上with session shutdown選項。apply完所有日志后,即可切換為primary,然后打開數據庫。
查看alert.log可以看到備庫做了哪些動作:關閉arch進程,接收主庫日志,接收到主庫End-Of-REDO的信號,apply完所有日志,清空online redo log以便打開數據庫,切換為primary,打開數據庫。
SQL> select database_role,switchover_status from v$database;
SQL> 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> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
—————- ——————–
PHYSICAL STANDBYTO PRIMARY
SQL> alter database commit to switchover to primary with session shutdown;
Database altered.
SQL> shutdown immediate;
SQL> startup;
以上過程,由于主庫斷開所有session并歸檔,傳輸日志到備庫,發給備庫end-ofredo的信號,因此正常swithch時,是不會丟失數據的。
切換完成后可以在主庫歸檔,驗證一下是否切換成功,備庫是否能正常接收日志。
開啟日志應用:(主庫-原備庫)
SQL> alter database recover managed standby database using current logfile disconnect from session;
FailOver:當主庫當掉,無法使用時,此時的切換即為failover,如果保護模式為最大性能模式,是可能丟失數據的。
備庫端:
如果是最大保護和最大可用性模式,則可以直接在備庫端執行failover切換。如果是最大性能模式,為了盡可能減少數據丟失,需要檢查主庫是否有日志沒有傳輸到備庫,手動傳輸備庫進行注冊和恢復。注意RAC環境下,歸檔日志是分線程的。
1. 停止日志應用
alter database recover managed standby database cancel;
2. 關閉standby日志傳輸
alter database recover managed standby database finish force;
3. 切換到primary
alter database commit to switchover to primary with session shutdown;
做這一步的時候,若存在gap,則會報ORA-16139:Switchover: Media recovery required – standby not in limbo 錯誤。
做測試的時候,若先起主庫再起備庫,且未等待備庫相關日志傳輸完畢,就會出現這個問題。此時需要強制切換
alter database activate physical standby database;
4. 重啟數據庫到open狀態
[oracle@testdb dev01]$ scp * oracle@192.168.0.8:/u01/archive/dev01dg
注冊歸檔日志有如下兩種方法,較為簡單當然是用rman了,一次注冊多個。
RMAN>catalog start with ‘/u01/archive/dev01′;
SYS@dev01dg>alter database register logfile ‘/u01/archive/dev01dg/arch_e8fe63_1_712757927_460.dbf’;
apply歸檔日志也有兩種方法。
SYS@dev01dg>alter database recover managed standby database disconnect from session;
Database altered.
SYS@dev01dg>recover standby database;
ORA-00279: change 2863819 generated at 03/20/2010 21:58:17 needed for thread 1
ORA-002: suggestion : /u01/archive/dev01dg/arch_e8fe63_1_712757927_461.dbf
ORA-00280: change 2863819 for thread 1 is in sequence #461
當手動apply完所有的日志后,就可以failover切換到primary了,但是要注意的是,由于備庫沒有收到主庫的end-of-redo的信號,所以直接轉換會報錯,要求介質恢復,此時需要提交命令告訴備庫,日志恢復已經finish,需要進行failover切換,注意switch時千萬不要帶有finish選項,否則就會變成failover了。
SYS@dev01dg> 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
SYS@dev01dg> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
—————- ——————–
PHYSICAL STANDBYNOT ALLOWED
SYS@dev01dg>alter database recover managed standby databasefinish[force];
Database altered.
SYS@dev01dg> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
—————- ——————–
PHYSICAL STANDBYTO PRIMARY
SYS@dev01dg>alter database commit to switchover to primary with session shutdown;
Database altered.
SYS@dev01dg>alter database open;
Database altered.
SYS@dev01dg> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
—————- ——————–
PRIMARY SESSIONS ACTIVE
failover完成后,數據庫其實是以resetlogs方式打開的,如果log_archive_format=’arch_%d_%t_%r_%s.dbf’,可以看到歸檔日志的文件名會有新的resetlogs ID和sequence number,以此與原有的歸檔日志進行區分。
補充11g官方文檔處理順序和操作語句
1、主庫切換
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
shutdown immediate;
startup nomount;
alter database mount standby database;
2、備庫切換
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
ALTER DATABASE OPEN;
3、開啟應用(新備庫–原主庫)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
原文地址:oracle11GR2 dataguard SWITCHOVER FAILOVER, 感謝原作者分享。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com