当mdf或者ndf文件很大时,传统的dbcc shrinkfile命令很难生效,目前可行的解决方案:
- 创建新文件组通过对剩余表重建并指定聚集索引到新文件组方式清空源文件组方式进行存储空间释放
- 参照使用以下脚本写循环等待文件收缩完成:
大数据文件收缩
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'需要收缩的数据文件逻辑名称'
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