Sql-Server

無法刪除未使用的文件組

  • March 9, 2021

我想刪除 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 FILEGROUPwhich 然後自動將其從分區方案中刪除

ALTER DATABASE [WACOE] 
REMOVE FILEGROUP [fg_LMeterDetail_13]

瞧!有效!

歡迎大家。

引用自:https://dba.stackexchange.com/questions/47217