繁体   English   中英

Microsoft SQL Server - 事务日志是完整的是什么意思?

[英]Microsoft SQL Server - What does it mean that a Transaction Log is Full?

事务日志是完整的是什么意思? 我有文件设置在需要时增长20%。 我的驱动器上还剩4GB。 如何永久解决此问题? 运行这些命令可以暂时解决问题:

DBCC SHRINKFILE('MyDatabase_log', 1)
BACKUP LOG MyDatabase WITH TRUNCATE_ONLY
DBCC SHRINKFILE('MyDatabase_log', 1)

事务日志是SQL服务器“记录”它所做的每一次更改的地方,以便在出现问题时(从软件崩溃到电源故障,再到小行星打击......好吧也许不是小行星打击),它可以“恢复”通过“撤消”它所做的所有更改,因为最后一致的“CheckPoint” - 返回到该检查点的数据库的最后“一致”状态。 每次事务完成(或“提交”)时,已存储在事务日志中的所有更改都标记为“ok”,并且允许CheckPopint标记在这些更改之后向前移动,以便将来恢复只会在此之后“撤消”某些方面的更改。 发生这种情况后,不再需要CheckPoint之前的事务日志中的所有条目从系统崩溃中恢复......但是仍然可能需要从硬盘崩溃中恢复,所以...

正如另一位绅士所提到的,您在服务器上设置的“恢复模型”控制了在检查点之前发生的事务日志条目。 在简单模式下,它们会在检查点发生时被删除,但如果主数据磁盘崩溃,则存在风险,因为事务日志不包含自上次备份以来写入磁盘的更改。

在其他恢复模型中,在您执行备份之前不会删除事务日志条目,从而保护您免受此风险...

因此,通常,当出现此问题时,这是因为服务器处于设置的“正常”(非简单)恢复模型之一(增量或完全),并且它们不进行备份.... 在这种情况下,事务日志只是保持增长......,并且正在增长...有点像电视上的那些前列腺广告......

听起来你没有适当的备份策略。 执行任何备份(完整备份,差异备份或事务日志)将截断日志,并带来额外的好处,即保存一个点,以便在发生故障时可以从中恢复。 您可以运行“数据库维护向导”来帮助您设置定期运行的备份计划。

如果你真的根本不关心你的数据(在这种情况下,我想知道为什么你有一个数据库),那么你可以将数据库的恢复模式设置为“简单”,这将阻止TLog的增长。

最后一件事:如果您正在进行批量加载操作,您可能还会考虑在进行批量操作时更改为“Bulk-Logged”。

您应该查看SQL Server恢复模型 简短的回答是将恢复模型更改为“简单”,但这对备份/恢复有影响。

经常备份,每次备份数据库时都会清除事务日志。

您必须备份事务日志而不仅仅是数据库,否则日志将继续增长,直到您的空间不足为止。

另一个简单的答案是您的备份可能没有安排。 在升级周期中,我们从作业中删除了一个数据库备份计划。 日志增长直到我们发现备份未运行。

我不会做20%的增长率。 当需要增长时,这可能会产生重大影响。 如果它增长到100GB,它必须在下一次增长时增长20GB - 准备让你的系统减速而不是发生这种情况......相反,我会将它设置为固定速率 - 比方说100MB 。 当然,我们不知道当前的大小,以提出更准确的建议。

有许多不同的方法可以解决这个问题。 这取决于您的备份要求。

主要问题是您的事务日志没有定期备份,这会导致事务日志不断增长。

SQL Server 2005具有简单恢复模式(数据库本身的属性/选项),我主要在DEV和TEST环境中使用,其中不需要每小时快照,事务日志仅增长到足以处理服务器上运行的最大事务。 此恢复模式不需要任何计划或维护计划。

在SQL Server 2000中,您基本上有一个计划的备份脚本,每小时运行您使用的相同命令:

BACKUP LOG MyDatabase WITH TRUNCATE_ONLY

对于生产环境,通常我们在数据库维护计划中安排每小时的事务日志备份和每日完整备份。 这样可以将事务日志截断为合理的大小(显然,这个大小可以容纳1小时的事务数据)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM