事物日誌檔案

事務日誌檔案簡介

在 Microsoft® SQL Server™ 2000 中,資料庫必須至少包含一個數據檔案和一個事務日誌檔案。數據和事務日誌信息從不混合在同一檔案中,並且每個檔案只能由一個資料庫使用。
SQL Server 使用各資料庫的事務日誌來恢復事務。事務日誌是資料庫中已發生的所有修改和執行每次修改的事務的一連串記錄。事務日誌記錄每個事務的開始。它記錄了在每個事務期間,對數據的更改及撤消所做更改(以後如有必要)所需的足夠信息。對於一些大的操作(如 CREATE INDEX),事務日誌則記錄該操作發生的事實。隨著資料庫中發生被記錄的操作,日誌會不斷地增長。
事務日誌記錄頁的分配和釋放,以及每個事務的提交或回滾。這允許 SQL Server 採用下列方式套用(前滾)或收回(回滾)每個事務:
在套用事務日誌時,事務將前滾。SQL Server 將每次修改後的映象複製到資料庫中,或者重新運行語句(如 CREATE INDEX)。這些操作將按照其原始發生順序進行套用。此過程結束後,資料庫將處於與事務日誌備份時相同的狀態。
當收回未完成的事務時,事務將回滾。SQL Server 將所有修改前的映象複製到 BEGIN TRANSACTION 後的資料庫。如果遇到表示執行了 CREATE INDEX 的事務日誌記錄,則會執行與該語句邏輯相反的操作。這些前映象和 CREATE INDEX 逆轉將按照與原始順序相反的順序進行套用。 在檢查點處,SQL Server 確保所有已修改的事務日誌記錄和資料庫頁都寫入磁碟。在重新啟動 SQL Server 時所發生的各資料庫的恢復過程中,僅在不知道事務中所有的數據修改是否已經從高速緩衝中實際寫入磁碟時才必須前滾事務。因為檢查點強迫所有修改的頁寫入磁碟,所以檢查點表示啟動恢復必須開始前滾事務的位置。因為檢查點之前的所有修改頁都保證在磁碟上,所以沒有必要前滾檢查點之前已完成的任何事務。

事務日誌備份

事務日誌是自上次備份事務日誌後對資料庫執行的所有事務的一系列記錄。可以使用事務日誌備份將資料庫恢復到特定的即時點(如輸入多餘數據前的那一點)或恢復到故障點。
還原事務日誌備份時,Microsoft® SQL Server™ 前滾事務日誌中記錄的所有更改。當 SQL Server 到達事務日誌的最後時,已重新創建了與開始執行備份操作的那一刻完全相同的資料庫狀態。如果資料庫已經恢復,則 SQL Server 將回滾備份操作開始時尚未完成的所有事務。
一般情況下,事務日誌備份比資料庫備份使用的資源少。因此可以比資料庫備份更經常地創建事務日誌備份。經常備份將減少丟失數據的危險。

將事務日誌備份與資料庫備份一起使用

只有具有自上次資料庫備份或差異資料庫備份後的連續事務日誌備份序列時,使用資料庫備份和事務日誌備份還原資料庫才有效。 如果日誌備份丟失或損壞,必須創建資料庫備份或差異資料庫備份並再次開始備份事務日誌。如果打算將資料庫還原到這些備份內的某個即時點,應保留以前的事務日誌備份。
只有當啟動事務日誌備份序列時,資料庫或差異資料庫備份才必須與事務日誌備份同步。每個事務日誌備份序列都必須由資料庫或差異資料庫備份啟動。
最早的活動事務的起點,即尚未提交或回滾的事務。
這代表在恢復過程中,SQL Server 必須回滾事務的最早點。
最早事務的起點,這些事務包括已發布但尚未複製更改的複製對象。
這代表 SQL Server 仍必須複製的最早點。

備份事務日誌的條件

完整資料庫備份或差異資料庫備份執行期間不能備份事務日誌。不過,在運行檔案備份的同時可以備份事務日誌。
下列情況不要備份事務日誌:
在由於事務日誌包含自上次創建備份後資料庫所發生的更改,而創建了資料庫或檔案備份之前。有關更多信息,請參見使用檔案備份。
事務日誌已被顯式截斷。此時如果要備份事務日誌,必須在事務日誌截斷髮生後先創建資料庫或差異資料庫備份。 還原事務日誌備份
必須滿足以下條件才能套用事務日誌備份:
先還原事務日誌備份之前的資料庫備份或差異資料庫備份。
先套用在備份資料庫或差異資料庫之前創建的所有事務日誌。
如果以前的事務日誌備份丟失或損壞,最多只能將事務日誌還原到丟失的事務日誌之前的最後一次備份。
已經恢復了資料庫,也已經前滾或回滾了所有未完成的事務。
套用事務日誌備份時,必須等套用了最後的事務日誌後才能恢複數據庫。如果允許在套用其中一個中間事務日誌備份時進行恢復,則必須從資料庫備份開始重新開始整個還原操作,才能還原過那一點。
創建事務日誌備份序列
為創建備份集,通常應定期生成資料庫備份(如每天),並以更短的間隔生成事務日誌備份(如每隔 10 分鐘)。必須至少有一個資料庫備份或覆蓋的檔案備份集,才能有效地進行日誌備份。備份之間的間隔因數據的關鍵性和伺服器的工作負荷而異。如果事務日誌損壞,則將丟失自最新的日誌備份後所執行的工作。為此,建議經常對關鍵數據進行日誌備份,並注意將日誌檔案放在容錯存儲上。
事務日誌備份序列獨立於資料庫備份。可以生成一個事務日誌備份序列,然後定期生成用於開始還原操作的資料庫備份。例如,假設有下列事件序列。



上午 8:00 備份資料庫
中午 備份事務日誌
晚上 04:00:00 備份事務日誌
下午 6:00 備份資料庫
晚上 08:00:00 備份事務日誌
晚上 10:00 出現故障

晚上 8:00 創建的事務日誌備份包含從下午 4:00 到晚上 8:00 的事務日誌記錄,中間跨越下午 6:00 創建資料庫備份的時間。事務日誌備份序列從上午 8:00 創建的初始資料庫備份到晚上 8:00 創建的最後一次事務日誌備份是連續的。可以使用下列過程將資料庫還原到晚上 10:00 的狀態(故障點):
使用最後一次創建的資料庫備份還原資料庫。
創建當前活動事務日誌的備份。
還原下午 6:00 的資料庫備份,然後套用晚上 8:00 的資料庫備份和活動事務日誌備份。
還原進程檢測到晚上 8:00 的事務日誌備份包含自上次還原備份後所發生的事務。因此,還原操作向下掃描事務日誌直至下午 6:00 完成資料庫備份時對應的即時點,並且只前滾事務日誌備份內自該點後所完成的事務。對晚上 10:00 的事務日誌備份再執行一次上述操作。
使用以前的資料庫備份(早於最後一次創建的資料庫備份)還原資料庫。
創建當前活動事務日誌的備份。
還原上午 8:00 的資料庫備份,然後按順序還原全部四個事務日誌備份。不要還原下午 6:00 的資料庫備份。所有完成的事務都將前滾到晚上 10:00。
這個進程所用的時間比還原下午 6:00 的資料庫備份要長。
第二種還原資料庫的方法注重由事務日誌備份鏈所提供的冗餘安全性,使用這個事務日誌備份鏈,即使資料庫備丟失份,也可以還原資料庫。可以還原以前的資料庫備份,然後還原創建該資料庫備份後所創建的所有事務日誌備份。

熱門詞條

聯絡我們