Oracle RMAN與EXPDP備份一致性問題

2021-10-25 04:54:20 字數 2530 閱讀 6374

rman物理備份一致性的問題:

在rman進行備份時,由於rman需要知道備份開始時最新的檢查點資訊和檔案資訊,所以 rman在形成備份集前會對備份的資料檔案做乙個完全檢查點。開始備份後,rman 需要這些資訊在備份操作期間保持一致,也就是說rman需要乙個讀取一致的控制檔案檢視。除非rman 在備份持續時間內鎖定控制檔案,否則資料庫會不斷更新控制檔案,所以不可能。 但是,鎖定控制檔案意味著資料庫不能執行檢查點操作和切換日誌,或則不能產生新的歸檔日誌,這些操作是不可能的。

所以就有了快照控制檔案(snapshot controlfile),快照控制檔案是控制檔案的副本。 rman 只在備份期間使用快照控制檔案,根據快照控制檔案資訊進行備份。 這些操作開始時,rman 會根據實際控制檔案來重新整理快照控制檔案,這樣可以短暫的鎖住控制檔案,隨後,rman 會切換到快照並在備份持續使用這個快照。 這種方式具有讀取一致性,且不妨礙資料庫活動。

由於在備份過程中rman並不鎖定資料檔案的使用,因為rman備份是塊級別的,它只備份控制檔案中已經存在的資料塊,同時資料庫還在執行之中,那麼就有可能會出現某些事務已經提交的操作,但是dbwr還沒有寫入資料檔案,或者已經被rman備份過的資料塊,又重新被修改,等等。

這些資訊rman備份都不會記錄,也是rman無法記錄的。但是記錄這些資訊的是redo file,所以在rman完畢建議馬上執行日誌切換,然後備份歸檔日誌,因為在rman恢復過程中,對於inconsistent backup,rman要靠這些已經歸檔的redo file資訊恢復和保持資料庫的一直狀態。

在備份完成形成備份集以後,每個備份集都有相應的scn號,備份集的相應scn號就是在開始備份時候,rman對形成備份集的檔案進行的一次完全檢查點後的scn號。

簡要概述:

rman開始備份時,首先會對備份的資料檔案做乙個檢查點,然後快照控制檔案,此時控制檔案中記錄備份開始時最新的檢查點資訊和檔案資訊,然後根據控制檔案快照,鎖死開始備份那一時刻的資訊,然後進行備份,後續的變化通過redo和歸檔。

expdp邏輯備份一致性的問題:

如果使用consistent=n,預設值。

以單錶為單位,對於每個表匯出的資料一定是執行匯出時刻事務已經提交的資料,對於未提交的事務,需要讀取undo獲取前映像資料。

如果使用consistent=y,非預設值。

那麼一致性的範圍就會是所有的表,export會先執行set transaction read only命令,匯出的資料,是所有的表在執行匯出那一時刻scn的資料,依據scn進行匯出,如果資料塊的scn大於匯出時刻的scn,那麼就需要讀取undo塊,來獲取前映像資料,如果獲取不到,那麼就會出現ora-01555錯誤。

普通表:

例如:expdp匯出兩個表 t1 t2,另乙個會話開啟更新兩個表

1.執行匯出t1 t2兩張表

2.開始匯出t1表

3.更新t1 更新t2

4.事務提交

5.結束t1的匯出

6.開始匯出t2表

如果匯出時使用consistent=y,則任何更新都不會寫入匯出檔案。

如果匯出時使用consistent=n,則t1表的更新不會寫入匯出檔案,t2表的更新將被寫入匯出檔案,因為在開始匯出t2時,更新t1 t2的事務已經成功提交。

如果使用consistent =y 並且更新量很大,則回滾段應該很大。此外,每個表的匯出將變慢,因為必須掃瞄回滾段以查詢事務的前映像。

主外鍵表:

那麼如果兩個表存在主外來鍵關聯關係時,consistent=y的作用就顯現出來了。

例如主鍵表t1,外來鍵表t2

expdp匯出主外來鍵兩張表t1 t2,另乙個會話開啟更新兩個表

1.執行匯出t1主鍵表 t2外來鍵表

2.開始匯出t1主鍵表

3.更新t1 t2主外來鍵關聯列

4.事務提交

5.結束t1主鍵表的匯出

6.開始匯出t2外來鍵表

如果匯出時使用consistent=y,則任何更新都不會寫入匯出檔案。

如果匯出時使用consistent=n,則t1主鍵表的更新不會寫入匯出檔案,t2外來鍵表的更新將被寫入匯出檔案,

那麼當執行匯入的時候,就會出現主外來鍵關聯錯誤,

因為匯出檔案中的t2外來鍵表的主外來鍵關聯列中包含的資料,在t1主鍵表中並不存在,這不符合主外來鍵關聯關係。

分割槽表:

如果表為分割槽表,那麼以每個分割槽為單位作為單個事務。

例如分割槽表t1存在兩個分割槽 t1:p1 t1:p2

1.執行匯出t1:p1 ,t1:p2兩個分割槽

2.開始匯出t1:p1分割槽

3.更新t1:p1分割槽 t1:p2分割槽

4.事務提交

5.結束t1:p1分割槽的匯出

6.開始匯出t1:p2分割槽

如果匯出時使用consistent=y,則任何更新都不會寫入匯出檔案。

如果匯出時使用consistent=n,則t1:p1分割槽的更新不會寫入匯出檔案,t1:p2的更新將被寫入匯出檔案,

事務僅部分記錄在匯出檔案中,從而出現不一致。

Oracle Rman 備份指令碼

oracle dbservera crontab l 0 0 u01 rmanbak rmanbak.sh u01 rmanbak rmanbak.log 2 1 oracle dbservera cat u01 rmanbak rmanbak.sh bin bash bash profile ec...

Oracle RMAN簡單備份

oracle資料庫rman備份 準備工作 查詢資料庫是否為歸檔模式 sql select name,log mode from v database 1.sql alter system set log archive dest 1 location oracle oracle10g log arc...

oracle rman語法解析

size large b 1.b size 是執行由rman命令組成的乙個檔案,oracle dbs cmd cmd1.rman,如果不提供絕對路徑,那麼rman就是當作是本目錄下的乙個檔案,cmd1.rman,不要在路徑加雙引號 如檔案backup.rman內容為 backup tablespac...