日期:2014-05-17  浏览次数:20482 次

收缩日志文件代码---改为存储过程
本帖最后由 u010412956 于 2013-04-26 13:59:52 编辑
我用下面的一段sql,是可以成功收缩2008版本的日志文件大小,假如需要收缩日志文件的数据库名为bb。。
一、查出日志文件名字
SELECT file_id, name FROM sys.database_files;
查出的日志文件名为bb_log

二、在简单模式下进行
USE [master]
GO
ALTER DATABASE bb SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE bb SET RECOVERY SIMPLE 
GO
USE bb
GO
DBCC SHRINKFILE (N'bb_log' , 11, TRUNCATEONLY) 
GO

三、调回到完全模式
USE [master]
GO
ALTER DATABASE bb SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE bb SET RECOVERY FULL 
GO

现在我想将这段代码改为存储过程,传入2个参数dbname 和logfile,比如传入上面的bb和bb_log,然后达到收缩日志文件的效果。。。
不知道这个过程应该怎么写?
sqlserver 存储过程

------解决方案--------------------
动态可能也不行,因为你要use 又要go,又不能再同一行。非要这样做吗?维护计划不是有这个选项?
------解决方案--------------------
从数据库管理角度,他们这个需求就表明没有管理好数据库,日志本来就不应该频繁收缩,而且如果哪个手痒去执行,说不定整个系统会非常缓慢,再者你这个是无论大小完全收缩到最小,万一ldf到了几十G,一下子收缩,十几个小时都完成不了,这个应该让管理员去做。
------解决方案--------------------
你这是闹那样,直接搞成simple 不得了
------解决方案--------------------
引用:
Quote: 引用:

你这是闹那样,直接搞成simple 不得了


对恢复没要求,只要日志文件不要太大就行。
google了一下,把恢复模式 设为简单 ,只会记录一点点的日志,不知道是不是这样?


没要求就设为simple吧
------解决方案--------------------
收缩的时候用simple吧,完成了以后再用full