1

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

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

4

3 回答 3

3

我最近解决了一个类似的问题,我发现在 sys.databases 中,log_reuse_wait_desc 等于“复制”。显然,这意味着 SQL Server 会等待复制任务完成,然后才能重用日志空间。

然而,复制从未在我们的数据库或我们的服务器上使用过。您应该能够通过运行“sp_removedbreplication”来清除状态;但是对我来说,“sp_removedbreplication”并没有解决问题。相反,SQL 只是返回说数据库不是复制的一部分......

我在这里找到了答案:

基本上我必须创建一个复制,将所有复制指针重置为零;然后删除我刚刚进行的复制。IE

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
于 2011-07-06T04:10:53.997 回答
2

尝试先发出CHECKPOINT命令,然后缩小日志

取自 BOL ( http://msdn.microsoft.com/en-us/library/aa226036(SQL.80).aspx )

强制将当前数据库的所有脏页写入磁盘。脏页是数据或日志页进入缓冲区缓存后被修改,但修改尚未写入磁盘。有关日志截断的更多信息,请参阅截断事务日志。

于 2008-12-09T17:01:49.237 回答
0

表示当前日志文件正在使用并发出检查点,其中检查点将写入未从事务日志文件(脏页)写入数据文件的 datfile。检查是否有任何当前活动正在进行或没有,

检查使用 2005 年的活动交易 SELECT * FROM sys.dm_tran_session_transactions

2000 DBCC 登录

制定好计划=> 1.创建维护计划以备份日志(制定计划)。

于 2009-08-29T05:18:05.290 回答