Comment corriger une corruption de page dans SQL Server ?

Summary: 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.

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

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.

Dans ce cas, l’erreur apparaît :

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

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,

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”.

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 :

Les valeurs du paramètre printopt sont les suivantes :

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 :

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é.

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.

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 :

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.

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.

Related Post

Exit mobile version