过完年头天上班,高高兴兴打开公司网站,很好,一切正常。
上服务器查看已下 IIS,很好,没有错误,随手修改了下部分配置,结果完蛋了,IIS 的配置文件丢失了,仔细一看,好么。。。。数据库的错误日志文件已经将C盘占满了
好不容易从其他地方挤了点空间出来,把 IIS 恢复了,现在,该想办法把 MSSQL ERRORLOG 想办法整理一下了
从网上查了很多资料后,整理方法如下:
1、使用 EXEC sp_cycle_errorlog 指令清除日志记录 转载来源http://blog.sina.com.cn/s/blog_6fc583e701012quk.html
2、修改 ERRORLOG 的存放位置 转载来源http://blog.csdn.net/fengye245/article/details/8790735 打开 Sql Server 配置管理器 --> Sql Server 服务 --> Sql Server (MSSQLSERVER) --> 属性 --> 高级
修改“转储目录”,将文件夹修改为新的路径
修改“启动参数”,将-e后的文件夹修改为新的路径
然后从新启动 Sql Server (MSSQLSERVER) ,再次执行方法一得指令,发现 ERRORLOG 文件就在新的文件夹内产生了
3、清理数据库日志文件
相对来说,数据库文件也需要占用很大的空间,虽然增长没有那么快,但也需要注意。并且,每个数据库自己单独的日志文件,增长并不是很慢,也需要定期清理。
declare @dbs varchar(max),@sql nvarchar(max),@db varchar(max),@log varchar(max)
declare cur cursor local for select '[' + name + ']' from sysdatabases where dbid>4
open cur
fetch next from cur into @db
while @@FETCH_STATUS=0
begin
print(@db)
set @sql = 'select @log = name from ' + @db + '.dbo.sysfiles where groupid=0'
exec sp_executesql @sql,N'@log varchar(max) output',@log output
set @sql = 'use master' + char(13) + 'alter database ' + @db + ' set recovery simple with no_wait' + char(13)
set @sql = @sql + 'alter database ' + @db + ' set recovery simple' + char(13)
set @sql = @sql + 'use ' + @db + char(13) + 'dbcc shrinkfile (N''' + @log + ''',11,truncateonly)' + char(13)
set @sql = @sql + 'use master' + char(13) + 'alter database ' + @db + ' set recovery full with no_wait' + char(13)
set @sql = @sql + 'alter database ' + @db + ' set recovery full'
exec sp_executesql @sql
fetch next from cur into @db
end
close cur
deallocate cur
嗯,因为数据库名称不见得就是数据库文件名,所以,还是要从 sysfiles 里读取文件名更准确一些
在有定时备份机制的情况下,可以将这个清理数据库日志文件的内容,也放到计划任务里,这样就不用再是不是去关注服务器空间是否被预料外的情况占满了。