資料庫 日誌系統原理 恢復系統

2022-05-06 14:39:12 字數 1594 閱讀 6217

ref:

——《database system concepts》

乙個簡單的讀、修改x元素操作的流程如:事務到緩衝中讀取元素x,如果命中,則讀取事務區域性位址空間並返回,如果未命中,則先將相關頁從磁碟讀入緩衝區。事務在它的區域性位址空間中修改元素x,然後寫入緩衝區,再從緩衝區寫入磁碟。當然緩衝區的資料也可能不是立即拷貝入磁碟的,這取決於具體的緩衝區管理策略。

為了便於描述,我們描述了4個操作原語:

日誌記錄

日誌必須放在穩定儲存器上(99.999%不會丟失)

遵循先寫日誌規則。

日誌只允許以附加的方式寫入資料。日誌塊最初在主存中建立,像資料塊一樣也由緩衝區管理,在確當的時刻,日誌塊會從緩衝區寫入到磁碟。

虛擬記憶體換頁的時候,會(由作業系統)輸出塊b1,在b1輸出前,應當先輸出與塊b1相關的日誌記錄到穩定儲存器
方法一:資料庫保留部分主存為緩衝區,對其管理,而不是讓作業系統管理(然而幾乎所有作業系統都完全控制主存區)

方法二:在作業系統的虛擬記憶體中實現緩衝區,會導致輸出兩次,一是在作業系統換頁時,一是在資料庫系統進行

停止接受新的事務

等待所有當前的活動事務提交或終止,並且在日誌檔案中寫commit或abort記錄。

將日誌重新整理到磁碟

寫入日誌記錄,並再次重新整理記錄。

重新開始接受新事務。

當恢復時,掃瞄到日誌時,就不需要繼續掃瞄日誌記錄了。

靜態檢查點的缺點在與,可能需要很長時間等待活躍事務的完成,在使用者系統看來似乎是靜止了。非靜態檢查克服了該缺點,在做檢查點時允許新事務進入。步驟如下:

1) 寫入日誌記錄.其中t1,……,tk為活躍事務。

2) 等待t1,……,tk每乙個事務提交或終止,但允許其它事務開始。

3) 當t1,……,tk都已完成時,寫入日誌記錄並重新整理日誌。

當系統發生故障時,從日誌尾部開始掃瞄日誌。根據掃瞄過程中先遇到記錄還是記錄,有兩種情況。

1) 如果先遇到記錄。所有未完成的事務在記錄後開始,只要掃瞄到就不需要繼續掃瞄了。前的記錄是可以截斷的。

2) 如果先遇到,那麼崩潰發生在檢查點過程中。未完成事務只可能是到達前遇到的那些,以及t1,……,tk在崩潰前未完成的那些。因此只要繼續掃瞄到未完成事務中最早的那個事務的開始就行了。

乙個通常的規律是,一旦記錄到了磁碟,我們就可以將上乙個記錄前的日誌刪除了。

都是先output日誌再output資料庫元素

undo:每write一條日誌,write一次資料項更新,日誌記錄舊值,

redo:write完所有日誌,再延遲更新write資料項,日誌記錄新值

恢復系統資料庫

msdb 包含了有關作業 報警及操作員等資訊如果包含系統資料庫的介質變了,那麼必須重建系統資料庫,如果你仍然可以啟動sql server服務,則可以通過restore語句從系統資料庫的備份中恢復資料庫。關於系統資料庫的恢復總結如下 在sql server資料庫中,系統資訊儲存在系統資料庫中,主要的系...

系統日誌及資料庫日誌

oracle 下的alert日誌 oracle base diag rdbms orcl orcl1 trace alertorcl1.log grid 下的 alert 日誌 oracle home log rac1 alertrac1.log css的日誌 oracle home log rac...

資料庫 基於日誌系統的恢復機制

對於需要持久化資料的軟體或者系統,必須要解決的問題是如何處理意外中斷導致的資料丟失問題。比如乙個交易系統,使用者正在購買商品,突然斷電了,那麼如何恢復使用者的賬戶資訊?該不該扣款?商家的商品到底有沒有賣出?這一些列的問題需要資料庫恢復機制解決。而恢復機制需要借助日誌系統才能展開。日誌記錄了系統中發生...