我们正在使用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
此致 拉吉
答案 0 :(得分:3)
我明白这一点:
SET RECOVERY FULL;
在完全恢复模式下,完整数据库备份不包括事务日志。此外,服务器在任何情况下都不会删除未备份的日志条目。这意味着日志文件将继续增长。
是否有永久性修复自动控制“DB日志文件”大小?
是。要解决此问题,您需要单独执行事务日志备份... and do them often。这将允许日志文件保持合理的大小...可能比你的4GB还要小得多。
小心点。在进行更改后第一次进行备份时,您可能会获得一个相当大的备份文件,可能需要一段时间才能完成并对数据库施加大量负载。但是在第一次运行之后,如果你选择了合理的时间表,事情就会平静下来。
此外,在新计划完成第一个事务日志备份后,您最终可以收缩事务日志文件。在此之前缩小文件是没有意义的......它仍在使用所有空间,即使它不是,它也会再次变大。完成初始缩小后,you really shouldn't do it again。您希望设置维护计划,这样您就不需要手动收缩文件了,这次甚至只需缩小它以在早期错误之后恢复到合理状态。
答案 1 :(得分:2)
SQL Server清除t-log的方法有两种:
使用SIMPLE恢复模式的数据库 - 当检查点发生时,日志将清除
使用FULL或BULK_LOGGED恢复模式的数据库 - 当您发出日志备份时
如果您发出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 Percent
。
您可以将文件增长限制为修复大小,但我不建议您设置此项。一旦达到大小,这可能会阻止应用程序插入。
如果您可以忍受1天的停机/数据丢失,SIMPLE恢复将对您有用。但是,如果您有一个24/7商店并且需要恢复时间点,则需要将数据库设置为完全恢复(清理t-log所需的日志备份)并向您询问有关RPO / RTO要求的业务。 / p>