日常維護:
正確的開關機順序是:
啟動的時候,先備庫的listener,再啟動備庫,再啟動主庫的listener,再啟動主庫。
關閉的時候,先關閉主庫,再關閉備庫。
--為主要資料庫或備用資料庫添加/刪除日誌組
SQL> alter database add standby logfile group 5 '/oracle/oradata/orcl/standbyredo05.log' size 100M;
SQL> alter database drop standby logfile group 5; |
--查詢DataGuard當前處於哪種日誌傳輸方式:
| SQL> select process,client_process,sequence#,status from v$managed_standby; |
PROCESS列顯示進程資訊
CLIENT_PROCESS列顯示對應的主要資料庫中的進程
SEQUENCE#列顯示歸檔redo的序號
STATUS列顯示的進程狀態
--查詢standby庫中所有已被應用的歸檔檔案資訊(不論該歸檔檔案是否還存在)
| SQL> select first_time,first_change#,next_change#,sequence# from v$log_history; |
--最後一個被應用的log
| SQL> SELECT THREAD#, MAX(SEQUENCE#) AS "LAST_APPLIED_LOG" FROM V$LOG_HISTORY GROUP BY THREAD#; |
--在primary server上查詢有哪些日誌沒有被傳輸到Standby
SQL> SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM (SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1) LOCAL WHERE LOCAL.SEQUENCE# NOT IN
(SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND THREAD# = LOCAL.THREAD#); |
--對於troubleshooting有用
| SQL> SELECT MESSAGE FROM V$DATAGUARD_STATUS; |
m.監控恢複操作的進程
| SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#, APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS; |
--從正在恢複狀態唯讀開啟;
SQL> Alter DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL> Alter DATABASE OPEN READ ONLY; |
--切換回到恢複狀態;
| SQL> Alter DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; |
切換角色
注意:Swithover時只能先從Primary切到Standby,再從Standby切到Primary.
1、在主庫端
| select database_role,switchover_status from v$database; |
如果是to standby 表可以正常切換.
直接執行 ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
否則執行: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> select database_role from v$database;
SQL> alter database recover managed standby database disconnect from session; |
2、在備庫端
| select database_role,switchover_status from v$database; |
如果是to_primary 表可以正常切換.
執行:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
否則執行: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
shutdown immediate;
startup; |
然後觀察主備庫日誌,如果正常的話會看到備庫會自動應用日誌.
failover測試
1. 備庫上檢查是否存在歸檔中斷
| SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; |
2. 在主庫上執行語句並找出歸檔檔案
| SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN XX AND XX; |
--如果存在拷貝相應的歸檔到STANDBY資料庫,並註冊.
| SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'xxx'; |
***其他情況(primary資料庫無法開啟):
--檢查歸檔檔案是否完整
分別在primary/standby執行下列語句:
| SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log; |
把相差的歸檔複製到待轉換的standby伺服器
3. 啟動failover
| SQL> alter database recover managed standby database finish force; |
FORCE關鍵字將會停止當前活動的RFS進程,以便立刻執行failover。
或
| SQL> alter database recover managed standby database finish skip standby logfile; |
4. 切換物理standby角色為primary
SQL> alter database commit to switchover to primary;
SQL> shutdown immediate
SQL> startup |