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

使用sql server2012英文版数据库.某表按天建立分区,估计有100个分区.
问题:现在我将表的数据清空,需要删除数据和分区

 

数据库有一个存储过程过程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

然后删除到第九个分区,报错如下:

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.

很多尝试:

  1. 重建索引
  2. 收缩数据库
  3. 修改表后在修改回来
  4. 各种dbcc db ,dbcc table,dbcc Filegroup

等等方法都得不到解决.

 

最后呢,算是投机取巧吧.完成了清空工作,方法如下:

  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的值,修改成一个相对较小的值.

        3.如果2中脚本运行没有出错,再备份一次,到第4步;如果出错,还原最新一个备份,回到2,将N值在改小,再运行一下.

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

posted @ 2019-07-17 17:11 瘦馬 阅读(...) 评论(...) 编辑 收藏