日志链和 SQL Server 事务日志 - 健全性检查

Posted

技术标签:

【中文标题】日志链和 SQL Server 事务日志 - 健全性检查【英文标题】:Log Chains and SQL Server Transaction Log - sanity check 【发布时间】:2011-05-07 20:52:01 【问题描述】:

我正在帮助进行临时灾难恢复,我们已经恢复了几周前的数据库备份,然后从事务日志备份中恢复了事务。

我们使用 SQL Server Management Studio 执行此操作 - 右键单击​​数据库,恢复完整备份但处于恢复模式,再次右键单击,恢复事务日志等。

我现在正在尝试验证我们的日志中是否存在空白。是否可以安全地假设如果 SQL Server Management Studio 允许我恢复日志而没有错误,那么日志中就没有间隙(例如,log chain 是完整的)?

换句话说 - 如果有间隙,SQL 会让我恢复日志吗?我认为在这种情况下它会警告我或阻止我。

感谢您提供的任何帮助....

我们使用的是 SQL 2005,但我认为关于日志链的规则在所有版本中都是相似的。

【问题讨论】:

【参考方案1】:

你是对的。如果不能应用,SQL 将不会应用事务日志备份,你会得到一个错误。

【讨论】:

【参考方案2】:

根据来自微软的文件Working with Transaction Log Backups:

如果日志备份丢失或损坏,启动新的日志链,方法是创建完整或差异数据库备份,然后备份事务日志以启动新的日志链。我们建议您保留丢失日志备份之前的事务日志备份,以防您想将数据库还原到这些备份中的某个时间点。有关如何帮助保护您的备份的信息,请参阅备份和还原的安全注意事项。

和Creating Transaction Log Backups 表示:

如果事务日志损坏自最近一次日志备份以来执行的工作将丢失。这突出了将日志文件放在容错存储上的重要性。

我对此的免费阅读是: 考虑到文件丢失是一种文件损坏,如果 Management Studio 或任何其他工具允许您恢复日志而不会出现错误,那么您可以确保日志链是完整的,直到您应用的最后一个事务日志备份。您必须确保它是该数据库可用的最后一个事务日志备份,但这是另一回事。

如果你不相信我的阅读(并且文档在这一点上不太清楚),你可以做一个简单的测试来确定:假设你有 10 个事务日志要应用......故意删除第 7 个(或随机的,但不是第一个也不是最后一个)事务日志,然后尝试您的灾难恢复方法。

如果您收到“缺少事务日志文件备份”之类的错误消息,请放心并相信我。

【讨论】:

以上是关于日志链和 SQL Server 事务日志 - 健全性检查的主要内容,如果未能解决你的问题,请参考以下文章

sql server运行中,是不是能删除主数据库事务日志文件

怎样读sql server 2008 事务日志

sql server 2000中,如何查询事务日志?事务日志有啥作用?

SQL Server事务日志被填满的原因是啥

sql server 2000日志有啥用处

SQL Server:如何增加事务日志的大小?