1

我已经创建了新的数据库并且日志文件在过去很长,并且由于“备份”而导致日志已满的错误消息。

我查看了该数据库与 SERVER 中其他数据库之间的差异,我发现在所有数据库中 log_reuse_wait 为 0,log_reuse_wait_desc 为 NOTHING,而在我的数据库中,log_reuse_wait 为 0,log_reuse_wait_desc 为 LOG_BACKUP。

我想将我的数据库中的这个属性更改为 0 而不是什么。我怎样才能做到这一点?

4

4 回答 4

5

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

您必须消除导致该情况的原因,而不仅仅是更改值(这甚至是不可能的)。

备份数据库日志或切换到SIMPLE恢复模式。您可能应该对两者都进行一些阅读以了解其含义。

于 2012-11-22T20:06:48.620 回答
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)
于 2013-11-14T17:05:43.017 回答
1

我找到了解决方案。即使数据库处于SIMPLE等待模式BACKUP_LOG,所以您需要将恢复模式更改为FULL然后再返回到SIMPLEwithno wait

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)
于 2012-11-25T15:33:29.953 回答
0

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

log_reuse_wait_desc表示在日志可以重用或收缩之前的状态。在这种情况下是LOG_BACKUP,也就是说,要收缩事务日志,需要先备份事务日志并收缩它,或者备份日志,让 SQLServer 重用日志空间。

log_reuse_wait_desc可以在此处找到状态描述

于 2019-05-28T12:35:34.893 回答