当前位置: 电脑软硬件应用网 > 设计学院 > 网络编程 > 数据库 > 正文 |
|
||||||||||||||||||||||
解决sql 2008 事务日志收缩与截断无法减小日志物理文件的方法 | ||||||||||||||||||||||
2010-3-3 9:15:46 文/cnblogs 出处:cnblogs | ||||||||||||||||||||||
前言SQLServer2008中如何收缩日志文件,在邀月工作室的日志已经详细描述(点击查看),这里不再赘述。本文的重点是与大家分享日志截断、收缩后,物理文件的尺寸依然没有减小到期望尺寸的问题。 解决方案我的一个数据库,数据文件10+G ,事务日志达20+G,而且使用常规的截断、收缩方法均无法减小日志物理文件的尺寸,经过一番寻找,终于找到了解决方法。 查看日志信息在查询分析器中执行如下代码来查看日志信息: 1 DBCC LOGINFO('数据库名称') 我们看到status=0的日志,代表已经备份到磁盘的日志文件;而status=2的日志还没有备份。当我们收缩日志文件时,收缩掉的空间其实就是status=0的空间,如果日志物理文件无法减小,这里一定能看到非常多status=2的记录。接下来分析为什么会有这么多status=2的记录 查看日志截断延迟原因活跃(active)的日志无法通过收缩来截断,有各种原因会使日志截断延迟,具体表现就是事务日志的物理文件无法通过截断、收缩来减小,通过下面的代码可以看到实例上每个数据库的日志截断延迟原因: 1 USE [master] 2 SELECT [name] ,[database_id] ,[log_reuse_wait] ,[log_reuse_wait_desc] FROM [sys].[databases] 各种原因及解释如下:
针对延迟日志截断原因的部分解决方案
小技巧一般收缩日志的代码中都要求指定日志的文件名称,下面的代码则可以自动获取日志文件名称: 1 USE [数据库名称] 2 DECLARE @LogFileLogicalName sysname 3 SELECT @LogFileLogicalName=Name FROM sys.database_files WHERE Type=1 4 PRINT @LogFileLogicalName 5 DBCC SHRINKFILE (@LogFileLogicalName, 1); |
||||||||||||||||||||||
关于45IT | About 45IT | 联系方式 | 版权声明 | 网站导航 | |
Copyright © 2003-2011 45IT. All Rights Reserved 浙ICP备09049068号 |