我有一个SQL2012 DB,该日志文件的增长非常快。我有一个第三方程序来进行完整的数据库备份,因此我对此并不担心。 我有命令在SQL管理器中运行以缩小日志文件,并且该命令正在运行,但这是一项非常手动的任务。
我正在尝试创建一个可以计划每2周运行一次的脚本,但是BAT文件无法正常运行,似乎在运行sqlcmd -S servername\instancename -E
命令之后,它会转到1>并停止。我需要运行USE和DBCC命令,但不确定如何实现这一点。
我尝试过在线查找,但是找不到任何方法可以制作双击脚本来运行此DBCC SHRINKFILE
任务。
因此,使用sqlcmd,我可以这样做:
USE DBNAME
GO
DBCC SHRINKFILE (DBNAME_20070302091322_Log, 1);
GO
手动运行,文件缩小到10mb以下,这是正确的。我只需要自动化此任务即可。
答案 0 :(得分:1)
我有一个SQL2012数据库,该日志文件的增长非常迅速
在这种情况下,您必须验证数据库恢复模型和log_reuse_wait_desc
,您可以使用以下命令对其进行标识:
Select name, recovery_model_desc, log_reuse_wait_desc
from sys.databases
如果恢复模式设置为“完全”:
如评论中所述,您必须在用于完整备份的备份工具上安排LOG BACKUP
,即使您执行DBCC SHRINKFILE
也不会使大小减小,因为日志文件,则必须在运行log_reuse_wait_desc
命令之前基于DBCC SHRINKFILE
状态执行适当的操作。你可以验证一下
一旦执行DBCC
命令,请查看消息部分。
For more details on LOG FILE/CHECKPOINTS/log_reuse_wait
..
如果恢复模式设置为“简单”:
一旦决定采用简单恢复模型,请手动缩小文件,但要留有足够的空间供SQL Engine根据事务工作量执行日志操作。将日志文件缩小到较小的大小意味着,如果没有足够的空间可用于事务工作负载/吞吐量,则SQL引擎会尝试再次增加该文件,从而使服务器上出现不必要的过载。
在简单的恢复模型中,您没有计划LOG backup
,因为将自动添加日志文件检查点,而基于检查点的日志将被截断。
答案 1 :(得分:-1)
因此,在您的帮助下,我设法使其正常运行。 我的DBCC命令带有-i选项的BAT。
这是蝙蝠
sqlcmd -S sqlserver \ instance -E -d数据库名-i c:\ test.sql -o c:\ out.txt
这是test.sql
USE数据库名 走 DBCC SHRINKFILE(DBLOGFILENAME_Log,1); 开始
经过测试及其工作。