使用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.因此在数据量不大的时候,我把表直接删除后,重建(看数据重要程度备份与否),这个问题也能解决.