使用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
等等方法都得不到解決.server
最後呢,算是投機取巧吧.完成了清空工做,方法以下:blog
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.因此在數據量不大的時候,我把表直接刪除後,重建(看數據重要程度備份與否),這個問題也能解決.