Cet article partage l'importance des index dans une base de données SQL. Il fournit également un bref aperçu des index clusterisés et non clusterisés. En outre, l'article explique les raisons de la corruption de l'index SQL Server, les facteurs permettant d'identifier tout index corrompu et les méthodes pour y remédier.
Les index dans SQL Server permettent d'accélérer le processus de récupération des lignes d'une table ou d'une vue. Cependant, le choix correct des index est crucial pour améliorer les performances des requêtes. SQL Server prend en charge les index cluster et non cluster. La corruption de l'un de ces index peut entraîner un retard dans la récupération des lignes. De plus, vous pouvez obtenir des valeurs différentes ou supprimées lors de la récupération de certaines lignes. De plus, les requêtes les plus longues peuvent devenir défectueuses en raison d'index corrompus sur les tables.
Quelle que soit la situation, vous devez réparer la corruption des index en temps voulu pour éviter que le flux de travail de la base de données SQL Server ne soit affecté.
Avant de discuter des méthodes de dépannage de la corruption d'index, passons brièvement en revue les index clusterisés et non clusterisés.
Présentation des index clusterisés et non clusterisés
L'application d'une contrainte de clé primaire sur une colonne dans une table crée un index clusterisé sur la colonne. Un index clusterisé trie physiquement les données et les stocke dans une table en fonction de sa clé d'index définie. Comme nous ne pouvons trier les données que dans un seul ordre, il n'est pas possible d'avoir plus d'un index clusterisé.
Cependant, un index non clusterisé trie et stocke les données séparément des lignes d'une table. Il s'agit essentiellement d'une copie de colonnes de données de table ayant des liens vers la table associée. Contrairement aux index clusterisés, vous pouvez avoir un ou plusieurs index non clusterisés.
Qu'est-ce qui cause la corruption de l'index SQL Server ?
Les index peuvent être fortement fragmentés au fil du temps (en raison d'opérations d'insertion, de mise à jour ou de suppression en bloc) et nécessitent une maintenance périodique. Les index fragmentés peuvent entraîner de mauvaises performances des requêtes et peuvent être corrompus. En outre, des facteurs tels que la mise à niveau de la version de SQL Server, un bogue dans le programme SQL, un arrêt soudain du système, etc. peuvent entraîner une corruption de l'index SQL Server. En particulier, l'exécution d'une "instruction UPDATE complexe avec un indice NOLOCK" sur la table peut entraîner une corruption d'index non clusterisé.
Avant de discuter des méthodes de réparation de la corruption dans les index SQL Server, voyons comment identifier les index corrompus.
Comment identifier la corruption dans l'index de SQL Server ?
Vous pouvez déterminer si un index est corrompu en utilisant les méthodes suivantes :
- Récupérez les lignes ayant des valeurs différentes ou supprimées, puis exécutez une commande "ROWID" pour identifier les entrées manquantes. Vous pouvez également retrouver les entrées manquantes en consultant le journal des erreurs SQL.
- L'exécution de DBCC CHECKDB signalera le message d'erreur suivant si vous avez un index non cluster corrompu.
Msg 2511, Niveau 16, État 1, Ligne 31
Erreur de table :ID d'objet 613577224, ID d'index 2, ID de partition 72057594041401344,
ID d'unité d'allocation 72057594047037440 (type de données IN-row).
Touches hors service à la page (1:264), emplacements 2 et 3.
- Si vous avez un index clusterisé, vous pouvez recevoir le message d'erreur suivant :
Serveur :Msg 1902, Niveau 16, État 3, Ligne 1
Impossible de créer plus d'un index clusterisé sur la table 'Nom de la table'. Supprimez l'index cluster existant "Clustered Index Name" avant d'en créer un autre.
Comment réparer la corruption de l'index SQL Server ?
Suivez ces méthodes gratuites que vous pouvez utiliser pour réparer la corruption d'index SQL Server :
Méthode 1 :Restauration à partir d'une sauvegarde
Que vous suspectiez une corruption dans un index clusterisé ou non clusterisé, utilisez la sauvegarde pour restaurer les données affectées avant que la corruption ne se produise.
Cependant, la restauration à partir d'une sauvegarde ne fonctionnera pas si la sauvegarde ne contient pas les dernières mises à jour. Cela peut même entraîner une perte de données. Dans ce cas, essayez la méthode suivante.
Méthode 2 - Supprimer et recréer l'index corrompu
Remarque : Cela ne fonctionne que pour les index non clusterisés.
Supprimez tout ou un index spécifique montrant la corruption en suivant ces étapes :
- Se connecter à une instance de serveur dans SQL Server Management Studio (SSMS) .
- Sur l''Explorateur d'objets' fenêtre, développez la base de données qui contient la table avec l'index corrompu.
- Cliquez avec le bouton droit sur le tableau, sélectionnez 'Script Table as' option, passez la souris sur 'DROP And CREATE To' et cliquez sur Nouvel éditeur de requête
Si vous ne parvenez pas à recréer des index corrompus, vous pouvez essayer de réparer les index.
Méthode 3 - Réparer la base de données SQL
En dernier recours, exécutez la commande DBCC CHECKDB avec 'REPAIR_ALLOW_DATA_LOSS' pour la base de données qui a un index corrompu (cluster ou non cluster) sur une table. Mais cela peut entraîner une perte de données. Comme solution alternative, essayez d'utiliser un outil de réparation SQL comme Stellar Repair pour MS SQL. L'outil aide à réparer les fichiers de base de données (.mdf et .ndf) et restaure les index, les vues, les procédures stockées et tous les autres composants. Vous pouvez importer les index restaurés et d'autres objets de base de données directement dans une base de données active ou nouvelle.
Téléchargez la version de démonstration du logiciel de réparation de base de données SQL pour prévisualiser les index récupérables avant d'enregistrer le fichier réparé.
Conclusion
Si vous soupçonnez la corruption d'un index, utilisez les facteurs décrits dans l'article pour déterminer si l'index est corrompu ou non. Consultez également les raisons possibles de la corruption de l'index SQL Server et les méthodes de réparation de la corruption. Les méthodes incluent la restauration de la base de données à partir d'une sauvegarde, la suppression et la recréation des index, ainsi que la réparation de la base de données et la restauration de tous ses composants. Vous pouvez également envisager d'utiliser un outil de réparation SQL pour réparer les index SQL cluster et non cluster corrompus et récupérer les objets de base de données inaccessibles.