Sql-Server
無法刪除未使用的文件組
我想刪除 SQL Server 數據庫中一些未使用的文件組/文件,但因為 SQL Server 認為文件組/文件仍在使用中而被卡住了。
一些背景:
- 我們有一些分區表,我們將它們轉換回非分區表
- 刪除了所有分區函式和方案
- 我在 dm 視圖中查詢了未使用的文件組,如下所示:
SELECT * FROM sys.filegroups fg LEFT OUTER JOIN sysfilegroups sfg ON fg.name = sfg.groupname LEFT OUTER JOIN sysfiles f ON sfg.groupid = f.groupid LEFT OUTER JOIN sys.indexes i ON fg.data_space_id = i.data_space_id WHERE i.object_id IS NULL
這讓我得到了我試圖從數據庫中刪除的文件組/文件的列表。但其中一些無法刪除。錯誤資訊範例:
The filegroup 'FG_XXXX' cannot be removed because it is not empty.
- 我無法通過
sys.data_spaces
和連接到這些文件組的表/索引sys.indexes
:SELECT * FROM sys.data_spaces ds INNER JOIN sys.indexes i ON ds.data_space_id = i.data_space_id WHERE ds.name = 'FG_XXXX'
- 我知道如果在某些分區方案中引用了文件組,則無法刪除它。
但這不可能是這裡的原因,因為我刪除了數據庫中的所有分區方案/函式。
任何提示我可以做些什麼來擺脫文件組?
我實際上找到了一個簡單的解決方案,因為我遇到了同樣的問題。
我試圖刪除文件組
[fg_LMeterDetail_13]
,但收到“無法刪除,因為它不是空的”錯誤。這個文件組唯一的罪過是與分區方案相關聯。該文件組沒有數據。所以在發現沒有對立面之後
NEXT USED
,我進行了實驗,發現您可以發出另一個NEXT USED
但將其指向上一個文件組:ALTER PARTITION SCHEME ps_LMeterDetail NEXT USED [fg_LMeterDetail_12]
之後,我能夠發出
REMOVE FILEGROUP
which 然後自動將其從分區方案中刪除ALTER DATABASE [WACOE] REMOVE FILEGROUP [fg_LMeterDetail_13]
瞧!有效!
歡迎大家。