我一直认为sql事务日志跟踪数据库中完成的所有事务,因此它可以帮助恢复数据库文件,以防意外断电或类似的事情.因此,在正常使用中,当数据提交时写入磁盘后,它被清除,因为mdf文件中的所有数据都很好且安全.看到ldf文件增长并阅读一些我理解情况并非如此,它会继续增长,直到:缩小日志.仅在此时清除所有提交的事务并缩小日志文件.我找到了一些应该这样做的sp,但也发现了你首先要备份数据库的理论?最后一步对我没有意义,所以任何人都可以告诉我这是正确的,如果是这样,那为什么呢?
想象一下,您(或某人)delete from very_important_table在您的生产数据库中触发了一个.Sql Server愉快地删除,提交事务,并且如你所说,将"忘记"关于事务.
稍后有人会注意到数据已经消失(毕竟这是你的very_important_table).你会在这种情况下,SQL服务器也庆幸没有忘了交易,所以你可以恢复你的数据库只(无意)删除之前的时间给点意见!至少(如上所述)如果使用"完全恢复"模型.
这是事务日志保留所有这些信息的原因之一.
现在,什么时候扔掉日志是"安全的"?你做了备份后 - 哈哈!Sql Server假定您将备份保存在安全的地方,这意味着它不再需要挂起日志.这就是为什么在缩小事务日志之前必须进行备份的原因.
但我认为缩小交易日志应该是紧急情况的一部分.在正常操作中,您应该"知道"(或猜测)事务日志在一定时间内将获得多大(读取:在日志备份之间的间隔!)并为其分配那么大的空间(加上一些空间可能是一个好处)理念).然后你禁用自动增长(或至少调整它)并设置一个警告,当事务增长"太大"时(如果你给它50%或100%的净空,你可以说你设置的大小的80%).如果出现问题,你有时间做出反应.
记住(正如其他人写的那样):(日志)备份不会"缩小"日志文件,只是"清空"它.您仍会在文件系统上看到相同的文件大小,但它中有可用空间(DBCC SQLPERF(logspace)将显示此信息).
如果你已经启用了自动增长,那么日志就会在你不知道的情况下填满你的磁盘,并且当磁盘已满时 - bam - 你无能为力(在最坏的情况下甚至不备份或收缩日志!).
我想说的是以下内容:这不是一个简单的话题.意识到!
也许这篇微软文章将提供一个起点:如何阻止SQL Server数据库的事务日志意外增长
编辑:这个问题是否更适合serverfault?
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |