使用维护计划管理事务日志大小

Nei*_*ght 7 sql-server-2008 sql-server transaction-log maintenance-plans

是否有在 SQL Server 2008 中配置维护计划的最佳实践?目前,我正在删除超过 40 小时的数据库备份和事务日志,然后进行备份。我看到的问题是事务日志仍然非常大。我应该包括收缩数据库计划任务吗?

Aar*_*and 5

如果您的日志文件越来越大,那么您至少做错了以下一件事情:

  • 如果您需要时间点恢复,那么您备份日志的频率不够高(可能还有数据库)。也许您已经创建了每天或每周备份数据库的维护计划,但尚未配置备份日志的维护计划。
  • 如果您不需要时间点恢复,那么您处于完全恢复模式,但不应该如此。您应该能够将数据库的恢复模型切换为简单。这意味着您只能恢复到上次完整或差异备份的时间,但这也意味着您的日志文件将自行保持检查状态。
  • 在任一恢复模式中,问题可能在于您有一个运行时间非常长的事务。就像,有人打电话给BEGIN TRANSACTION,锁定了他们的工作站,然后去度假了。

在这个问题中可以看到更多关于这个的细节:

为了暂时缩小日志,如果您处于完全恢复模式并希望保持这种状态,则应执行以下步骤并重新启动日志链以确保安全:

USE [master];
GO
ALTER DATABASE db_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- if you are already in simple, remove this line:
ALTER DATABASE db_name SET RECOVERY SIMPLE;
GO
CHECKPOINT;
GO
-- if you're already in simple, or want to stay that way, remove this line:
ALTER DATABASE db_name SET RECOVERY FULL;
GO
BACKUP DATABASE db_name TO DISK = 'path' WITH INIT, COMPRESSION;
GO
USE db_name;
GO
DBCC SHRINKFILE(N'db_name_log', 30); -- pick some size that makes sense
GO
USE [master];
GO
-- if recovery is full, re-init log chain, otherwise remove this line:
BACKUP LOG db_name TO DISK = 'path' WITH INIT, COMPRESSION;
GO
ALTER DATABASE db_name SET MULTI_USER;
GO
Run Code Online (Sandbox Code Playgroud)

如果您已经在简单(极不可能)或者如果您想切换到简单,我评论了应该删除的行。