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

Neo*_*Neo 9 sql-server logs

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

什么是可能的最佳方法?

我从博客中尝试了以下方法:

1)从设置数据库到简单恢复,缩小文件,再设置完全恢复,实际上是丢失了宝贵的日志数据,无法及时恢复。不仅如此,您还将无法使用后续日志文件。

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

你可以做很多事情。首先,使用以下命令开始进行适当的日志备份,而不是截断它们并经常丢失它们。

BACKUP LOG [TestDb] TO  DISK = N'C:\Backup\TestDb.bak'
GO
Run Code Online (Sandbox Code Playgroud)

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

小智 8

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

backup log [databasename] to disk = 'nul';
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

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

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

ALTER DATABASE <databse_name> SET RECOVERY SIMPLE
Run Code Online (Sandbox Code Playgroud)

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

ALTER DATABASE <databse_name> SET RECOVERY FULL
Run Code Online (Sandbox Code Playgroud)

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

SELECT name 
FROM sys.master_files
WHERE database_id = DB_ID('<databse_name>')
Run Code Online (Sandbox Code Playgroud)

缩小文件

DBCC SHRINKFILE (N'<logical_file_name_of_the_log>' , 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)

请参阅截断 SQL Server 日志文件的命令是什么?有关这方面的更多信息


Tho*_*ger 4

如果数据库处于完全恢复模式,截断日志文件的最安全、正确的方法是执行事务日志备份(不带TRUNCATE_ONLY. 这将在未来版本中被弃用,并且不建议)。

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