请选择需要收缩的账套后再执行脚本!!!
请选择需要收缩的账套后再执行脚本!!!
请选择需要收缩的账套后再执行脚本!!!
-- 定义数据库名称参数,只需修改这里
DECLARE @DBName NVARCHAR(100) = DB_NAME();
DECLARE @SQL NVARCHAR(MAX); -- 用于拼接动态SQL语句
DECLARE @LogName NVARCHAR(200); -- 存储日志文件名称
--- 1. 查询数据库log名称
SELECT
name AS LogFileName,
physical_name AS LogFilePath
FROM sys.master_files
WHERE database_id = DB_ID(@DBName) AND type_desc = 'LOG';
--- 2. 设置为简单恢复模式(动态SQL执行)
SET @SQL = N'ALTER DATABASE ' + QUOTENAME(@DBName) + N' SET RECOVERY SIMPLE WITH NO_WAIT;';
EXEC sp_executesql @SQL;
SET @SQL = N'ALTER DATABASE ' + QUOTENAME(@DBName) + N' SET RECOVERY SIMPLE;';
EXEC sp_executesql @SQL;
--- 3. 清理日志文件
SELECT @LogName = name
FROM sys.master_files
WHERE database_id = DB_ID(@DBName) AND type_desc = 'LOG';
-- 拼接收缩日志的动态SQL(指定压缩后大小为1M)
SET @SQL = N'DBCC SHRINKFILE (''' + @LogName + N''', 1, TRUNCATEONLY);';
EXEC sp_executesql @SQL;
--- 4. 还原为完整恢复模式(动态SQL执行)
SET @SQL = N'ALTER DATABASE ' + QUOTENAME(@DBName) + N' SET RECOVERY FULL WITH NO_WAIT;';
EXEC sp_executesql @SQL;
SET @SQL = N'ALTER DATABASE ' + QUOTENAME(@DBName) + N' SET RECOVERY FULL;';
EXEC sp_executesql @SQL;
PRINT '数据库 [' + @DBName + '] 日志收缩完成!';
评论已关闭