測試了11g 物理dg情況下主庫異常斷電的測試。
發現主庫在異常斷電后,broker通過從庫登錄后,show configuration;等待很長時間返回:
Configuration Status:
ORA-16662: network timeout when contacting a database
DGM-17017: unable to determine configuration status
switchover to cronfun_pri;
Performing switchover NOW, please wait…
Error: ORA-12543: TNS:destination host unreachable
Error: ORA-16625: cannot reach database “cronfun_stdby2”
Failed.
Unable to switchover, primary database is still “cronfun_stdby2”
看來broker的switchover功能只能是在主庫運行良好的情況下使用,如果想在主庫異常斷電能切換到從庫,需要設置使用
Fast-Start Failover:
如果主庫在遇到異常后,無法啟動,switchover無法使用,並且fast-start failover沒有配置的時候,需要進行手工的failover操作,使用dgmgrl可以進行完全的和馬上的兩種方式的failover
完全的failover在保護模式下會自動最大限度的恢復redo,也會避免禁用備庫,可以使得備庫作為新主庫的備庫。
如果轉移的目標是物理備庫或快照備庫,原來的主庫一定要reinstated或重建來成為新主庫的備庫。如果一些備庫應用的redo比新主庫應用的還要多,那么broker會禁用那些備庫,被broker禁用的備庫必須要reinstated或重建。
如果轉移的目標是邏輯備庫,那么原主庫和所有物理,快照備庫都會被禁用,如果主庫的閃回啟用了,可以進行reinstated,物理備庫和快照備庫必須重建。
如果原主庫可以mount,那么可以使用alter system flush redo語句flush沒有發送的redo到目標備庫,如果這個操作成功了,那么可能沒有數據丟失,即使主庫不是在最大保護模式的級別。
馬上的failvoer是一個快速的failover,一旦啟用了沒有額外的數據被應用就,另一個結果就是別的庫都會被禁用,必須reinstated或重建,所以推薦是進行完整的failover。
failover步驟
1確定failover目標,推薦目標是物理備庫,並且延時最小的,通過broker可以看到
2在broker中執行
DGMGRL> failover to db__name
這種的轉移是完全的轉移,會應用所有接受到的redo,如果執行的是failover to db_name immeidate那么執行的是immediate failover,這種情況下是不會應用接受到的redo的,如果主庫能mount,可以flush redo到從庫注冊下,然后failover這樣損失的數據會很少,甚至是0.
3如果原主庫的flashback功能啟用了,那么可以使用broker的reinstate命令重建。
下面是測試,原主庫是cronfun_stdby2,斷電關機后,進行failover到cronfun_pri,這個dgmgrl是連接到cronfun_pri執行的
DGMGRL> failover to cronfun_pri;
Performing failover NOW, please wait…
Failover succeeded, new primary is “cronfun_pri”
DGMGRL> show configuration;
Configuration - ProdBroker
Protection Mode: MaxPerformance
Databases:
cronfun_pri - Primary database
cronfun_stdby - Physical standby database
cronfun_stdby2 - Physical standby database (disabled)
ORA-16661: the standby database needs to be reinstated
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
可以看到提示原主庫是diabled狀態需要reinstated
要reinstate一個庫,需要做下面的操作:
1restart庫到mount狀態,需要保證flashback啟用
2dgmgrl連接到新主庫
3使用dgmgrl reinstate庫
DGMGRL> REINSTATE DATABASE cronfun_stdby2;
我這個提示下面的錯誤
DGMGRL> REINSTATE DATABASE cronfun_stdby2;
Reinstating database “cronfun_stdby2”, please wait…
Error: ORA-16827: Flashback Database is disabled
Failed.
Reinstatement of database “cronfun_stdby2” failed
但是我的flashback database是打開了的,不去追究了,直接重新創建
重建步驟:
1創建rman,創建備庫控制文件
2傳輸到備庫,啟動到nomount
3rman恢復
重建好后,需要在broker中啟用database
enable database cronfun_stdby2;
我測試用的是11.0.2.0,在上面重建的步驟中,rman恢復后,在開啟數據庫的時候,總是提示備庫需要恢復,一直在等待歸檔日志傳輸過來,卡到那里了,日志中也沒有報錯,重新shutdown再啟動后就好了。能正常打開。