如何控制SQL Server数据库日志文件的大小?

时间:2017-12-21 15:53:43

标签: sql-server log-files

我们正在使用MSSQL Server,我们的应用程序每天都有大量的数据交换;约。每天20K行新数据,数据库“日志文件大小”也在不断增加。我们在处理后删除数据以控制数据库大小,但“数据库日志文件”继续增加。

我们正在手动执行以下脚本以缩小“DB Log file”大小。此外,只有数据库所有者才能执行此过程。

是否可以永久修复自动控制 “数据库日志文件”的大小?比方说,我们希望它最多分配4GB。它应该自动清除旧的日志

USE db1;
GO

ALTER DATABASE db1
SET RECOVERY SIMPLE;
GO
--first parameter is log file name and second is size in MB
DBCC SHRINKFILE (db1_log, 999);

ALTER DATABASE db1
SET RECOVERY FULL;
GO

此致 拉吉

2 个答案:

答案 0 :(得分:3)

我明白这一点:

SET RECOVERY FULL;

在完全恢复模式下,完整数据库备份不包括事务日志。此外,服务器在任何情况下都不会删除未备份的日志条目。这意味着日志文件将继续增长。

  

是否有永久性修复自动控制“DB日志文件”大小?

是。要解决此问题,您需要单独执行事务日志备份... and do them often。这将允许日志文件保持合理的大小...可能比你的4GB还要小得多。

小心点。在进行更改后第一次进行备份时,您可能会获得一个相当大的备份文件,可能需要一段时间才能完成并对数据库施加大量负载。但是在第一次运行之后,如果你选择了合理的时间表,事情就会平静下来。

此外,在新计划完成第一个事务日志备份后,您最终可以收缩事务日志文件。在此之前缩小文件是没有意义的......它仍在使用所有空间,即使它不是,它也会再次变大。完成初始缩小后,you really shouldn't do it again。您希望设置维护计划,这样您就不需要手动收缩文件了,这次甚至只需缩小它以在早期错误之后恢复到合理状态。

答案 1 :(得分:2)

SQL Server清除t-log的方法有两种:

  1. 使用SIMPLE恢复模式的数据库 - 当检查点发生时,日志将清除

  2. 使用FULL或BULK_LOGGED恢复模式的数据库 - 当您发出日志备份时

  3. 如果您发出SHRINKFILE,t-log将缩减的唯一时间。

    您可以将日志文件预先调整为4GB并自动增长到4GB示例。

    USE [master]
    GO
    ALTER DATABASE [DB] MODIFY FILE ( NAME = N'DB_log', SIZE = 4096000KB , FILEGROWTH = 4096000KB )
    GO
    

    您的文件增长应设置为In Megabytes而不是In Percententer image description here

    您可以将文件增长限制为修复大小,但我不建议您设置此项。一旦达到大小,这可能会阻止应用程序插入。

    如果您可以忍受1天的停机/数据丢失,SIMPLE恢复将对您有用。但是,如果您有一个24/7商店并且需要恢复时间点,则需要将数据库设置为完全恢复(清理t-log所需的日志备份)并向您询问有关RPO / RTO要求的业务。 / p>