標籤:解決方案 get 資料庫檔案 資料檔案 while 使用 迴圈 sql filename
當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
SQL Server壓縮資料庫檔案