SQL Server備份事務日誌結尾(Tail)

事務日誌結尾常常提交數據庫未備份的事務日誌內容。基本上,每一次你執行事務日誌備份時,你都在執行事務日誌結尾的備份。數據庫

那爲何會這麼設計呢?由於也許因爲介質的損壞,當數據庫已經再也不可用時,麻煩就來了。若是下一個邏輯步驟正好就是要備份當前事務日誌的話,能夠應用這個備份來使數據庫處於等待(Standby)狀態。你甚至能夠在數據庫文件不可用的狀態下使用NO_TRUNCATE來備份事務日誌,例如:ide

BACKUP LOG AdventureWorks TO DISK = 'G:/Backups/AdventureWorks_log_tail.bak' WITH NO_TRUNCATE設計

而後,你可使用備份日誌的結果把處於等待狀態的數據「帶回」到發生錯誤以前的狀態。日誌

注意:這也是另外一個讓你把事務日誌文件同數據文件放在不一樣磁盤上的緣由。若是它們在同一個磁盤上的話,磁盤損壞了,你就不能從磁盤上再取到事務日誌的備份了。orm

另外一個問題是,當你的數據使用批量日誌恢復模型時,當前的事務日誌只包括最小化的日誌事務。在這種狀況下,一個事務日誌備份須要存儲數據頁的修改。若是你的數據文件不可用了,你也就不能備份事務了,甚至是帶NO_TRUNCATE選項也不行。事務

最後,若是你使用的是SQL Server 2005或以上版本,每次你要恢復的數據庫都是已經存在的數據庫,並且是完整或是批量日誌恢復模型,並且事務日誌包括活動事務的話,那會收到和下面相似的錯誤信息:it

Server: Msg 3159, Level 16, State 1, Line 1
The tail of the log for the database "AdventureWorks" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.
Server: Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.class

上面的信息就是SQL Server在告訴你,事務日誌中有些日誌記錄尚未被備份。假如當前事務日誌能夠被丟棄的話,你可使用REPLACE選項來讓SQL Server忽略當前的事務日誌。以下:數據

RESTORE DATABASE AdventureWorks FROM DISK = 'G:/Backups/AdventureWorks_full.bak' WITH REPLACEdb

相關文章
相關標籤/搜索