在还原后的应用程序中,我对新创build的数据库执行了很多(> 100,000,000)更新。 因此,LOG文件显着增长。
我怎样才能阻止它成长?
注:将恢复模式设置为简单不会工作。
此外,这个问题最初是张贴在这里: https : //stackoverflow.com/questions/4400057/how-to-stop-log-file-from-growing-in-sql-server-2008
您是否可以将恢复模式更改为简单,足够长的时间来执行收缩,然后设置恢复模式?
就像是:
alter database <mydb> set recovery simple go checkpoint go alter database <mydb> set recovery full go backup database pubs to disk = 'c:\mydb.bak' with init go dbcc shrinkfile (N'mydb_log' , 1) go
我承认我借用了http://sql-server-performance.com/Community/forums/p/28345/151682.aspx
该链接还链接到: http : //madhuottapalam.blogspot.com/2008/05/faq-how-to-truncate-and-shrink.html
你需要:
正如我在stackoverflow上build议的:
你需要:
您将需要更频繁地执行日志备份。 也许每5分钟更新一次。
晚上的差异备份应该能够帮助您不依赖以前采取的压倒性数量的日志备份,以及如果您对具有时间点恢复function不感兴趣。
有一点想到的是,你可以利用批量更新,以插入/更新这100Mlogging。 有关批量更新的最小日志logging的讨论 ,请参阅MSDN上的此信息。
控制日志logging的唯一方法是执行常规的sql备份。 如果您无法使用简单的恢复模式,那么您的备份策略应该包括执行事务日志备份以设置它们的检查点。 一旦设置了检查点,sql server就可以开始恢复磁盘空间了。
simlpe答案是 – 你不。 简单的恢复模式是一样的。 整个数据写入场景需要低级日志文件(当您提交更新时,不会写入数据库)。
你不能阻止SQL 使用日志文件,这只是SQL的工作原理。 但是,您可以通过确保SQL频繁重新使用该文件来保持较小的文件。 两种方法来做到这一点:
切换到简单模式是最简单的。 如果你不能这样做,那就非常频繁地(每10-15分钟?)事务日志备份。
在这两种情况下,你都需要确保你没有在一个巨大的批量中进行所有的更新( UPDATE GIANTTABLE ... with no WHERE clause )。 您可能需要使用UPDATE TOP , WHILE或游标来更新有限数量的行(比如100,000)。