none
Resolver problema de pagina em suspect RRS feed

  • Pergunta

  •   Pessoal

         Estou com um banco de dados onde ele é bem grande e foi identificado problema em uma tabela, onde foi registrado na tabela de suspect_pages as paginas com problema, conforme abaixo, tentei utilizar o comando dbcc checkdb conforme abaixo, só que percebi que ele tenha utilizar o tabela tempdb para executar este processo e como neste servidor o meu espaço de tempdb é pouco devido ao tamanho da tabela, gostaria de saber se existe uma outra maneira de resolver este problema, sem que ele utilizei todo os recursos de espaço do meu tempdb, teria ou existiria uma outra maneira de resolver este problema de pagina em suspect ?

    DBCC CHECKDB (N'tb_catraca_2014_prod', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;
    
    select 
    tb_susp.*
    FROM msdb.dbo.suspect_pages tb_susp (nolock)
    
    
    database_id	file_id	page_id	event_type	error_count	last_update_date
    7	1	652056961	2	15	2020-01-02 15:28:32.053
    7	1	652067203	1	39	2019-12-30 19:45:45.900
    
    
    
    Msg 824, Level 24, State 2, Line 5
    SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x4e989b21; actual: 0x32d9a8ea). 
    It occurred during a read of page (1:652056961) in database ID 7 at offset 0x0004dbb3302000 in file 'x:\BKP_catraca\producao_manut_2014.mdf'.
      Additional messages in the SQL Server error log or system event log may provide more detail. 
    This is a severe error condition that threatens database integrity and must be corrected immediately.
     Complete a full database consistency check (DBCC CHECKDB). 
    This error can be caused by many factors; for more information, see SQL Server Books Online.


    • Editado neibala quinta-feira, 2 de janeiro de 2020 19:09 erro de digitação.
    quinta-feira, 2 de janeiro de 2020 19:08

