DBCC SHRINKFILE
始终有效,即使我收到以下消息:
'Cannot shrink log file 2 (Claim_Log) because all logical log files are in use.'
但是,当我从作业运行它时,它只会缩减约三分之一的日志。其他时候,它仍然很大(约150Gb)。除了上面列出的错误之外,从来没有任何错误。这是我使用的声明:
DBCC SHRINKFILE (N'Claim_log' , 0, TRUNCATEONLY)
我在作业步骤中启用了“在历史记录中包含步骤输出”。还有什么我可以做些什么来获得更多关于它为什么不起作用的信息?
编辑: 以下是日志中的完整消息:
'Executed as user: *. Cannot shrink log file 2 (Claim_Log) because all logical
log files are in use. [SQLSTATE 01000] (Message 9008) DBCC execution completed.
If DBCC printed error messages, contact your system administrator. [SQLSTATE 01000]
(Message 2528). The step succeeded.'
我已经尝试将用户从数据库中踢出并将其设置为单用户模式。
答案 0 :(得分:2)
首先尝试发出 CHECKPOINT 命令,然后缩小日志
取自BOL(http://msdn.microsoft.com/en-us/library/aa226036(SQL.80).aspx)
强制将当前数据库的所有脏页写入磁盘。脏页是在输入缓冲区缓存后修改的数据或日志页,但修改尚未写入磁盘。有关日志截断的详细信息,请参阅截断事务日志。
答案 1 :(得分:2)
我最近解决了类似的问题,我发现在sys.databases中,log_reuse_wait_desc等于'replication'。显然,这意味着SQL Server在重用日志空间之前等待复制任务完成的效果。
但是,我们的数据库和服务器上从未使用过复制。您应该能够通过运行'sp_removedbreplication'来清除状态;然而对我来说'sp_removedbreplication'并没有解决问题。而SQL刚刚回来说数据库不是复制的一部分......
我在这里找到了答案:
基本上我必须创建一个复制,将所有复制指针重置为Zero;然后删除我刚刚制作的复制。 即。
Execute SP_ReplicationDbOption {DBName},Publish,true,1
GO
Execute sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1
GO
DBCC ShrinkFile({LogFileName},0)
GO
Execute SP_ReplicationDbOption {DBName},Publish,false,1
GO
答案 2 :(得分:0)
表示当前日志文件正在使用并发出检查点,其中检查点将写入未从事务日志文件(脏页面)写入数据文件的数据文件。 检查是否有当前正在进行的活动,
选中使用活动交易 2005年 选择 * 来自sys.dm_tran_session_transactions
2000 DBCC LOGINFO
做好计划=> 1.创建维护计划用于备份日志(制定计划)。