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

  • 相关阅读:
    wc 统计程序
    读C#程序
    VS2013 单元测试
    android开发心得之知识的量变到质变
    大学第一篇博客
    团队作业七
    团队作业六
    团队作业五
    团队作业四
    团队作业三
  • 原文地址:https://www.cnblogs.com/birds-zhu/p/11202241.html
Copyright © 2020-2023  润新知