SQL Server:查看SQL日志文件大小SQL脚本
最近一周,连续出现了两次系统DOWN的事情,都是因为我们公司没有专门的DBA,一天是半夜被电话吵醒,好家伙,数据库的日志满了,系统前台任何提交的操作都不成功,除了查询.
半夜赶回公司处理.
另一个是TempDB爆了,也是出现同样的情况,不过这次是在周未,也很惨,JOBS都死了,下周怎么给用户报表啊!!!!!
没有DBA,那我们小的就只有出了问题再处理,被动太被动了.
我们得想办法让系统自动监视数据库文件大小,及日志文件大小。不应该人工一个一个数据库看大小,每天一个一个数据库的去查看文件大小就太费神了,要是能写个SQL脚本,建立一个JOB定时检查,每天自动去查看各个数据库文件及日志文件的大小,然后再通过数据库邮件,Email 到我们手中,岂不快哉!当然,可以把每天的记录存放到数据库中去,这样数据库及日志文件的增长趋势,我们也就一目了然了。也可以在达到一定的百份比后进行压缩或其它处理.
获取数据库日志文件大小的方法。其实很简单
DBCC 命令:dbcc sqlperf(logspace)
我们执行命令可以得到以下结果:
dbcc sqlperf(logspace)
Database Name Log Size (MB) Log Space Used (%) Status
-------------- ------------------------ ------------------------ -----------
master 2.2421875 32.600174 0
tempdb 0.4921875 39.285713 0
model 0.4921875 41.07143 0
msdb 2.2421875 30.901567 0
pubs 0.7421875 49.934212 0
Northwind 0.9921875 34.940945 0
dbcc sqlperf(logspace) 可以获取实例中每个数据库日志文件大小,及使用情况。
那我们不能每次都这样执行命令来看,应该放到一个表中保存起来.
先创建一个数据表
create table dbo.LogSize
(
dbname nvarchar(50) not null
,logsize decimal(8,2) not null
,logused decimal(5,2) not null
,status int null
)
然后动态执行dbcc sqlperf(logspace)命令:
insert into dbo.LogSize
execute('dbcc sqlperf(logspace) with no_infomsgs')
-----------------------------------------------------
除了查日志,数据库文件的大小也是相同的道理
查看数据库空间大小:sp_helpdb or sp_helpdb(dbname)