gpt4 book ai didi

sql-server - DBCC SHRINKFILE 截断事务日志

转载 作者:行者123 更新时间:2023-12-01 09:26:06 26 4
gpt4 key购买 nike

我有一些不会截断事务日志的数据库。

这些数据库都处于简单恢复模式,我们可以每天进行一次完整备份。

我检查的第一件事是是否有某种排序或打开的事务或阻止日志被重复使用的东西。

SELECT name, log_reuse_wait_desc
FROM sys.databases
WHERE log_reuse_wait <> 0

这给了我以下结果:

two databases waiting for LOG BACKUP reuse

为了摆脱 LOG_BACKUP,我做了:

USE [master]
GO
ALTER DATABASE mydb SET RECOVERY BULK_LOGGED WITH NO_WAIT

然后回到简单:​​

USE [master]
GO
ALTER DATABASE mydb SET RECOVERY SIMPLE WITH NO_WAIT

这对 LOG_BACKUP 进行了排序,但我仍然遇到磁盘空间不足的问题。

于是我拼命运行以下命令:

DBCC SHRINKFILE (N'wslogdb70_27_log', 0, TRUNCATEONLY)

我希望这会截断事务日志,而不是缩小它。

  • 我说的对吗?
  • 是否有任何文章/书籍引用此内容?

最佳答案

首先,如果数据库处于 SIMPLE 恢复中,则不能将 LOG_BACKUP 作为 log_reuse_wait,因为除非恢复模式为FULLBULK_LOGGED

此外,根据 docs :

The TRUNCATEONLY option does not move information in the log, but does remove inactive VLFs from the end of the log file.

要缩小日志文件,请使用

DBCC SHRINKFILE (wslogdb70_27_log, X)

其中 X 是以 MB 为单位的目标大小。

注意不要过度压缩日志,它需要文件中的一些可用空间才能工作,否则它将再次自动增长。

关于自动增长,请尝试以 MB 为单位指定自动增长因子,而不是百分比。具体多少取决于您未提及的一些因素(例如日志和数据文件的大小)。

实际上,监控您的数据库并进行相应调整是您最好的选择。

关于sql-server - DBCC SHRINKFILE 截断事务日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com