解決:Msg 606, Level 21, State 1, Procedure XXXX, Line 17

使用sql server2012英文版數據庫.某表按天創建分區,估計有100個分區.
問題:如今我將表的數據清空,須要刪除數據和分區sql

 

數據庫有一個存儲過程過程XXXX,做用是傳入時間,刪除當天的數據和分區.數據庫

而後我寫了一個循環.搜索引擎

use dbname declare @date  datetime = '20190416'
declare @date2 datetime --= '20190717'
set @date2 = @date + 100

while @date <= @date2  --getdate()-80
begin
    exec [XXXX] @date

    set @date = @date + 1
end

而後刪除到第九個分區,報錯以下:spa

Msg 606, Level 21, State 1, Procedure XXXX, Line 17 Metadata inconsistency. Filegroup id 9 specified for table 'dbo.XXX' does not exist. Run DBCC CHECKDB or CHECKCATALOG.

不少嘗試:code

  1. 重建索引
  2. 收縮數據庫
  3. 修改表後在修改回來
  4. 各類dbcc db ,dbcc table,dbcc Filegroup

等等方法都得不到解決.server

 

最後呢,算是投機取巧吧.完成了清空工做,方法以下:blog

  1. 備份數據庫

         2.運行腳本索引

use dbname declare @date  datetime = '20190416'
declare @date2 datetime --= '20190717'
set @date2 = @date + N while @date <= @date2  --getdate()-80
begin
    exec [XXXX] @date

    set @date = @date + 1
end

注意N的值,修改爲一個相對較小的值.ci

        3.若是2中腳本運行沒有出錯,再備份一次,到第4步;若是出錯,還原最新一個備份,回到2,將N值在改小,再運行一下.get

        4.Dbcc一下數據庫,以下腳本

ALTER DATABASE [XXX] SET SINGLE_USER dbcc checkdb(XXXX,REPAIR_ALLOW_DATA_LOSS) go
alter database [XXXX] set multi_user   --多用戶 --dbcc checkdb(xxxx,REPAIR_REBUILD)
go

   若是dbcc有以下錯誤:

Unable to process index IX_L_XX of tableXXX because filegroup (FileGroup ID 9) is invalid.    說明有錯了.須要歡迎一個最新的.

若是沒有錯,回到第2步,直到分區被刪除完.

 

   PS:

1.備份是關鍵,避免重複操做

2.在時間段上,N的值有時候能夠變大或變小,須要心靈感應,O(∩_∩)O.

 

如下內容用於baidu搜索引擎方便搜索.

CHECKFILEGROUP found 0 allocation errors and 1 consistency errors in table 'xxxx' (object ID 1137439126). Unable to process index IX_ttime of table xxx because filegroup (FileGroup ID 9) is invalid. CHECKFILEGROUP found 0 allocation errors and 1 consistency errors in table 'xxx' (object ID 1137439126).. CHECKFILEGROUP found 0 allocation errors and 1 consistency errors in database ‘dbxxx’. is the minimum repair level for the errors found by DBCC CHECKFILEGROUP (dbxxx).

 

  https://support.microsoft.com/en-us/help/3100361/fix-dbcc-checkdb-doesn-t-report-metadata-inconsistency-of-invalid-file 

 

重要補充:

1.我上面遇到的出錯的表,都是數據交換的表

2.出錯的時候,直接定位到某一張表上的.

3.因此在數據量不大的時候,我把表直接刪除後,重建(看數據重要程度備份與否),這個問題也能解決.

相關文章
相關標籤/搜索