我正在收缩Server 2008 R2数据库的日志文件,但它不起作用。我在使用这个代码:
ALTER DATABASE [database] SET RECOVERY SIMPLE
DBCC SHRINKFILE(DATABASE_LOG, 20)
ALTER DATABASE [database] SET RECOVERY FULL我在堆栈溢出上看到了这篇文章,并按照本文的方式尝试了下面的代码,但这也没有解决我的问题。
BACKUP LOG [database] TO DISK = 'D:\database.bak' GO
ALTER DATABASE [database] SET RECOVERY SIMPLE
use [database] declare @log_File_Name varchar(200)
select @log_File_Name = name from sysfiles where filename like '%LDF'
declare @i int = FILE_IDEX ( @log_File_Name)
dbcc shrinkfile ( @i , 50)
ALTER DATABASE [database] SET RECOVERY FULL请帮帮忙。
发布于 2015-05-13 03:19:36
首先执行一个DBCC LOGINFO();,然后转到最后一行。是状态2吗?这意味着它是活动的,在VLF释放了日志文件的这一部分之前,它不能缩小,所以下一个检查点它可以将它刷新到磁盘(假设它有资源)。
如果它是活动的,您可以执行一个select name, log_reuse_wait_desc from sys.databases来查看使用它的是什么。有时它是镜像,另一个HA解决方案,一个长事务,等等。
然后,您可以执行事务日志备份和checkpoint;,以强制日志文件滚到第一个VLF。实际上,您处于SIMPLE恢复模式,因此不需要备份,这仅适用于FULL和BULK LOGGED。
一旦它被翻滚,并且它不再是一个活动的VLF,你可以删除它。注意,它将删除所有非活动VLFs,直到它到达一个活动的VLFs。到那时,它就会停止。你得再滚一次。
发布于 2014-09-04 03:46:03
运行收缩文件命令时,会收到任何消息或错误吗?
通常,当我无法收缩日志文件时,这是因为数据库太忙了,以至于在日志备份和收缩命令之间启动了一个事务。确保您是数据库中的唯一用户。
https://dba.stackexchange.com/questions/61760
复制相似问题