Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Façons de réparer SQL Server a détecté une erreur d'E/S basée sur la cohérence logique

Résumé : Le problème d'inaccessibilité de la base de données SQL est le problème courant auquel sont confrontés les utilisateurs de la base de données. Donc, ce blog traitant des problèmes traitera de SQL Server a détecté une erreur d'E/S basée sur la cohérence logique. Nous allons discuter de la raison de cette erreur et des meilleurs moyens possibles de savoir comment résoudre ce problème. Pour accéder et récupérer la base de données SQL inaccessible, l'utilisateur peut prendre l'aide de Recover SQL Server Database Tool.

Raisons de l'erreur d'E/S basée sur la cohérence logique de la base de données :

  • Arrêt/crash soudain du système ou arrêt contraint
  • L'administrateur SQL tente d'interroger ou de modifier des données SQL

Au moment où une base de données SQL Server rencontre une erreur basée sur la cohérence logique, la première étape consiste à détecter l'erreur.

Les stratégies d'accompagnement peuvent aider à détecter l'erreur :

  • Utilisez l'outil Best Practice Analyzer (BPA) :l'outil BPA aide à identifier les erreurs de cohérence de base. Cet outil est explicite pour la variante SQL, ce qui signifie que BPA 2008 est accessible avec SQL 2008, etc.
  • Vérifier le système Windows au niveau de la structure du journal des événements, les erreurs liées au pilote ou au disque
  • Vérifier la respectabilité du framework de fichiers en exécutant la commande chkdsk
  • Exécuter les diagnostics suggérés par les fabricants de matériel pour le framework ou le disque
  • Pour SQL Server 2008, exécutez l'utilitaire SQLIOSim sur le lecteur de la base de données qui a annoncé l'erreur d'E/S.
  • Contactez le vendeur du matériel ou le fabricant de l'appareil pour vérifier que les prérequis matériels correspondent aux nécessités d'E/S du serveur SQL.

Méthodes manuelles pour résoudre SQL Server en cas de détection d'une erreur d'E/S basée sur la cohérence logique

Technique 1 – Vérifier le matériel et le réseau d'applications

L'erreur d'irrégularité de la base de données peut être corrigée en créant un réseau approprié entre la base de données et l'application SQL.

Technique 2 – Restauration à partir d'une sauvegarde SQL

La solution la plus réalisable consiste à utiliser la sauvegarde pour la récupération de la base de données SQL. Avant de restaurer à partir d'une sauvegarde, assurez-vous que :

  • Vous disposez d'une sauvegarde complète en cours
  • La sauvegarde est mise à jour, uniquement avant la corruption, et n'est pas très ancienne afin de maintenir une distance stratégique par rapport à la perte de données de base.
  • La corruption se situe au niveau de la page, car les problèmes de corruption au niveau de la page peuvent être résolus à l'aide de la restauration au niveau de la page.

Étape 1 : Utilisez la commande ci-jointe pour restaurer la base de données SQL à partir d'une sauvegarde complète

Sauvegarder le journal des transactions

Sauvegarder LOG PageLevelRestores TO

Plaque ='g:PageLevelRestores_LOG1.bak'

AVEC INIT

ALLER

Étape 2 : Effectuez le changement de restauration pour refléter les progressions en ligne.

Sauvegarder la fin du journal…

Sauvegarder LOG PageLevelRestores TO

Cercle ='g:PageLevelRestores_LOG_TAIL.bak'

AVEC INIT

ALLER

Remarque :Il n'y a aucune raison impérieuse de restaurer la base de données complète du serveur SQL si la corruption est liée à une seule page. Vous pouvez restaurer la base de données à partir de la sauvegarde accessible pour cette page qui est minée. L'exécution des commandes d'accompagnement aidera à restaurer la sauvegarde d'une page solitaire :

Restaurer toutes les sauvegardes de journaux accessibles dans la bonne demande

Restore LOG PageLevelRestores FROM

Cercle ='g:PageLevelRestores_LOG1.bak'

AVEC NORECOVERY

ALLER

Enfin, restaurez la sauvegarde du journal de fin

Restore LOG PageLevelRestores FROM

Cercle ='g:PageLevelRestores_LOG_TAIL.bak'

AVEC NORECOVERY

ALLER

Enfin, terminez avec la séquence de restauration

Restaurer DATABASE PageLevelRestores AVEC RÉCUPÉRATION

ALLER

