資料庫恢復

2021-10-01 22:26:48 字數 2278 閱讀 4125

3. 中斷的事務

3.2 undo|redo日誌恢復

4. 檢查點技術

查詢和更新資料庫時,由於某些問題( ( 故障) ) 發生可能會導致資料庫被破壞或影響資料庫中資料的一致性。

資料庫恢復技術將資料庫從錯誤狀態恢復到某個一致狀態,它是資料庫可靠性的保證。

事務故障(內部原因)

介質故障(物理原因)

系統故障(其他原因)

存在系統其他位置的冗餘資料進行恢復

日誌資料備份

在資料庫恢復時候,對故障發生時候對已提交的事務進行重做redo,對未提交的事務進行撤銷undo,保證所有事物的原子性。

所以,恢復處理中第乙個任務就是將所有的事物劃分為已提交事務未提交事務

事務具有acid四個性質,其中原子性。

日誌是乙個日誌記錄的序列,每個日誌記錄會記錄事務的操作(開始、更新、提交和中止等),所以日誌的體量很大。

事務開始

事務提交

事務撤銷

事務撤銷

undo日誌中的更新:

redo日誌中的更新:

t:表示事務 ,x:資料元素

3.1.1 undo 日誌的恢復

做完事務t之前沒做完的操作(事務t在commit或abort之前的操作),然後進行事務撤銷

如果事務t 的commit 日誌記錄已到達磁碟,該事務一定已經完成

對每乙個更新操作都生成一條undo 日誌記錄

如果事務改變了資料庫元素x , 那麼日誌記錄必須在x 的新值寫回磁碟之前寫到磁碟 (write ahead logging, wal) ;

如果事務提交,則其commit 日誌記錄必須在事務改變的所有資料庫元素已寫到磁碟後再寫磁碟。

redo操作

反向掃瞄日誌檔案 ,確認未完成的事務集合s ,即,但沒有( 或)

日誌記錄的事務集合

在掃瞄過程中,對每一條日誌記錄做:

(1) 如果ti ∈

\in∈ s ,則 write (x, v) output (x) ;

對每乙個事務ti ∈

\in∈ s ,增加日誌記錄

重新整理日誌,即flush log

flush log

3.1.2 redo 日誌的恢復
只要日誌中沒有記錄,那麼事務t 對資料庫所做的更新就都沒有寫到磁碟上。

redo日誌規則

對每個事務中的更新操組都產生一條redo 日誌記錄( 包含新值,形如)

在修改磁碟上的任何資料庫元素x 之前,要保證所有與x 的這一修改相關的日誌記錄,包括 記錄,都必須先寫到磁碟。

提交時同時重新整理日誌,即flush log 。

在資料庫被重新整理後,增加一條

redo操作

正向掃瞄日誌檔案 ,確認已提交的事務集合s ,即在日誌中有( 但沒有) 日誌記錄的事務集合

在掃瞄過程中,對每一條日誌記錄做:

(1) 如果ti ∈

\in∈ s 則 write(x, v), output(x)

對每個ti ∈

\in∈ s, 增加日誌記錄重新整理日誌,即flush log

每次恢復都檢查整個日誌好浪費時間哦,又不是所有的事務都需要重新處理,事務只要在日誌上有commit的記錄,那就不需要處理它了嘛。

怎麼搞???

週期性的在日誌上做標記(檢查點),檢查點之前的日誌記錄在恢復的時候就不用管了嘛!!!

簡單的檢查點技術在效果上相當於在進行檢查點是必須關閉系統。由於活躍的事務可能需要較長的時間來

提交或中止,在使用者看來系統似乎停止了。

特點:

4.1.1 undo

步驟:

4.1.2 redo

特有問題:redo 日誌中被修改的資料寫到磁碟的時間可能比事務提交的時間晚得多。

定期進行資料備份

資料庫恢復

如果有備份,直接從備份恢復即可。否則,借助第三方工具log explorer log explorer 解壓縮密碼 www.heibai.net 序號產生器產生的是註冊碼,是兩個 用解壓縮密碼解開後,壓縮包裡也有乙個序號產生器的 開啟log explorer file attach log file...

資料庫恢復

若選用prod1為catalog目錄庫 sqlplus sys oracle prod1 as sysdba create user catalog identified by oracle grant connect,recovery catalog owner to catalog alter ...

資料庫恢復

1.正在用的current中redo段日誌被刪除,只能啟動到mount狀態,如何啟庫 首先啟動到mount階段 sql select member from v logfile sql alter database clear unarchived logfile group 1 sql alter...