none
Como identificar a tabela e o índice que está com problema RRS feed

  • Pergunta

  • Pessoal

         Estou verificando um banco e dados onde está dando a mensagem abaixo, neste caso qual seria a melhor alternativa para identificar a tabela e caso for possível também o índice que está com problema, pois comentaram que fazendo um reindex nem se for 2 vezes pode resolver este problema.

         Alguém vê alguma outra alternativa para resolver um problema assim ?

    quarta-feira, 22 de janeiro de 2020 18:57

Todas as Respostas

  • Deleted
    quarta-feira, 22 de janeiro de 2020 19:22
  • Neibala,

    De que forma você esta fazendo a verificação? Esta utilizando o comando DBCC CheckDB?

    A imagem esta bem ruim, sinceramente não consegui visualizar o que esta sendo apresentando nela. Caso você na saiba o conteúdo apresentado na guia Mensagens, pode ser editado, copiado, colado, enfim, você poderia selecionar o que esta sendo reportado pelo SQL Server Management Studio e colar em outro post.

    Uma possibilidade para verificar a tabela é utilizar o comando DBCC CheckTable.


    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]

    quarta-feira, 22 de janeiro de 2020 19:22
  • Prezado Neibala, 

    As possíveis opções neste caso de corrompimento (Sim, você possui objetos corrompidos ai) são:

    1-Restaurar um Backup (antes do problema) da base de dados.

    2-usar um CHECKDB com a opção REPAIR.

    (mas, antes acho que você deveria fazer um backup e restore em outra base e fazer este teste pois pode levar a perda de dados).

    3-Recriar os indices pode ser uma solução. Mas, acho que não vai funcionar pois não há mais a 'linked' com o objeto. 

    4-Se possível , você também pode fazer, um 'INSERT INTO' e levar os objetos para uma nova tabela (mas, novamente, faça este teste em outra base de dados, restaurada de um backup para testar). 

    5-Exportar os dados para outra tabela - Opção export no SSMS e 'subir' em outra tabela.

    Enfim, acredito seriamente que a base sofreu corrompimento (IAM page (X:XXXXXX)) e você deve inclusive buscar esta origem. Pode ser com disco ou ter ocorrido uma queda de energia e por ai vai. 


    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 ]

    sexta-feira, 24 de janeiro de 2020 03:35
  • Jefferson

         Como este banco de dados é bem antigo e já foi feito um resgate de um outro Servidor, então na questão do backup neste caso especifico não tenho disponível, onde tentei recriar os índices mas sem sucesso, o repair tentei até com a opção de descartar os com problema mais mesmo assim não tive sucesso.

         Eu tentei insert into mais não tive sucesso, agora o exportar é algo que vou tentar depois e algo que identifiquei que o tamanho do banco de dados por mais que apaguei determinado dados ele não consegue deixar no tamanho das tabelas, pois assim o tamanho do banco de dados ficaria menor. 

         E quanto ao problema pode ter ocorrido alguma falha e acabou danificando algo que no momento não está tão claro o motivo do problema. 

        Então vendo as informações acima, se você lembrar de algo mais, agradeço as informações até o momento.

    quinta-feira, 30 de janeiro de 2020 19:19
  • Oi Nei,

    Qual foi o problema do Insert ? 

    Talvez a gente possa lhe ajudar com isso.

    Essa deleção de dados que você informa , ela é realmente de uma 'boa' quantidade de dados ? que sejam relevantes a 'páginas' ? 


    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 ]

    sexta-feira, 31 de janeiro de 2020 13:22
  • Jefferson

          Só para não desviar do assunto principal, o meu problema está relacionado a mensagem que enviei no inicio, onde gostaria de identificar pela mensagem de erro qual seria a tabela ou o objeto que está com problema ?

    quarta-feira, 5 de fevereiro de 2020 14:53
  • Deleted
    quarta-feira, 5 de fevereiro de 2020 15:20
  • Neibala,

    Então, o objeto é identificar a tabela ou possível índice com problema!!!

    Certo, inicialmente gostaria de propor um cenário inverso, vamos identificar os índices existentes no seu banco de dados que não estão sendo utilizados, neste exemplo você vai identificar as tabelas e seus respectivos índices.

    Veja o exemplo abaixo:

    SELECT  OBJECT_NAME(i.[object_id]) AS [Table Name] ,
            i.name
    FROM    sys.indexes AS i
            INNER JOIN sys.objects AS o ON i.[object_id] = o.[object_id]
    WHERE   i.index_id NOT IN ( SELECT  s.index_id
                                FROM    sys.dm_db_index_usage_stats AS s
                                WHERE   s.[object_id] = i.[object_id]
                                        AND i.index_id = s.index_id
                                        AND database_id = DB_ID() )
            AND o.[type] = 'U'
    ORDER BY OBJECT_NAME(i.[object_id]) ASC
    Go


    Este outro exemplo, você vai identificar todos os índices clusterizados e não clusterizados existentes em seu banco de dados, bem como, as respectivas tabelas:

    SELECT t.name, i.name, i.type_desc, c.name
    FROM sys.tables t INNER JOIN sys.indexes i
    			 	   ON t.object_id = i.object_id AND i.index_id = 1
    			      INNER JOIN sys.index_columns ic
    				   ON i.object_id = ic.object_id AND i.index_id = ic.index_id		      
    				  INNER JOIN sys.columns c
    				   ON ic.object_id = c.object_id AND ic.column_id = c.column_id
    GO


    Por fim, as lista de índices Clusterizados e Não Clusterizados com possíveis falhas:

    -- Clustered Index --
    SELECT  OBJECT_NAME(s.[object_id]) AS [Table Name] ,
            i.name AS [Index Name] ,
            i.index_id ,
            user_updates AS [Total Writes] ,
            user_seeks + user_scans + user_lookups AS [Total Reads] ,
            user_updates - ( user_seeks + user_scans + user_lookups ) AS [Difference]
    FROM  sys.dm_db_index_usage_stats AS s WITH ( NOLOCK ) INNER JOIN sys.indexes AS i WITH ( NOLOCK )
                                                                                                         ON s.[object_id] = i.[object_id]
                                                                                                         AND i.index_id = s.index_id
    WHERE   OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1
    AND s.database_id = DB_ID()
    AND user_updates > ( user_seeks + user_scans + user_lookups )
    AND i.index_id = 1
    ORDER BY [Difference] DESC, [Total Writes] DESC, [Total Reads] ASC
    Go
    
    -- NonClustered Index --
    SELECT  OBJECT_NAME(s.[object_id]) AS [Table Name] ,
            i.name AS [Index Name] ,
            i.index_id ,
            user_updates AS [Total Writes] ,
            user_seeks + user_scans + user_lookups AS [Total Reads] ,
            user_updates - ( user_seeks + user_scans + user_lookups ) AS [Difference]
    FROM  sys.dm_db_index_usage_stats AS s WITH ( NOLOCK ) INNER JOIN sys.indexes AS i WITH ( NOLOCK )
                                                                                                         ON s.[object_id] = i.[object_id]
                                                                                                         AND i.index_id = s.index_id
    WHERE   OBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1
    AND s.database_id = DB_ID()
    AND user_updates > ( user_seeks + user_scans + user_lookups )
    AND i.index_id > 1
    ORDER BY [Difference] DESC, [Total Writes] DESC, [Total Reads] ASC
    Go
    
    

    Estes exemplos foram obtido com base nas documentações oficiais da Microsoft:

    https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-indexes-transact-sql?view=sql-server-ver15

    sys.index_columns (Transact-SQL)

    Index Related Dynamic Management Views and Functions (Transact-SQL)
    sys.dm_db_index_physical_stats (Transact-SQL)
    sys.dm_db_index_operational_stats (Transact-SQL)
    sys.indexes (Transact-SQL)
    sys.objects (Transact-SQL)
    Monitor and Tune for Performance


    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]

    quarta-feira, 5 de fevereiro de 2020 16:46