我是一个偶然的 DBA,作为一名开发人员,从一个对数据库管理知之甚少的人那里继承了几个数据库服务器(2005 年和 2008 年),而且似乎对了解更多关于该主题的兴趣更小。
我边走边学,目前正在尝试找出事务日志文件。
我们所有的数据库都设置了简单的恢复模型和自动收缩。我知道使用自动收缩通常是一个可怕的想法,但我的理解是这样做是为了阻止事务日志失控。(自动收缩实际上是收缩日志文件还是仅仅收缩数据库?)
我在 SQL Server 2012 中发现了这一点,并且想知道关于 2005 年和/或 2008 年是否属实,以及它的确切含义:“当数据库使用简单恢复模型时,数据库引擎会在检查点之后截断事务日志。[. ..] 当虚拟日志已满 70% 时,数据库引擎会在简单恢复模式下触发自动检查点。” 虚拟日志大小在哪里指定?
我想在所有数据库上禁用自动收缩,但在我这样做之前,我需要知道日志文件不会很快失控。
任何帮助将不胜感激。
单个事务日志文件既有物理大小(您在磁盘上看到的),也有在物理文件中分解为称为虚拟日志文件 (VLF) 的逻辑部分。
自动增长和自动收缩都对物理事务日志文件进行操作。
事务日志截断(也称为“日志清除”)对事务日志 (VLF) 的逻辑部分进行操作,不会影响物理文件大小。这部分经常是混淆的主题。
日志文件必须始终增长以容纳大型事务;关闭自动收缩将使日志文件保留其最大所需大小,而不是物理减小其大小。
如果您没有大笔交易,禁用自动收缩是安全的;
FULL
如果数据库在或BULK_LOGGED
您没有进行事务日志备份,那么日志文件将不会无限制地增长。此行为与 SQL Server 2005+ 相同。
正如您在问题中提到的,在检查点之后的 SQL 2005 和 2008 中,事务日志文件也将被截断。
我的建议是将恢复模式设置为完整并创建一个作业以从事务日志文件中进行备份。可以在您的数据库上安排此作业,并在备份后截断事务日志。它会自动为您截断日志文件。请查看以下链接:
SQL Server 2005: http ://technet.microsoft.com/en-us/library/ms189085(v=sql.90).aspx
SQL Server 2008: http ://technet.microsoft.com/en-us/library/ms189085(v=sql.100).aspx
因此,这是我在阅读此处的其他回复并自己进行一些研究后发现的:
问:“自动收缩实际上是收缩日志文件还是仅仅收缩数据库?” 答:据我了解:是的,确实如此。Autoshrink 在数据库级别设置,并影响所有文件(如果您右键单击数据库 -> 属性 -> 文件,或者运行查询 1,则会看到)。但是,自动增长适用于每个文件级别。
问:“虚拟日志大小在哪里指定?” 答:请参阅 Jon Seigel 的回复和 Remus 发布的链接。要查看物理和逻辑日志大小,请使用查询 2
一个问题是,如果数据库已激活完全恢复模式,增长到较大的大小,然后将恢复模式更改为简单,则不会触发检查点,因为 VLF 已自动增长。可以尝试通过运行查询 3 来解决此问题(请参阅 Remus 对日志文件头/尾的潜在问题的回复),这会将日志文件减小到最初创建时的大小。
查询:
1)
2)
3)