前几天我进入并检查了我的交易日志,它像15GB一样疯狂。我运行了以下代码:
USE mydb
GO
BACKUP LOG mydb WITH TRUNCATE_ONLY
GO
DBCC SHRINKFILE(mydb_log,8)
GO
哪个工作正常,缩小到8MB ...但是有问题的数据库是一个Log Shipping Publisher,日志已经恢复到大约500MB并且增长很快。
除了创建自定义“执行T-SQL语句任务”维护计划任务以及将其挂钩到我的日志备份任务之外,有没有办法自动化这个日志缩小?如果这是最好的方式那么好......但我只是认为SQL Server会有更好的方法来解决这个问题。我认为它应该在您进行日志备份时自动缩小,但这种情况不会发生(可能是因为我的日志传送,我不知道)。
这是我目前的备用计划:
或者也许我在运行完整备份任务后每周运行一次?你们都在想什么?
答案 0 :(得分:18)
如果您的文件每晚以500 MB的速度增长,则只有一个正确的操作:将文件预生成500MB并保留。缩小日志文件是有害的。让日志文件自动增长也具有破坏性。
你不必接受我的话,你可以在一些MVP博客上阅读他们对日志和文件缩减的做法的定期说明:
还有更多,我只是厌倦了链接它们。
每次收缩日志文件时,仙女都会失去翅膀。
答案 1 :(得分:5)
答案 2 :(得分:1)
我认为你在问题中建议的是正确的方法。也就是说,“将日志缩小到”夜间备份/维护任务流程。主要的是您经常进行事务日志备份,这将允许在执行收缩任务时缩小数据库。要记住的关键是这是一个两步过程:1)备份您的事务日志,自动“截断”您的日志文件; 2)对日志文件运行缩减。 “truncate”不一定(或曾经?)意味着文件会缩小...缩小它是一个必须单独执行的步骤。
答案 3 :(得分:0)
for SQL Server 2005
DBCC SHRINKFILE(Database_log_file_name,NOTRUNCATE)
此声明不会破坏日志传送。但是,您可能需要运行多个。对于每次运行,日志传送备份,复制和恢复运行后再次运行此语句。
收缩和截断是不同的。
我的经历:
AA db,6.8GB交易日志
首次运行:6.8 GB
日志传送备份,复制,第二次运行后恢复:1.9 GB
日志传送备份,复制,第三次运行后恢复:1.7 GB
日志传送备份,复制,第四次运行后恢复:1 GB
BB db,50GB交易日志
首次运行:39 GB
日志传送备份,复制,第二次运行后恢复:1 GB
答案 4 :(得分:0)
创建事务日志备份并不意味着将减少联机事务日志文件的大小。文件大小保持不变。备份事务时,在联机事务日志中标记为覆盖。它不会被自动删除,也不会释放空格,因此,大小保持不变。
设置LDF文件大小后,通过设置正确的事务日志备份频率来维护其大小。
Paul Randal在此提供详细信息:
答案 5 :(得分:0)
基于Microsoft建议在打算收缩日志文件之前,您应首先尝试执行以下功能:
使用ALTER DATABASE语句为FILEGROWTH选项设置非零增长增量来启用自动增长。
ALTER DATABASE EmployeeDB MODIFY FILE(NAME = SharePoint_Config_log,SIZE = 2MB,MAXSIZE = 200MB,FILEGROWTH = 10MB);
此外,您应该了解通过维护计划进行的收缩操作将对* .mdf文件和* .ldf文件产生影响。因此,您需要使用SQL作业任务创建维护计划,并编写以下命令,只能将* .ldf文件缩小到适当的目标大小。
use sharepoint_config
go
alter database sharepoint_config set recovery simple
go
dbcc shrinkfile('SharePoint_Config_log',100)
go
alter database sharepoint_config set recovery FUll
go
注意:100被称为文件的target_size,以兆字节为单位,表示为整数。如果未指定,DBCC SHRINKFILE会将大小减小为默认文件大小。默认大小是创建文件时指定的大小。
以我的拙见,不建议定期进行收缩操作!只有在某些情况下才需要减小物理尺寸。
您还可以查看Shrink a transaction log file Maintenance Plan in SQL Server
这个有用的指南