none
Falha no DBCC CHECKDB RRS feed

  • Pergunta

  • Boa tarde Pessoal,
    Estou com uma falha no dbcc checkdb:
    Check Database Integrity (servidor)
    Check Database integrity on Local server connection
    Databases: base
    Include indexes
    Task start: 2011-08-21T02:28:01.
    Task end: 2011-08-21T02:45:00.
    Failed:(-1073548784) Executing the query "DBCC CHECKDB WITH NO_INFOMSGS
    " failed with the following error: "Page (1:119101) in database ID 8 is allocated in the SGAM (1:3) and PFS (1:113232), but was not allocated in any IAM. PFS flags 'MIXED_EXT ALLOCATED   0_PCT_FULL'.
    CHECKDB found 1 allocation errors and 0 consistency errors not associated with any single object.
    CHECKDB found 1 allocation errors and 0 consistency errors in database 'base'.
    repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB (base).". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
    Não tenho ideia de como rastrear o erro. Poderiam me ajudar?
    Clayton Dias
    terça-feira, 23 de agosto de 2011 18:51

Respostas

  • Obrigado pela referência!

    Então, possuo o backup full recente, no entanto o recovery model desta base esta como simple.

    Restaurei o backup mais recente em outro servidor, apenas para não analisar o erro em produção.

    Ou seja, não tenho um backup que não apresente este problema (tenho um de semanas atras).

     

    Seguindo a informação abaixo:

    http://msdn.microsoft.com/pt-br/library/Aa226415

     

    Se não tenho um backup, sugerem que eu execute o comando sugerido, que neste caso foi o DBCC CHECKDB ('CARGOSOL_TST', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS.

    Isto que é complicado, pois o REPAIR_ALLOW_DATA_LOSS conforme já diz, pode ter perda de dados.

    Executei no ambiente de testes, e foi reparado, com este resultado:

    Repair: The page (1:119101) has been deallocated from object ID 0, index ID -1, partition ID 0, alloc unit ID 368896342097920 (type Unknown).

    Msg 8906, Level 16, State 1, Line 1

    Page (1:119101) in database ID 26 is allocated in the SGAM (1:3) and PFS (1:113232), but was not allocated in any IAM. PFS flags 'MIXED_EXT ALLOCATED   0_PCT_FULL'.

            The error has been repaired.

    CHECKDB found 1 allocation errors and 0 consistency errors not associated with any single object.

    CHECKDB fixed 1 allocation errors and 0 consistency errors not associated with any single object.

    CHECKDB found 1 allocation errors and 0 consistency errors in database 'CARGOSOL_TST'.

    CHECKDB fixed 1 allocation errors and 0 consistency errors in database 'CARGOSOL_TST'.

    Como posso saber se tive perda de dados?

     

    Clayton

     


    • Marcado como Resposta Clayton Dias sexta-feira, 20 de janeiro de 2012 19:26
    quarta-feira, 24 de agosto de 2011 18:11

Todas as Respostas

  • Clayton

    o Paul Randal tem um artigo sobre este assunto...

    http://www.sqlskills.com/BLOGS/PAUL/post/TechEd-demo-corruptions-fatal-to-DBCC-CHECKDB.aspx


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    terça-feira, 23 de agosto de 2011 20:03
    Moderador
  • Bom Dia,

    Acho que o primeiro passo é ver do que se trata essa página (1:119101). Se for uma página de índice nonclustered você está com muita sorte, pois, basta reconstruir o índice. Se for uma página de dados, então podemos ter problemas. Se for uma página de dados de uma tabela sem índice clustered então temos grandes chances de problemas ainda maiores. Ainda assim, para tudo podemos tentar dar um jeito. Começemos lendo a página

    DBCC TRACEON (3604)
    GO
    DBCC PAGE(IddoBanco,1,119101,1)
    GO

    Você poderia postar o cabeçalho dela ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 24 de agosto de 2011 14:11
  • Boa tarde Gustavo,

    Ai esta o Header pagina:

    PAGE HEADER:

     

     

    Page @0x5FABE000

     

    m_pageId = (1:119101)                m_headerVersion = 1                  m_type = 1

    m_typeFlagBits = 0x0                 m_level = 0                          m_flagBits = 0x8008

    m_objId (AllocUnitId.idObj) = 1333944174                                  m_indexId (AllocUnitId.idInd) = 0

    Metadata: AllocUnitId = 87421365387264                                    Metadata: PartitionId = 0

    Metadata: IndexId = -1               Metadata: ObjectId = 0               m_prevPage = (0:0)

    m_nextPage = (0:0)                   pminlen = 182                        m_slotCnt = 4

    m_freeCnt = 8088                     m_freeData = 1608                    m_reservedCnt = 567

    m_lsn = (124:13829:4)                m_xactReserved = 567                 m_xdesId = (0:1863713)

    m_ghostRecCnt = 0                    m_tornBits = 0                       

     

    Allocation Status

     

    GAM (1:2) = ALLOCATED                SGAM (1:3) = NOT ALLOCATED           

    PFS (1:113232) = 0x60 MIXED_EXT ALLOCATED   0_PCT_FULL                    DIFF (1:6) = NOT CHANGED

    ML (1:7) = NOT MIN_LOGGED            

     

    DATA:

     

     

    OFFSET TABLE:

     

    Row - Offset                         

    3 (0x3) - 0 (0x0)                    

    2 (0x2) - 0 (0x0)                    

    1 (0x1) - 0 (0x0)                    

    0 (0x0) - 0 (0x0)                    

    quarta-feira, 24 de agosto de 2011 16:35
  • Boa Tarde,

    Pelo HEADER trata-se de uma página de dados :(
    Ainda assim nem tudo está perdido, o que eu sugiro é o seguinte:

    - Crie uma tabela zerada e faça um INSERT com SELECT usando a opção NOLOCK
    - Rode o comando DBCC PAGE(IddoBanco,1,119101,3) para ler os registros da página
    - Recupere esses registros e faça o INSERT manualmente na outra tabela
    - Drope a tabela antiga e renomeie a nova
    - Fala um novo CHECKDB para ter certeza de que não existem mais inconsistências

    Caso essa estratégia não seja satisfatório há outras muito boas também, mas vão envolver backups.
    Como a página tem somente 4 linhas ler a página é uma possibilidade rápida. Ainda tem mais duas na manga também.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 24 de agosto de 2011 17:11
  • Gustavo,

    Não conheço nada a respeito do resultado deste comando, neste caso, ai vão as dúvidas :)

    Como viu que se trata de uma página de dados?

    Outra dúvida, é: qual a tabela que devo copiar? (m_objId (AllocUnitId.idObj) = 1333944174 ) a deste objeto?

     

     

    Muito obrigado

     

    Clayton Dias

    quarta-feira, 24 de agosto de 2011 17:37
  • Oi Clayton,

    Há boas referências no link que o Marcelo postou. Adicionalmente eu sugiro dar uma olhada no link abaixo:

    Don't try this at home kids... (data recovery using DBCC PAGE)
    http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/08/09/693625.aspx

    Entretanto acho que me equivoquei. Olhando melhor não é uma página de dados, pois, o ObjectID está zerado e partitionID também. Ainda temos um IndexID igual a -1. Acho que se trata de outro tipo de página. Pelo ID ser zero pode ser uma página de sistema (sysobjects da vida). Vamos então ao plano B, você possui um backup full recente, seu recovery model é full e você faz backup de log ?

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 24 de agosto de 2011 17:53
  • Obrigado pela referência!

    Então, possuo o backup full recente, no entanto o recovery model desta base esta como simple.

    Restaurei o backup mais recente em outro servidor, apenas para não analisar o erro em produção.

    Ou seja, não tenho um backup que não apresente este problema (tenho um de semanas atras).

     

    Seguindo a informação abaixo:

    http://msdn.microsoft.com/pt-br/library/Aa226415

     

    Se não tenho um backup, sugerem que eu execute o comando sugerido, que neste caso foi o DBCC CHECKDB ('CARGOSOL_TST', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS.

    Isto que é complicado, pois o REPAIR_ALLOW_DATA_LOSS conforme já diz, pode ter perda de dados.

    Executei no ambiente de testes, e foi reparado, com este resultado:

    Repair: The page (1:119101) has been deallocated from object ID 0, index ID -1, partition ID 0, alloc unit ID 368896342097920 (type Unknown).

    Msg 8906, Level 16, State 1, Line 1

    Page (1:119101) in database ID 26 is allocated in the SGAM (1:3) and PFS (1:113232), but was not allocated in any IAM. PFS flags 'MIXED_EXT ALLOCATED   0_PCT_FULL'.

            The error has been repaired.

    CHECKDB found 1 allocation errors and 0 consistency errors not associated with any single object.

    CHECKDB fixed 1 allocation errors and 0 consistency errors not associated with any single object.

    CHECKDB found 1 allocation errors and 0 consistency errors in database 'CARGOSOL_TST'.

    CHECKDB fixed 1 allocation errors and 0 consistency errors in database 'CARGOSOL_TST'.

    Como posso saber se tive perda de dados?

     

    Clayton

     


    • Marcado como Resposta Clayton Dias sexta-feira, 20 de janeiro de 2012 19:26
    quarta-feira, 24 de agosto de 2011 18:11
  • Oi Clayton,

    Isso é ruim, pois, se fosse o Recovery Model Full, poderíamos restaurar apenas a página (mesmo fazendo um backup full e logs) e aí teríamos certeza da consistência. O REPAIR_ALLOW_DATA_LOSS é a última alternativa, pois, ele pode perder dados para arrumar a bagunça. Tente ler a página de novo. Se ela não for localizada você pode ter perdido (grandes chances pela mensagem de erro).

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 24 de agosto de 2011 21:04
  • Então, verifiquei a pagina novamente e o resultado foi o seguinte:
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    PAGE: (1:119101)
    BUFFER:
    BUF @0x041B7920
    bpage = 0x3B990000                   bhash = 0x00000000                   bpageno = (1:119101)
    bdbid = 26                           breferences = 1                      bUse1 = 32332
    bstat = 0x3c00009                    blog = 0xa2152159                    bnext = 0x00000000
    PAGE HEADER:
    Page @0x3B990000
    m_pageId = (1:119101)                m_headerVersion = 1                  m_type = 1
    m_typeFlagBits = 0x0                 m_level = 0                          m_flagBits = 0x8008
    m_objId (AllocUnitId.idObj) = 1333944174                                  m_indexId (AllocUnitId.idInd) = 0
    Metadata: AllocUnitId = 87421365387264                                    Metadata: PartitionId = 0
    Metadata: IndexId = -1               Metadata: ObjectId = 0               m_prevPage = (0:0)
    m_nextPage = (0:0)                   pminlen = 182                        m_slotCnt = 4
    m_freeCnt = 8088                     m_freeData = 1608                    m_reservedCnt = 567
    m_lsn = (124:13829:4)                m_xactReserved = 567                 m_xdesId = (0:1863713)
    m_ghostRecCnt = 0                    m_tornBits = 0                       
    Allocation Status
    GAM (1:2) = ALLOCATED                SGAM (1:3) = ALLOCATED               
    PFS (1:113232) = 0x20 MIXED_EXT   0_PCT_FULL                              DIFF (1:6) = NOT CHANGED
    ML (1:7) = NOT MIN_LOGGED            
    DATA:
    OFFSET TABLE:
    Row - Offset                         
    3 (0x3) - 0 (0x0)                    
    2 (0x2) - 0 (0x0)                    
    1 (0x1) - 0 (0x0)                    
    0 (0x0) - 0 (0x0)                    
    DBCC execution completed. If DBCC printed error messages, contact your system administrator.
    Acha que eu posso executar em produção?
    Clayton Dias

    quarta-feira, 24 de agosto de 2011 21:12