解决:“由于最小日志空间要求,无法收缩日志文件”

报表库, SQL Server2005 , 恢复模式为“简单日志”, 日志太大D盘爆盘了。

1. 先截断日志:

--注:设定为当前数据库
declare @dbName nvarchar(100)
set @dbName=db_name()
--清空日志  
DUMP TRANSACTION @dbName WITH NO_LOG          
--截断事务日志     
BACKUP LOG @dbName WITH NO_LOG        

2. 再收缩日志:

dbcc shrinkfile(2, 0, TRUNCATEONLY)

无效!一直提示:“ 由于最小日志空间要求,无法收缩日志文件

3. 清除所有进程:

--注:必须设置好当前库,只在当前库上执行!无需改任何参数!  
--1. 杀当前进程之外的所有进程  
DECLARE @sql NVARCHAR(MAX),@currDbName NVARCHAR(100)  
SET @currDbName=DB_NAME()  
SELECT @sql=REPLACE(  
    (SELECT 'kill '+CAST(spid AS NVARCHAR(50))+';' FROM sys.sysprocesses WHERE dbid=DB_ID(@currDbName) AND spid!=@@SPID AND spid>50 FOR XML PATH(''))  
    ,';','  
')  
PRINT @sql  
EXEC (@sql)  


再重复执行1和2就可以了。
当然, 这个只是并不算太重要的库, 可以这么简单粗暴。

如果是比较重要的库, 应该执行以下脚本看下日志不能收缩的原因:

--提供有关所有数据库中的事务日志空间使用情况的统计信息。
dbcc sqlperf(logspace)
--日志信息
DBCC loginfo()  --Status=2则为活动
--日志无法重用的原因
select name, recovery_model_desc,log_reuse_wait,log_reuse_wait_desc from sys.databases d
--最早的活动事务
DBCC OPENTRAN ()  --括号内加上数据库名称,如果选定为当前库可以为空

查看当前正在运行的任务(有时即使是kill, 也需要时间来回滚)大约还需要多久才能完成

SELECT   DB_NAME(er.[database_id]) [DatabaseName]  
,er.[command] AS [CommandType]
,CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent]
,er.start_time
,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m]  
,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m]
,CONVERT(DECIMAL(38, 2), (er.[total_elapsed_time] / 60000.00 * ((100-er.[percent_complete])/er.percent_complete))) AS [EstimatedCompletionTime_m2]
FROM sys.dm_exec_requests AS er  
WHERE 1=1
--and DB_NAME(er.[database_id]) in ('dbName')
and er.[percent_complete] >0
--and er.[command] in ('RESTORE DATABASE' ,'BACKUP DATABASE','BACKUP LOG','RESTORE LOG')
order by er.start_time desc

特别注意:

不要重启SQL Server服务, 重启服务后会导致大事务回滚时的数据库处于“正在恢复”, 这种更麻烦(没办法看到进度), 事务回滚不结束数据库还是用不了。

其它另见:

点击打开链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值