1、清理数据库日志:ldf文件
USE sqqhxxdata--数据库名称
GO
ALTER DATABASE sqqhxxdata SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE sqqhxxdata SET RECOVERY SIMPLE --简单模式
GO
USE sqqhxxdata
GO
DBCC SHRINKFILE (N'QingHua_log' , 11, TRUNCATEONLY)--这个日志文件可能不是我们在盘符里看到的,需要运行下边的语句进行查询
GO
--'这里的DNName_Log 如果不知道在sys.database_files里是什么名字的话,可以用以下注释的语句进行查询
--USE sqqhxxdata
--GO
--SELECT file_id, name FROM sys.database_files;
--GO
USE sqqhxxdata
GO
ALTER DATABASE sqqhxxdata SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE sqqhxxdata SET RECOVERY FULL --还原为完全模式
GO
2、数据收缩
DBCC SHRINKDATABASE(ycslzt);
DBCC SHRINKFILE(1)
3、清理数据量大表的历史数据
1、查询统计每张表的数据行数及所占空间
-- 查询数据库中所有的表名及行数
SELECT a.name, b.rows
FROM sys.sysobjects AS a INNER JOIN
sys.sysindexes AS b ON a.id = b.id
WHERE (b.indid IN (0, 1)) AND (a.type = 'u')
ORDER BY b.rows DESC
-- 查询所有的标明及空间占用量\行数
SELECT OBJECT_NAME(id) AS tablename, 8 * reserved / 1024 AS reserved, RTRIM(8 * dpages) + 'kb' AS used, 8 * (reserved - dpages) / 1024 AS unused,
8 * dpages / 1024 - rows / 1024 * minlen / 1024 AS free
FROM sys.sysindexes
WHERE (indid = 1)
ORDER BY tablename, reserved DESC
2、清理数据大表的历史数据
执行这个操作时遇到一个问题:删除大量数据比如过千万的数据时,会导致数据日志激增,导致一次性删除全部无效数据过程中会报错,无法完成删除。然后就需要分步删除。
3、清理数据后重复1、2步骤。
实战脚本
DELETE FROM zt_task_detail WHERE ID < 10000000;
ALTER DATABASE ycslzt SET RECOVERY SIMPLE WITH NO_WAIT;
ALTER DATABASE ycslzt SET RECOVERY SIMPLE; --简单模式
DBCC SHRINKFILE (N'gslzcf_Log' , 11, TRUNCATEONLY) ;
ALTER DATABASE ycslzt SET RECOVERY FULL WITH NO_WAIT;
ALTER DATABASE ycslzt SET RECOVERY FULL; --还原为完全
DELETE FROM zt_task_detail WHERE ID < 20000000;
ALTER DATABASE ycslzt SET RECOVERY SIMPLE WITH NO_WAIT;
ALTER DATABASE ycslzt SET RECOVERY SIMPLE; --简单模式
DBCC SHRINKFILE (N'gslzcf_Log' , 11, TRUNCATEONLY) ;
ALTER DATABASE ycslzt SET RECOVERY FULL WITH NO_WAIT;
ALTER DATABASE ycslzt SET RECOVERY FULL; --还原为完全
DBCC SHRINKDATABASE(ycslzt);
DBCC SHRINKFILE(1)
网友评论