Este artigo compartilha a importância dos índices em um banco de dados SQL. Além disso, fornece uma breve visão geral dos índices clusterizados e não clusterizados. Além disso, o artigo discute os motivos da corrupção do índice do SQL Server, fatores para identificar qualquer índice corrompido e métodos para corrigi-lo.
Os índices no SQL Server ajudam a acelerar o processo de recuperação de linhas de uma tabela ou exibição. No entanto, a escolha correta dos índices é crucial para melhorar o desempenho das consultas. O SQL Server oferece suporte a índices clusterizados e não clusterizados. A corrupção em qualquer um desses índices pode causar atraso na busca de linhas. Além disso, você pode obter valores diferentes ou excluídos ao recuperar algumas linhas. Além disso, as consultas de execução mais longa podem apresentar falhas devido a índices corrompidos nas tabelas.
Seja qual for a situação, você deve reparar a corrupção nos índices no devido tempo para evitar que o fluxo de trabalho do banco de dados SQL Server seja afetado.
Antes de discutir os métodos para solucionar problemas de corrupção de índice, vamos ver brevemente os índices clusterizados e não clusterizados.
Visão geral de índices agrupados e não agrupados
A aplicação de uma restrição de chave primária em uma coluna dentro de uma tabela cria um índice clusterizado na coluna. Um índice clusterizado classifica os dados fisicamente e os armazena em uma tabela com base em sua chave de índice definida. Como podemos classificar os dados em apenas uma ordem, não é possível ter mais de um índice clusterizado.
No entanto, um índice não clusterizado classifica e armazena dados separadamente das linhas em uma tabela. Essencialmente, é uma cópia das colunas de dados da tabela com links para a tabela associada. Ao contrário dos índices clusterizados, você pode ter um ou mais índices não clusterizados.
O que causa a corrupção de índice do SQL Server?
Os índices podem ficar muito fragmentados ao longo do tempo (devido a operações de inserção, atualização ou exclusão em massa) e requerem manutenção periódica. Índices fragmentados podem causar baixo desempenho de consulta e podem ser corrompidos. Além disso, fatores como atualizar a versão do SQL Server, bug no programa SQL, desligamento repentino do sistema, etc., podem levar à corrupção do índice do SQL Server. Particularmente, executar uma ‘instrução UPDATE complexa com dica NOLOCK’ na tabela pode causar corrupção de índice não clusterizado.
Antes de discutir os métodos para reparar a corrupção nos índices do SQL Server, vamos verificar como identificar os índices corrompidos.
Como identificar corrupção no índice do SQL Server?
Você pode determinar se um índice está corrompido usando os seguintes métodos:
- Busque linhas com valores diferentes ou excluídos e execute um comando 'ROWID' para identificar as entradas ausentes. Você também pode rastrear as entradas ausentes verificando o log de erros do SQL.
- A execução do DBCC CHECKDB informará a seguinte mensagem de erro se você tiver um índice não clusterizado corrompido.
Msg 2511, Nível 16, Estado 1, Linha 31
Erro de tabela:ID do objeto 613577224, ID do índice 2, ID da partição 72057594041401344,
ID da unidade de alocação 72057594047037440 (digite dados da linha IN).
Chaves fora de ordem na página (1:264), slots 2 e 3.
- Se você tiver um índice clusterizado, poderá receber a seguinte mensagem mostrando erro:
Servidor:Msg 1902, Nível 16, Estado 3, Linha 1
Não é possível criar mais de um índice clusterizado na tabela 'Nome da tabela'. Elimine o índice clusterizado existente 'Nome do índice clusterizado' antes de criar outro.
Como reparar a corrupção de índice do SQL Server?
Siga estes métodos gratuitos que você pode usar para reparar a corrupção do índice do SQL Server:
Método 1 – Restaurar do Backup
Se você suspeitar de corrupção em um índice clusterizado ou não clusterizado, use o backup para restaurar os dados afetados antes que a corrupção ocorra.
No entanto, a restauração do backup não funcionará se o backup estiver faltando as atualizações mais recentes. Pode até levar à perda de dados. Nesse caso, tente o próximo método.
Método 2 – Eliminar e recriar índice corrompido
Observação: Isso só funciona para índices não clusterizados.
Elimine todos ou índices específicos mostrando corrupção seguindo estas etapas:
- Conecte-se a uma instância de servidor no SQL Server Management Studio (SSMS) .
- No 'Explorador de objetos' janela, expanda o banco de dados que contém a tabela com o índice corrompido.
- Clique com o botão direito do mouse na tabela, selecione 'Script Table as' opção, passe o mouse sobre 'DROP And CREATE To' e clique no Novo Editor de Consulta
Se você não conseguir recriar índices corrompidos, tente reparar os índices.
Método 3 – Reparar o banco de dados SQL
Como último recurso, execute o comando DBCC CHECKDB com 'REPAIR_ALLOW_DATA_LOSS' para o banco de dados que corrompeu o índice (clusterizado ou não clusterizado) em uma tabela. Mas isso pode resultar em perda de dados. Como solução alternativa, tente usar uma ferramenta de reparo SQL como Stellar Repair for MS SQL. A ferramenta ajuda a reparar arquivos de banco de dados (.mdf e .ndf) e restaura índices, exibições, procedimentos armazenados e todos os outros componentes. Você pode importar os índices restaurados e outros objetos de banco de dados diretamente para um banco de dados ativo ou novo.
Baixe a versão demo do software de reparo de banco de dados SQL para visualizar os índices recuperáveis antes de salvar o arquivo reparado.
Conclusão
Se você suspeitar de corrupção em um índice, use os fatores descritos no artigo para determinar se o índice está corrompido ou não. Além disso, confira os possíveis motivos por trás da corrupção do índice do SQL Server e os métodos para reparar a corrupção. Os métodos incluem restaurar o banco de dados do backup, descartar e recriar os índices e reparar o banco de dados e restaurar todos os seus componentes. Você também pode considerar o uso de uma ferramenta de reparo SQL para corrigir os índices SQL clusterizados e não clusterizados corrompidos e recuperar objetos de banco de dados inacessíveis.