【问题标题】:How to shrink log file in SQL Server after unknown period of not being backed up?未知时间未备份后如何缩小 SQL Server 中的日志文件?
【发布时间】:2020-02-20 00:39:42
【问题描述】:

我最近接管了一个已经使用了 2-3 年的数据库的管理,并且它没有任何事务日志维护计划。 DB 文件为 8 GB,但事务日志文件高达 54 GB。我开始备份日志文件,我需要回收该驱动器空间。我已经将我的数据库与我公司内构建了适当维护计划的其他站点进行了比较,它们的事务日志大约为 4 GB,这是我所期望的。这是我第一次遇到这个问题。

我执行了数据库的完整备份,并设置了初始事务日志维护计划,但我需要缩小这个 *.ldf 文件,因为它太不成比例了。我搜索了 Stack Overflow 留言板,希望能找到类似的情况。基于该研究,我尝试了 DBCC SHRINKFILE,但这并没有产生我预期的结果。我将数据库恢复到原始(超大日志文件到位)并尝试了完全-简单-完全恢复技术来截断日志,但仍然无法回收空间。我什至尝试删除 .ldf 并完成清除(恢复挂起)状态的过程。我回到DBCC CHECKDB修复功能,但是在清除(Recovery Pending)状态后,我根本无法备份事务日志。我开始收到一个 msg 42000 错误 50000,它也引用了错误 3013。最后,我删除了整个混乱并将其恢复到原来的状态。我已尝试尽可能详细,如有必要,我很乐意澄清或阐述。正如我所说,这是我第一次遇到这样的事情,但我总是从头开始我的项目。这是我第一次跳进别人建造的东西中间,但我拿到它时就坏了。

ALTER DATABASE [DBName] SET EMERGENCY;

GO

ALTER DATABASE [DBName] set single_user

GO

DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;

GO 

ALTER DATABASE [DBName] set multi_user 

GO

我的预期结果是一个未损坏的事务日志,它的大小适合我的数据库。让这成为一个警示故事,提醒人们在接受管理别人的错误之前提出所有问题。

【问题讨论】:

  • 我可能在这里遗漏了一些东西,但是您的问题是什么?
  • 我可能太罗嗦了...我的问题是如何将事务日志缩小到适当的大小而不破坏它?我知道它为什么这么大,我知道它不应该是这样的,这始终是我看到的第一个和第二个问题。另外,感谢您修复我的电路板格式。我以为模板会自动完成。
  • Shrinking a log file to a specified target size。如果这不符合您的预期,您应该告诉我们原因。
  • 如果我知道原因,我就不会请你帮忙了,对吗?
  • 如果你看到的不是你所期望的,但你不知道为什么,它怎么可能是你不期望的..?只有你知道为什么它不是你所期望的。

标签: sql-server transaction-log


【解决方案1】:

如果您使用的是 2008 年或更早的版本,您可以尝试使用“BACKUP LOG WITH TRUNCATE_ONLY”

否则将数据库切换到简单恢复,这将清除日志。 然后运行 ​​DBCC SHRINKFILE 来缩小文件本身的大小。

【讨论】:

  • DBCC SHRINKFILE 不减少日志文件 ldf。对我来说 log_reuse_wait_desc 不返回任何数据。 DBCC SQLPerf(logspace) 返回 99,99% 已用日志空间 DBCC LOGINFO 返回 11059 行,所有状态 = 2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多