我的一个数据库遇到了事务日志填满的问题。它已设置为完全恢复,并定期通过维护计划进行备份。我每周末进行一次完整的数据库备份,然后在工作日进行每日差异备份,同时每小时进行一次事务日志备份。我检查了日志截断状态,当前状态为 LOG_BACKUP。我可以通过按需备份清除它,但为什么没有通过维护计划清除它?
我错过了什么?
答案1
如果您的数据库有大量事务,您可能需要以高于每小时一次的频率备份事务日志。每 15 分钟备份一次并不罕见。我建议编辑维护作业以更频繁地运行日志备份。
另外,.ldf 是否有足够的磁盘空间?如果阻止物理文件增长,即使截断,它也会耗尽空间。
答案2
有几个因素会影响 SQL Server 的事务日志是否显示为“已满”或需要增长:
- 长时间运行的事务
- 完整或批量日志恢复模式下的日志备份频率
- 事务日志中的虚拟日志文件 (vlfs) 的数量和大小
Jes Schultz Borland 有一个免费视频,其中详细地描述了这一切是如何运作的,听起来它会对你有所帮助:http://www.brentozar.com/archive/2012/09/how-sql-server-works-log-file-video/
当避免数据丢失很重要时,每隔一分钟并不罕见。关键在于在最坏的情况下可以丢失多少数据。
答案3
是的。如果你从不备份,就会发生这种情况。就像如果你从不费心去加油,你的车的油箱就会空了一样。
事务日志应该在完整或增量备份后被删除 - 如果您不进行备份,则将数据库模型设置为简单。
如果您定期进行完整备份,那么显然有人不知道如何进行备份,并忘记将事务日志的删除放入序列中。维护计划对此有一个设置。
也就是说:如果您运行类似复制的操作,如果落后则可能会阻止日志。