Table des matières
    Réparation de la base de données SQL

    Comment corriger une corruption de page dans SQL Server ?


    Table des matières

      Résumé: dans ce billet, nous allons parler de la cause profonde de la corruption au niveau de la page dans le serveur SQL. Nous discuterons également des moyens de réparer la corruption et de restaurer la base de données. De plus, vous découvrirez un logiciel de réparation de base de données SQL qui peut facilement réparer une base de données corrompue et restaurer tous ses objets.

      Les bases de données peuvent être corrompues à tout moment et c’est un problème préoccupant pour les administrateurs de bases de données, car cela met en danger toutes les données cruciales du serveur SQL. De plus, les données deviennent inaccessibles, ce qui a un impact sur le flux de travail de l’organisation. Il est donc important de remédier immédiatement à la corruption. Cependant, il est tout aussi important de comprendre les causes de la corruption, sinon elle se reproduira. Ce blog couvre les informations essentielles sur la façon de réparer une corruption de page dans le serveur SQL.

      Causes de la corruption au niveau des pages de SQL Server

      Voici quelques raisons majeures qui peuvent entraîner une corruption de la base de données du serveur SQL.

      1. Bug logiciel dans le programme SQL Server : Dans ce cas, les données sont mal écrites sur le disque. Consultez ces documents Microsoft :

      On peut éviter ce type de problème en installant la dernière mise à jour cumulative (CU) de la version du serveur SQL.

      1. Problèmes de mémoire : Il s’agit de problèmes matériels qui peuvent affecter l’ensemble du système et pas seulement le serveur MS SQL. Il existe des programmes permettant de vérifier l’exactitude des données en mémoire.
      2. Problèmes de sous-système d’E/S : Dans ce cas, il n’est pas facile de comprendre la cause du problème car le système de stockage peut avoir une architecture compliquée. Par exemple, avant d’écrire sur le disque physique, il se peut que nous devions traverser un réseau ou que nous ayons un contrôleur de disque et ses pilotes. Chacun de ces composants peut tomber en panne.
      3. Arrêt soudain du serveur : Il existe un risque important de corruption de la base de données si, pour une raison quelconque, le serveur s’arrête soudainement. Cela peut se produire en raison d’une défaillance physique du serveur ou d’une panne d’électricité.

      Comment détecter une corruption au niveau de la page dans le serveur SQL ?

      Les bases de données MS SQL Server sont constituées de pages de données de 8 Ko. Huit pages physiquement contiguës constituent une extension, dont la taille est de 64 Ko. La corruption de page signifie qu’une ou plusieurs pages contiennent des valeurs incorrectes.

      Si la base de données est corrompue, nous pouvons le vérifier de trois manières :

      1. L’exécution de l’instruction SELECT sur la table corrompue génère une erreur.

      Le tableau indique une erreur

      Dans ce cas, le message d’erreur s’affiche :

      • Le type d’erreur (ici, nous avons une erreur d’E/S basée sur la cohérence logique, causée par une somme de contrôle incorrecte).
      • La page où se trouve l’erreur (page 1:368).
      • Le décalage où l’erreur est trouvée (0x00000002e0000).
      • L’ID de la base de données corrompue (ID=31).

      2. Exécutez l’instruction DBCC CHECKDB

      Cette commande vérifie l’intégrité physique et logique des objets de la base de données, les relations entre les index et d’autres contrôles structurels. Il suffit de taper DBCC CHECK avec le nom de la base de données entre crochets.

      Déclaration DBCC CHECKDB

      Dans ce cas, l’erreur apparaît :

      • Le nombre de pages corrompues (page 1:368).
      • Le nom de la table corrompue (personne).

      3. Exécutez SELECT sur la table [msdb].[dbo].[suspect_pages].

      Exécuter SELECT sur la table

      La commande SELECT renvoie une grille contenant une ligne pour chaque page corrompue. Dans ce cas, nous pouvons voir que sur la base de données avec ID = 31, la page 1:368 est corrompue.

      Comment corriger une corruption au niveau de la page dans SQL Server ?

      Nous avons mentionné ici deux méthodes différentes pour réparer et récupérer la base de données.

      1. Récupération manuelle via des commandes T-SQL

      Note : Effectuez une sauvegarde des bases de données et/ou une copie des fichiers physiques avant de procéder. Le processus manuel est risqué.

      Pour procéder à la récupération manuelle via les commandes T-SQL afin de corriger la corruption de page dans le serveur SQL, suivez les instructions ci-dessous.

      Utilisez la commande DBCC IND non documentée pour vous assurer que la page 368 est une page de données.

      DBCC IND('Recovery_test',Person,-1)

      Cette commande affiche toutes les pages relatives au tableau indiqué dans le deuxième paramètre, avec les informations relatives au type de page. Dans l’exemple ci-dessous,

      • La première ligne a le type de page 10. Il s’agit donc de la page Index Allocation Map (IAM).
      • La deuxième ligne a le type de page 1. Elle indique que la page 368 contient des données.
      La deuxième ligne a le type de page 1

      Pour afficher les données contenues dans la page 1:368, nous pouvons ouvrir le fichier recovery_test.mdf à l’aide d’un éditeur hexadécimal et aller jusqu’à l’offset 2e0000.

      Le caractère rouge “b” (voir l’image ci-dessous) semble suspect puisque mon nom est “Luca” et non “Lucb”.

      avoir l'air suspect

      2. Utilisez la commande DBCC PAGE :

      Pour obtenir le résultat de la commande DBCC PAGE, l’indicateur de trace 3604 doit d’abord être activé.

      DBCC TRACEON (3604)
      DBCC PAGE('Recovery_test',1,368,2) AVEC TABLERESULTS

      Les paramètres requis sont les suivants :

      • Nom de la base de données
      • Numéro du fichier
      • Numéro de la page
      • PRINTOPT

      Les valeurs du paramètre printopt sont les suivantes :

      • 0 – Il imprime l’en-tête de la page.
      • 1 – En-tête de la page SQL avec les vidages hexagonaux par ligne.
      • 2 – Détails de l’en-tête de la page avec le fichier hexadécimal complet de la page.
      • 3 – En-tête de la page avec description de l’interprétation par ligne.

      Les données présentées sont les mêmes.

      Les données présentées sont les mêmes.

      Nous devons changer la valeur du caractère de la valeur hexadécimale 62 (b) à la valeur hexadécimale 61 (a).

      Nous pouvons utiliser une autre commande non documentée, à savoir la commande DBCC WRITEPAGE. Il s’agit d’une commande puissante qui permet d’écrire directement sur une page.

      Pour utiliser la commande DBCC WRITEPAGE, nous avons besoin des informations suivantes :

      • Le premier paramètre est le nom de la base de données.
      • Le deuxième et le troisième sont le fileId et le PageId que je dois modifier (1 : 368).
      • Le quatrième paramètre est le décalage (hex.74 -> 116 déc.) et le cinquième est le nombre de caractères que nous allons écrire (1).
      • Le sixième paramètre est la valeur que je dois écrire. Dans notre cas, il s’agit de 0x000000.
      • Le septième paramètre indique s’il faut écrire la valeur par l’intermédiaire du pool de tampons. Nous avons choisi la valeur 1 pour écrire directement dans le fichier physique mdf.

      Tout d’abord, mettez la base de données en mode SINGLE_USER :

      ALTER DATABASE recovery_test SET SINGLE_USER WITH ROLLBACK IMMEDIATE

      Exécutez ensuite la commande WRITEPAGE :

      DBCC WRITEPAGE ('recovery_test', 1, 368, 116, 1, 0x61,1)

      Exécutez-la à nouveau pour voir si les données ont changé :

      DBCC TRACEON (3604)
      DBCC PAGE('Recovery_test',1,368,2) AVEC TABLERESULTS

      Oui, les données ont changé.

      Oui, les données ont changé.

      Mettre la base de données en mode MULTI_USER :

      ALTER DATABASE recovery_test SET MULTI_USER WITH ROLLBACK IMMEDIATE

      Vérifier l’état de santé de la base de données :

      DBCC CHECKDB ('recovery_test')

      Le journal indique qu’il n’y a pas d’erreur. Cela signifie que la base de données n’est plus corrompue.

      vérifier qu'il n'y a pas d'erreur

      Réparer la base de données à l’aide de Stellar Repair for MS SQL

      Considérons que le problème que nous avons résolu manuellement est un cas remarquablement simple. Mais la réparation de cas de corruption complexes nécessite des connaissances avancées et implique le risque d’endommager davantage de données. Cependant, une application spécialisée telle que Stellar Repair for MS SQL peut résoudre le même problème de manière sûre et rapide. Quelques étapes simples suffisent pour récupérer une base de données corrompue. Ces étapes sont les suivantes :

      • Lancez l’application Stellar Repair for MS SQL.
      • Au démarrage, l’application vous demande de sélectionner la base de données à récupérer. Indiquez un fichier avec l’extension .mdf.
      • Vous pouvez ensuite choisir de récupérer également les enregistrements supprimés.
      choisir de récupérer les enregistrements supprimés
      • Appuyez sur le bouton Réparer.
      • Il existe deux modes de récupération : Standard et Avancé.
      Il existe deux modes de récupération

      La structure de la base de données sera analysée pour réparation. Une barre de progression indique l’état d’avancement du travail.

      la barre de progression indique l'état d'avancement
      • Le résultat de cette phase de numérisation est sauvegardé. Vous pouvez donc le réutiliser. L’interface graphique permet de visualiser tous les objets de la base de données.
      • La dernière étape consiste à enregistrer les données récupérées. Nous pouvons enregistrer les données dans une nouvelle base de données, dans une base de données existante ou dans un autre format (CSV, XLS ou HTML).
      • Lorsque vous sélectionnez l’option Nouvelle base de données, vous êtes invité à indiquer le nom de la base de données à créer. Les données seront copiées dans la base de données générée.
      Nouvelle option de base de données

      En conclusion

      La base de données SQL est corrompue pour diverses raisons. Dans cet article, nous avons discuté des causes de la corruption au niveau des pages dans SQL Server. Nous avons également vu comment détecter la corruption dans la base de données et comment réparer la base de données corrompue manuellement via les commandes T-SQL et en utilisant le logiciel de réparation SQL. Le logiciel peut faire un travail remarquable en résolvant le problème et en remettant la base de données en parfait état de fonctionnement.

      Was this article helpful?

      No NO

      A propos de l'auteur

      Himanshu Shakya

      Himanshu is a Tech Enthusiast & Blogger at Stellar and having knowledge of Japanese Language. And apart from this in his spare time he likes playing Chess.

      Article similaire

      POURQUOI STELLAR® EST LE LEADER MONDIAL

      Pourquoi choisir Stellar?

      • 0M+

        Clients

      • 0+

        Années d'excellence

      • 0+

        Ingénieurs R&D

      • 0+

        Pays

      • 0+

        Témoignages

      • 0+

        Récompenses reçues