Respostas

  • Nei,

    Pegando com base a sugestão do Jefferson, pensei rapidamente em duas possibilidades que fazem uso do DBCC CheckTable.

    Veja se estes exemplos podem te ajudar:

    -- Utilizando a Information_Schema.Tables --
    Select 'DBCC CheckTable ('''+Table_Schema+'.'+TABLE_NAME + ''');' As 'Copie, Cole e Execute o resultado....'
    From INFORMATION_SCHEMA.TABLES
    Where TABLE_TYPE = 'Base Table'
    Go
    
    -- Utilizando a Junção entre sys.tables e sys.objects --
    Select 'DBCC CheckTable ('''+sc.name+'.'+ so.Name+''');' As 'Copie, Cole e Execute o resultado....'
    From sys.objects so Inner Join Sys.schemas SC
                         On so.schema_id = sc.schema_id
    Where SO.type_desc = 'User_Table'
    Go                  

    Não testei, pode contar erros.

    Se possível nos retorne o resultado apresentado após o processando de uma das opções apresentadas acima.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    sábado, 4 de janeiro de 2020 13:33

Todas as Respostas

  • Olá amigão, 

    Rapaz , Erro de página no Sql Server é complexo demais . 

    A solução ideal é  RESTORE do backup íntegro (conforme recomendação da Microsoft) .  Caso você tenha e possa fazer seria o melhor dos mundos. 

    Este erro pode ser devido a problemas com disco. Seria muito importante você fazer esta verificação. 

    Você já sabe qual é a pagina e o Banco de Dados do problema.  Verifique qual é o objeto do erro , se é uma tabela, índice ou algo assim importante para o sistema por exemplo.

    Você pode fazer um 

    DBCC CHECKDB('BASEDEDADOS', REPAIR_REBUILD)
    


    Se o problema for um índce ele poderá recriar e resolver o problema (tomara que seja).

    Mas, para o caso final , faça um backup e restore em outro local e faça um teste com o comando:

    DBCC CheckDB ("BASEDEDADOS", REPAIR_ALLOW_DATA_LOSS)

    Caso sucesso , verifique se houve perda de dados. (Não execute o comando acima sem antes ler o link abaixo que enviei por favor). 

    Dê uma lida no material oficial para lhe ajudar a entender melhor os comandos possíveis:

    DBCC CHECKDB (Transact-SQL)

    Boa sorte e nos informe quais foram os resultados e quais os passos que está executando para que possamos lhe ajudar.  


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    quinta-feira, 2 de janeiro de 2020 20:35
  • Jeferson / Grupo

         Então como passei muitas informações acredito que acabou não ficando tão claro, sobre a identificação, conforme tinha enviado está relacionado com uma tabela (figura 1) e percebi que está relacionado até mesmo a um dia de uma movimentação, então estava tentando resolver o problema (figura 2), só que percebi que ele utiliza a tempdb e como não tenho muito espaço em disco não estou conseguindo executar o comando até o final, existiria uma outra maneira ?

         E uma outra dúvida eu não conseguiria apagar o registro onde estaria com este problema de outra forma ?

    (figura 1)
    select 
    tb_susp.*
    FROM msdb.dbo.suspect_pages tb_susp (nolock)
    
    
    database_id	file_id	page_id	event_type	error_count	last_update_date
    7	1	652056961	2	15	2020-01-02 15:28:32.053
    7	1	652067203	1	39	2019-12-30 19:45:45.900
    
    
    (figura 2)
    DBCC CHECKDB (N'tb_catraca_2014_prod', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;
    
    

    sexta-feira, 3 de janeiro de 2020 11:05
  • Olá amigo Nei,

    Uma das formas seria você fazer um check por tabela (Seria o ideal um script com um loop na tabela sys.tables e ). Desta forma você faria um check por vez e não usaria tanto tempdb. Talvez seja o suficiente. 

    Agora para saber exatamente (ou quase isso ) o tamanho que você vai precisar para usar de tempdb você pode usar o parametro ESTIMATEONLY o que não executa o check de verdade e ai você vai pode saber o tamanho necessário. 

    How to be sure that tempdb size is good to run a DBCC CHECKDB?

    Quem sabe você possa fazer alguma 'movimentação' de arquivos sabendo o tamanho necessário?


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    sábado, 4 de janeiro de 2020 02:56
  • Nei,

    Pegando com base a sugestão do Jefferson, pensei rapidamente em duas possibilidades que fazem uso do DBCC CheckTable.

    Veja se estes exemplos podem te ajudar:

    -- Utilizando a Information_Schema.Tables --
    Select 'DBCC CheckTable ('''+Table_Schema+'.'+TABLE_NAME + ''');' As 'Copie, Cole e Execute o resultado....'
    From INFORMATION_SCHEMA.TABLES
    Where TABLE_TYPE = 'Base Table'
    Go
    
    -- Utilizando a Junção entre sys.tables e sys.objects --
    Select 'DBCC CheckTable ('''+sc.name+'.'+ so.Name+''');' As 'Copie, Cole e Execute o resultado....'
    From sys.objects so Inner Join Sys.schemas SC
                         On so.schema_id = sc.schema_id
    Where SO.type_desc = 'User_Table'
    Go                  

    Não testei, pode contar erros.

    Se possível nos retorne o resultado apresentado após o processando de uma das opções apresentadas acima.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    sábado, 4 de janeiro de 2020 13:33
  • -- Utilizando a Information_Schema.Tables --
    Select 'DBCC CheckTable ('''+Table_Schema+'.'+TABLE_NAME + ''');' As 'Copie, Cole e Execute o resultado....'
    From INFORMATION_SCHEMA.TABLES
    Where TABLE_TYPE = 'Base Table'
    Go

    Prezado Junior, 

    Usei este seu exemplo, e funcionou certinho. 

    Só um detalhe, 

    Tirei a etapa do where e coloquei um use na frente, ai ele diz qual a base de dados que vai fazer a pesquisa. 

    ficou assim: 

    use teste
    Select 'DBCC CheckTable ('''+Table_Schema+'.'+TABLE_NAME + ''');' As 'Copie, Cole e Execute o resultado....'
    From INFORMATION_SCHEMA.TABLES
    

    O resultado eu copiei e colei e executei todos em sequencia e funcionou certinho . 


    Se esta resposta lhe ajudou, marque-a como útil para que outra pessoa com dúvida ou problema semelhante possa encontrar resposta ou ajuda mais facilmente. * Jefferson Clyton Pereira da Silva - [ MCSA | MCP | MCTS | MTA | Analista de Banco de Dados - Sql Server e Oracle ]

    terça-feira, 7 de janeiro de 2020 15:21
  • Jefferson,

    Que ótimo, fico feliz que tenha dado certo e conseguido realizar o processamento.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 7 de janeiro de 2020 18:07
  • Junior Galvão

          Como o meu problema estava mais voltado a uma tabela, onde mesmo executando o comando com reparação e outros infelizmente não deu certo, onde no momento estamos tentando de uma outra forma, então vou fazer mais alguns testes aqui e agradeço toda a atenção, neste assunto.

    terça-feira, 7 de janeiro de 2020 18:34
  • Junior Galvão

          Como o meu problema estava mais voltado a uma tabela, onde mesmo executando o comando com reparação e outros infelizmente não deu certo, onde no momento estamos tentando de uma outra forma, então vou fazer mais alguns testes aqui e agradeço toda a atenção, neste assunto.

    Neibala,

    Ok, fico no aguardo.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 7 de janeiro de 2020 18:36