如何更改log_reuse_wait和log_reuse_wait_desc

时间:2012-11-22 19:42:08

标签: sql-server sql-server-2012 database-backups recovery database-administration

我已经创建了新的数据库和日志文件,并且由于'BACKUP'而得到了日志已满的错误信息。

我查看了这个数据库与SERVER中其他数据库之间的区别,我看到在所有数据库中,log_reuse_wait为0,log_reuse_wait_desc为NOTHING,在我的数据库中,log_reuse_wait为0,log_reuse_wait_desc为LOG_BACKUP。

我想将数据库中的此属性更改为0和NOTHING。 我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

这是一个只读状态变量。它告诉你为什么此时不能截断日志。

您必须删除该条件的原因,而不是仅仅更改该值(甚至不可能)。

备份数据库日志或切换到SIMPLE恢复模式。你可能应该阅读一下,只是为了理解其含义。

答案 1 :(得分:2)

David W.的剧本对我来说并不适用。 (SQL Server 2008 r2)

我需要稍微修改一下。我按原样使用脚本,得到的消息是数据库[master]没有这样的文件。按照David W.建议更改DATABASE,然后切换到目标数据库并运行DBCC SHRINKFILE()命令。

DBCC SHRINKFILE()的第一个参数也必须是数据库日志文件的逻辑名称,该文件在以下脚本中表示为logical_file_name_for_LOG

USE [master] 
GO  
ALTER DATABASE <db name> SET RECOVERY full  
GO
ALTER DATABASE <db name> SET RECOVERY SIMPLE WITH NO_WAIT;
GO
USE [db name]
GO
DBCC SHRINKFILE('<logical_file_name_for_LOG>', 0, TRUNCATEONLY)

答案 2 :(得分:1)

我找到了解决方案。 即使数据库处于SIMPLE模式也等待BACKUP_LOG,因此您需要将恢复模式更改为FULL,然后使用SIMPLE <更改回no wait / p>

USE [master] 
GO  
ALTER DATABASE <db name> SET RECOVERY full  
GO
ALTER DATABASE <db name> SET RECOVERY SIMPLE WITH NO_WAIT;
GO
USE [db name]
GO
DBCC SHRINKFILE('<log file name>', 0, TRUNCATEONLY)

答案 3 :(得分:0)

我知道这很老,但是答案是错误的。
如果该数据库具有恢复模式FULL并且是预期的,则不要将其更改为simple

log_reuse_wait_desc表示可以重用或收缩日志之前的状态。在这种情况下,它是LOG_BACKUP,这意味着要收缩事务日志,您需要首先备份事务日志并收缩它或备份日志,然后让SQLServer重用日志空间。

可以here找到log_reuse_wait_desc状态的描述