为什么DBCC SHRINKFILE在数据库作业中工作不一致?

时间:2008-12-09 16:27:40

标签: sql-server sql-server-2005 sql-agent-job log-files

当我在日志文件上手动运行时,

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.'

我已经尝试将用户从数据库中踢出并将其设置为单用户模式。

3 个答案:

答案 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.创建维护计划用于备份日志(制定计划)。