如何截断SQL Server 2008数据库中的事务日志?


9

如何截断SQL Server 2008数据库中的事务日志?

可能的最佳方法是什么?

我从一个博客尝试了如下操作:

1)从设置数据库到简单恢复,缩小文件,然后再次设置为完全恢复,实际上您正在丢失宝贵的日志数据,并且将无法还原时间点。不仅如此,您也将无法使用后续的日志文件。

2)缩小数据库文件或数据库会增加碎片。

您可以做很多事情。首先,使用以下命令开始进行正确的日志备份,而不是将其截断并经常丢失。

BACKUP LOG [TestDb] TO  DISK = N'C:\Backup\TestDb.bak'
GO

删除收缩文件的代码。如果您要进行适当的日志备份,则您的日志文件通常(通常,同样会排除特殊情况)不会变得很大。


2
好的,当您尝试这样做时会发生什么?

Answers:


4

如果数据库处于完全恢复模式,则截断日志文件的最安全,正确的方法是执行事务日志备份(不进行备份TRUNCATE_ONLY。在以后的发行版中将不建议使用此方法,建议不要这样做)。

听起来好像您想事后收缩日志文件,在这种情况下,您将运行DBCC SHRINKFILE(yourTLogName)命令。对于请求的大小,有一个可选的第二个参数将其缩小。


8

您可以将日志备份到空设备:

backup log [databasename] to disk = 'nul';

或者,您可以将恢复模型切换为简单模型,然后再次恢复为完整/批量。


我对此做了一个+,因为这是dbas工具箱中的一个工具,您认为我的回答不应该被否定。我同意这样的观点,最好的方法是进行transactionlog备份,但是嘿,所有好的工具都可以正确或错误地使用。
MartinSjöberg2013年

6

如果您不关心日志数据,而只想摆脱它:

将恢复模型从完全更改为简单,然后再恢复为完全。使用带有TRUNCATEONLY参数的DBCC SHRINKFILE缩小文件

以下命令将恢复模式从完全更改为简单

ALTER DATABASE <databse_name> SET RECOVERY SIMPLE

以下命令会将恢复模式更改为完全恢复

ALTER DATABASE <databse_name> SET RECOVERY FULL

要查找日志文件的名称,可以使用以下查询

SELECT name 
FROM sys.master_files
WHERE database_id = DB_ID('<databse_name>')

缩小文件

DBCC SHRINKFILE (N'<logical_file_name_of_the_log>' , 0, TRUNCATEONLY)

请参见截断SQL Server日志文件的命令是什么?有关此的更多信息

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.