无意间发现系统数据库的templog.ldf 文件很大,500G磁盘空间,templog.ldf 占用了101G,当时首先想到的就是收缩和重建log文件。
日志查看方法一:dbcc sqlperf(logspace)
日志查看方法二:
select db_name(database_id) dbname,
type_desc, --数据还是日志
name, --文件的逻辑名称
physical_name, --文件的物理路径
state_desc, --文件状态
size * 8.0/1024 as '文件大小(MB)'
from sys.master_files
where type_desc='LOG'
因为我的数据库是2008 R2的版本,当时首先想到是用SQL 2005 的处理方式,截断事务日志和卸载装载数据库的方式处理
SQL 2005 的处理
方法一:
一:backup log tempdb with no log (备注:截断日志并不会减少物理日志文件的大小,而是减小逻辑日志文件的大小,并释放磁盘空间以供重新使用)
二:dbcc shrinkdatabase (temp,50%) (备注:以上执行成功后,需要对数据库进行收缩)
方法二:
卸载装载数据库方式:
一:execute sp_detach_db temp (备注:卸载数据库)
二:execute sp_attach_single_file_db temp, 'd:\date\templog.ldf' (备注:装载数据库)
到了2008的版本,以上方法都不适用,网上也找很多说法,有回复说系统数据库不允许收缩,只能alter 存储路径,本来就是在D盘 ,数据库也没有其他盘了,也试着重启server服务器,都不起作用,如果还有其他盘符,可以试用这种方式改变存放路径
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
最后在 http://bbs.csdn.net/topics/390606782 的帖子里看到版主(不想长大啊) 回复的处理方式试了一下,100G的log减小到25G,
使用DBCC shrinkfile(templog,1024),为什么收缩是1024M,templog还是25G,奇怪了,我记得开始的时候也使用过该方法,但不成功,详细还在研究,等待大神再指点。
关于templog更详细的介绍,可参照:https://technet.microsoft.com/zh-cn/library/ms176029.aspx和http://blog.csdn.net/dba_huangzj/article/details/7641534