2009-09-02 108 views
3

我們有一個運行在MSDE(SQL 2000,service pack 4)下的數據庫,它保留了大量的多餘空間。使用sp_spaceused爲每個表提供2102560 KB的總保留大小,364456 KB的數據大小和1690760 KB的未使用大小(即保留使用空間的近4倍)。最糟糕的罪魁禍首是經常寫入但從未從(事務日誌記錄)中刪除的表。一般而言,刪除在記錄的大小和數量方面非常罕見且非常小。SQL Server上的保留空間過大

在磁盤上的數據庫文件是在2 GB的限制,這是造成與備份等問題

我曾嘗試DBCC SHRINKDATABASE,DBCC SHRINKFILE和DBCC REINDEX與磁盤上使用的文件的大小沒有任何影響

2個問題 - 如何縮小數據庫文件大小,以及如何阻止SQL Server預留多餘的空間?

感謝

保羅

回答

0

你可以做的就是把一個完整的數據庫備份,重新索引數據庫,incrementaly縮小,然後再重新索引它。這樣你就會擁有當前大小的數據庫。

您還應該將日誌記錄表移動到另一個表中。

+0

不幸的是(我不知道爲什麼),備份是不可能的。嘗試備份到磁盤時會超時。 – 2009-09-03 07:57:21

4

USE < DBNAME>
GO
BACKUP LOG < DBNAME> WITH TRUNCATE_ONLY
GO
DBCC SHRINKDATABASE(<數據庫名>)
GO
DBCC SHRINKFILE(<日誌文件>,5)
GO
DBCC SHRINKFILE(< datafile>,5)
GO

,如果你不知道該文件的路徑EXEC sp_helpfile

+0

嘗試了這一點,但它沒有收縮保留空間1個字節 – 2009-09-03 07:56:37

+0

在您的備份日誌和收縮文件之間使用DBCC SHRINKDATABASE('DatabaseName') – Coentje 2009-09-03 09:59:14

+0

這對我來說很合適。謝謝@Russell! 只是一個快速提示:對於DBCC SHRINKFILE命令,我在DBNAME數據庫中使用了SELECT * FROM sys.database_files,並使用了「Name」字段。 – 2011-07-05 07:48:39

0

的罪魁禍首創建單獨的文件並將其放置在單獨的文件組。將表移動到另一個文件本身會壓縮它們。也會使shrinkfile更有效。如果需要,您可以爲每個表創建多個文件。

+0

問題是MSDE有2個演出限制。創建新的文件組是不可能的,因爲限制超過了文件組的總數,而不僅僅是每個文件組。 – 2009-09-03 07:56:01

0

感謝您的所有建議。最後,我必須創建一個新的空數據庫,複製海量數據庫中的數據,然後重命名數據庫。

我會留意保留的大小。希望數據庫設置出了問題,導致了這種情況。我們其他使用相同軟件/ MSDE的客戶都沒有遇到此問題。