我已经创建了新的数据库和日志文件,并且由于'BACKUP'而得到了日志已满的错误信息。
我查看了这个数据库与SERVER中其他数据库之间的区别,我看到在所有数据库中,log_reuse_wait为0,log_reuse_wait_desc为NOTHING,在我的数据库中,log_reuse_wait为0,log_reuse_wait_desc为LOG_BACKUP。
我想将数据库中的此属性更改为0和NOTHING。 我怎么能这样做?
答案 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
状态的描述