-- 多数据文件(推荐方案,推荐每文件4GB/8GB/16GB每个固定大小)
- -- 清空数据文件
- -- 收缩和清空文件都是可以中途停止,且会保留当前处理进度,下次继续到时候不会重新开始
- DBCC SHRINKFILE (DF_DEMO_2011_04, EMPTYFILE);
- -- 删除清空后的数据文件
- USE master;
- GO
- ALTER DATABASE AdventureWorks2008R2
- REMOVE FILE LogicFileName;
- GO
- -- 查看对应要收缩的文件组文件使用率
- -- 加入逻辑文件名后也可以查看单个文件数据使用率
- SELECT
- T.NAME
- , T.FILENAME
- , FILEPROPERTY(T.NAME,'SPACEUSED') * 8.0 /1024 / 1024 AS [USED_GB]
- , T.SIZE * 8.0 /1024 / 1024 AS [TOTIL_GB]
- , 'DBCC SHRINKFILE (' + T.NAME + ', EMPTYFILE);
- GO
- ALTER DATABASE NOASODS_HW REMOVE FILE ' + T.NAME + ';
- GO' AS [SQL]
- FROM
- SYS.SYSFILES T
- WHERE
- FILEGROUP_NAME(T.GROUPID) = 'FileGroupName'
- -- AND T.NAME = 'LogicFileName'
- ORDER BY T.NAME DESC
-- 一个大数据文件(真心的表示抵制,这就是一个噩梦的开始... ...)
- -- 收缩数据文件
- DBCC SHRINKFILE (LogicFileName, DatabaseId);
- -- 大数据文件收缩
- DECLARE @BeginSize BIGINT --原始大小MB
- DECLARE @EndSize BIGINT --最终大小MB
- DECLARE @ShrinkSize BIGINT --需要收缩的大小MB
- DECLARE @UnitSize INT --每次收缩的大小MB
- DECLARE @Loop INT --循环次数
- DECLARE @FileName VARCHAR(256) --收缩的文件逻辑名称
- SET @UnitSize = 512
- SET @BeginSize = 239493
- SET @EndSize = 164413
- SET @ShrinkSize = @BeginSize - @EndSize
- SET @FileName = N'HW_DB_Dat1'
- SET @Loop = 1
- WHILE @ShrinkSize > @Loop * @UnitSize
- BEGIN
- SET @EndSize = @BeginSize - @Loop * @UnitSize
- PRINT 'DBCC SHRINKFILE (' + CAST(@FileName AS VARCHAR) + ',' + CAST(@EndSize AS VARCHAR) + ') BEGING DATETIME:' + CAST(GETDATE() AS VARCHAR)
- DBCC SHRINKFILE (@FileName, @EndSize)
- PRINT 'DBCC SHRINKFILE (' + CAST(@FileName AS VARCHAR) + ',' + CAST(@EndSize AS VARCHAR) + ') END DATETIME:' +CAST(GETDATE() AS VARCHAR)
- SET @Loop = @Loop + 1
- END
转载于:https://blog.51cto.com/greece760/783177