批量清理收缩服务器日志语句

USE [master]


------------遍历所有用户数据库 进行日志清理------------------------------------------------------------------- 
DECLARE @SQL AS NVARCHAR(4000) 
DECLARE @DATABaseName AS NVARCHAR(50) 


DECLARE My_Cursor CURSOR --定义游标 
FOR
    (
        SELECT NAME
        FROM   sys.databases
        WHERE  NAME NOT IN ('master', 'msdb', 'tempdb', 'model', 
                           'ReportServerTempDB', 'ReportServer')
    ) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor INTO @DATABaseName; --读取第一行数据 
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQL = '
USE ' + @DATABaseName + 
        '


--查询出数据库对应的日志文件名称
DECLARE @strDBName AS NVARCHAR(500)
DECLARE @strLogName AS NVARCHAR(500)
DECLARE @strSQL AS VARCHAR(1000)

DECLARE @DBLogSise AS INT = 2

SELECT @strLogName = B.name,
  @strDBName = A.name
FROM   MASTER.sys.databases         AS A
  INNER JOIN sys.master_files  AS B
ON  A.database_id = B.database_id
WHERE  A.database_id = DB_ID() 

SET @strSQL = ''
--设置数据库恢复模式为简单
ALTER DATABASE ['' + @strDBName +
''] SET RECOVERY SIMPLE;
--收缩日志文件
DBCC SHRINKFILE ('' + @strLogName + '' , '' + CONVERT(VARCHAR(20), @DBLogSise)
+ '');
--恢复数据库还原模式为完整
ALTER DATABASE ['' + @strDBName + ''] SET RECOVERY FULL ''


EXEC (@strSQL)



'
    
    EXEC (@SQL) 
    PRINT '清理' + @DATABaseName + '日志完成'
    
    FETCH NEXT FROM My_Cursor INTO @DATABaseName; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
 
 
PRINT '-----------清理日志完成---------------------' + CONVERT(VARCHAR(100), GETDATE(), 126)+ '----------'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值