Lorsque la sauvegarde de la base de données a restauré la base de données SQL, exécutez à nouveau la requête DBCC CHECKDB pour vérifier que la proclamation de sélection prévaut sans erreur d'E/S basée sur la cohérence logique de la base de données SQL. Cette commande veille également à ce qu'il n'y ait pas de perte de données dans ce tableau.

Limites de la sauvegarde de la base de données SQL :

  1. Il est absurde de s'attendre à restaurer à partir d'une sauvegarde de base de données SQL lorsque la sauvegarde accessible est obsolète.
  2. Si une erreur d'E/S basée sur la cohérence logique se propage sur la base de données du serveur SQL, cette stratégie ne sera alors plus légitime.
  3. Dans les situations où la page défectueuse existe dans un index non clusterisé, la base de données SQL peut être corrigée en supprimant et en recréant l'index de la base de données SQL.

Technique 3 :Réparer la base de données SQL corrompue avec REPAIR_ALLOW_DATA_LOSS

REPAIR_ALLOW_DATA_LOSS est le niveau fixe de base pour les erreurs analysées.

Remarques :avant d'utiliser REPAIR_ALLOW_DATA_LOSS, effectuez les opérations suivantes :

Faites une sauvegarde de la base de données du serveur SQL et enregistrez-la sous un autre nom

Définir la base de données SQL en mode mono-utilisateur

Obtenez le nombre d'enregistrements de tous les tableaux à l'aide des commandes d'accompagnement

Proclamer @COUNT INT

Proclamer @SQL VARCHAR(2000)

Faire TABLE #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)

Proclamer TINFO_CUR CURSEUR POUR

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_TYPE='BASE TABLE'

OUVRIR TINFO_CUR

Obtenir NEXT FROM TINFO_CUR INTO @T_Name

PENDANT @@FETCH_STATUS =0

Commencer

SET @SQL='INSERT INTO #T_Info(T_Name,D_Count) SELECT ”'[email protected]_Name+”',COUNT(*) FROM '[email protected]_Name+”

EXÉCUTER (@SQL)

Obtenir NEXT FROM TINFO_CUR INTO @T_Name

FIN

FERMER TINFO_CUR

DEALLOCATE TINFO_CUR

SELECT * FROM #T_Info ORDER BY T_NAME

Les avancées qui l'accompagnent aident à corriger la base de données SQL et à résoudre les erreurs d'E/S cohérentes basées sur la cohérence :

Exécutez la commande :

DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)

Une fois la base de données SQL corrigée, réorganisez la procédure de "Table Record Count" et comparez avec l'ancien nombre d'enregistrements.

Il ne doit y avoir aucune distinction entre le nombre initial et le dernier enregistrement de table.

Contraintes :

REPAIR_ALLOW_DATA_LOSS peut corriger l'erreur d'E/S basée sur la cohérence logique de la base de données, mais il existe un problème important de perte de données, où une connexion peut rencontrer une perte de données de base.

Solution facultative

Si les techniques ci-dessus ne fonctionnent pas, à ce stade, consultez un outil de réparation de fichiers SQL SysTools . Cet outil corrige les fichiers MDF et NDF corrompus et restaure tous les objets de la base de données. De plus, cet outil permet de récupérer tous les objets de la base de données tels que les tables, les déclencheurs, les index, les clés, les règles, les fichiers supprimés et les procédures stockées. Il est d'une aide incroyable en cas d'urgence, car le produit offre une solution de réparation sans équivoque et prend en charge toutes les versions de base de données SQL.

Conclusion

Lire aussi : Comment vérifier si la base de données SQL est corrompu 

Dans cet article, nous avons présenté la raison pour laquelle SQL Server a détecté une erreur d'E/S basée sur la cohérence logique et les techniques pour résoudre ce problème.

Au vu de l'erreur, nous avons tenté de localiser la bonne technique. Au cas où le matériel ou le framework serait responsable de l'erreur, il est recommandé de déterminer les problèmes liés au matériel, et dans le cas où DBCC CHECKDB signale une erreur de cohérence, essayez alors de restaurer la base de données SQL en utilisant une sauvegarde actualisée. /P>

Si le problème n'est pas résolu avec le matériel et la sauvegarde, essayez à ce stade de réparer la base de données avec l'aide de REPAIR_ALLOW_DATA_LOSS. Il s'agit du degré de correction de base pour déterminer toutes les erreurs de CHECKDB, mais cela n'implique pas qu'il corrigera vraiment l'erreur. En outre, cela pourrait entraîner une perte de données.