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

相关文章
相关标签/搜索