作为某些维护的一部分,有人触发了一条更新语句,该语句对两个表进行了交叉连接更新,每个表有 200,000 条记录。那是 40 万亿条语句,这将部分解释日志如何增长到 200GB。我也没有限制日志文件,这是我将在服务器范围内处理的另一个问题 - 我们有近 200 个数据库驻留。
我使用的“解决方案”是备份数据库,使用 truncate_only 备份日志,然后再次备份数据库。然后我缩小了日志文件并在日志上设置了一个上限。
看到有其他数据库在使用日志驱动器,我有点急于清理它。我可能已经能够将日志文件备份到我们的备份驱动器,希望不需要其他数据库来增加他们的日志文件。
来自http://technet.microsoft.com/en-us/magazine/2009.02.logging.aspx的 Paul Randal
在任何情况下,您都不应删除事务日志,尝试使用未记录的命令重新构建它,或者只是使用 BACKUP LOG 的 NO_LOG 或 TRUNCATE_ONLY 选项(在 SQL Server 2008 中已删除)截断它。这些选项要么会导致事务不一致(并且很可能会损坏),要么会消除能够正确恢复数据库的可能性。
还有其他我不知道的选择吗?
您可以将数据库置于简单恢复模式(然后使用 CHECKPOINT 命令确保日志尽可能被截断),然后再回到完全恢复模式。然后进行完整的数据库备份,以便系统意识到它是完整的。
然后,您可以在方便时缩小日志。缩小日志并不像缩小数据库那么糟糕,你几乎不应该这样做。
您还没有删除日志,只是截断了它 - 这会取消您恢复到某个时间点的选项。因此,请尽快对数据库进行完整备份。
还要记住,如果您的日志无法增长,您的数据库将停止。因此,让自动增长完全不是一个糟糕的选择......但也许将其设置为在它填满时向您发送警报。