從9i以後,oracle dataguard 備庫一般都不需要手工處理丟失的日志,FAL自動會幫我們處理,下面通過個案例來講下手工處理丟失的日志的方法:
1.在備庫查詢有哪些日志丟失,沒應用到備庫
SQL> select * from V$ARCHIVE_GAP; THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# ---------- ------------- -------------- 1 9873 9876
我們可以看到9873到9876這四個歸檔日志丟失,
2.我們在主庫找到這四個歸檔日志傳送到備庫歸檔目錄下;
3.備庫注冊
alter database register logfile '/oracle/app/oracle/archive/1_9873_629923600.arc'; system alerted alter database register logfile '/oracle/app/oracle/archive/1_9874_629923600.arc'; system alerted alter database register logfile '/oracle/app/oracle/archive/1_9875_629923600.arc'; system alerted alter database register logfile '/oracle/app/oracle/archive/1_9876_629923600.arc'; system alerted
4.檢查數據庫日志看是否應用
Thu Apr 8 15:55:17 2010 Media Recovery Log /oracle/app/oracle/archive/1_9873_629923600.arc Media Recovery Log /oracle/app/oracle/archive/1_9874_629923600.arc Media Recovery Log /oracle/app/oracle/archive/1_9875_629923600.arc Media Recovery Log /oracle/app/oracle/archive/1_9876_629923600.arc
或者查詢視圖
v$archived_log的applied字段
5、檢查備庫是否還有日志GAP
SQL> select * from V$ARCHIVE_GAP;
出現沒有行選擇,則表示不存在歸檔日志丟失問題。
1. 備庫最初是怎樣搭建起來的?直接冷備主庫做為備庫可以嗎?
有一個完整的步驟,但不是直接用冷備就可以做備庫的。
2. 備庫的一些系統參數配置必須跟主庫一致嗎?
一些?太籠統了,參數大部分都一致,除了必須修改的。
2. 備庫是直接讀取主庫的歸檔日志然後進行更新的吧,如果更新的過程中發生意外導致更新失敗,怎樣處理?
也可以是STANDBY日志,也就是redo,不同的STANDBY配置模式可能用REDO也可能用ARCH,
同樣不同的模式下的失敗處理也是不同的,特別情況下可以手工應用日志來保持和主庫的同步。
3. dataguard就是平常所說的雙機熱備吧?
不是,過去常說的雙機熱備其實當前更應該理解為是指RAC。DATAGUARD常用的是做異地容災方案。
dataguard這個是數據庫容災的一種模式,是指在正常運行的生產環境之外異地運行的數據庫設備(有自己獨立的數據庫磁陣),如果生產環境發生數據變動,通過dataguard將變動的數據操作從生產環境實時同步過來,保證了生產環境和容災環境的數據的一致性,如果生產環境數據庫癱瘓了,容災環境就接管過來。
Data Guard可以以只讀的方式打開數據庫,但此時Media Recovery利用日志進行數據同步的過程就停止了,如果物理備用數據庫處於恢復的過程中數據庫就不能打開查詢,也就是說日志應用和只讀打開兩個狀態是互斥的。
Oracle 11g 中推出的Active Data Guard功能解決了這個矛盾,在利用日志恢復數據的同時可以用只讀的方式打開數據庫,用戶可以在備用數據庫上進行查詢、報表等操作,這類似邏輯Data Guard備用數據庫的功能(查詢功能方面),但是,數據同步的效率更高、對硬件的資源要求更低。這樣可以更大程度地發揮物理備用數據庫的硬件資源的效能。