J'obtiens le SqlException
suivant lors de l'appel d'une procédure stockée:
Échec de la tentative de récupération de la page logique (5: 65424) dans la base de données 2. Elle appartient à l'unité d'allocation 7349876362857938944 et non à 4899918190390149120.
System.Data.SqlClient.SqlException s'est produite
Message = "La tentative de récupération de la page logique (5: 65424) dans la base de données 2 a échoué. Elle appartient à l'unité d'allocation 7349876362857938944 et non à 4899918190390149120.Source = ". Fournisseur de données Net SqlClient"
ErrorCode = -2146232060
Classe = 21
LineNumber = 257
Nombre = 605
Procedure = "ispDisplayCount"
Serveur = "10.10.1.1"
État = 3
Que signifie cette exception? Y a-t-il une solution au problème ci-dessus?
Bien que la base de données référencée dans l'erreur ci-dessus indique tempdb, des erreurs similaires référençant le message 605 peuvent être corrigées à l'aide des réponses ci-dessous.
Msg 605, niveau 21, état 3, ligne 1
La tentative de récupération de la page logique (1: 8687634) dans la base de données 7 a échoué. Il appartient à l'unité d'allocation 72057594364821504 et non à 72057594052476928.
Si l'ID de base de données indiqué par le message d'erreur est 2
, La base de données affectée est tempdb. Une méthode pour corriger ce type de corruption dans tempdb consiste à simplement redémarrer l'instance SQL Server. Pour les ID de base de données autres que 2, suivez les recommandations ci-dessous.
Vous devrez peut-être restaurer à partir d'une sauvegarde, mais essayez ceci:
En tant que membre du rôle sysadmin, exécutez DBCC PAGE (2, 5, 65424, 3);
et recherchez la valeur Metadata: IndexId
.
0
(Segment de mémoire) ou 1
(Index clusterisé), vous devez restaurer à partir de la sauvegarde.0
Ou 1
, Vous pouvez simplement reconstruire l'index non clusterisé.Exécutez la commande DBCC et faites-nous savoir ce que vous trouvez. Vérifiez https://www.mssqltips.com/sqlservertip/1578/using-dbcc-page-to-examine-sql-server-table-and-index-data/ pour plus de détails sur le DBCC PAGE
Commande
Votre base de données est corrompue. Il est temps de restaurer à partir d'une bonne sauvegarde. Si vous n'avez pas de sauvegardes, il est temps d'en savoir plus sur L'importance de tester votre plan de récupération . Une enquête sur la fiabilité de votre matériel est également garantie, surveillez les avertissements et les erreurs dans les journaux système.
L'erreur indique que votre base de données est corrompue. La bonne nouvelle est que l'ID de base de données 2 indique qu'il s'agit de la base de données tempdb, il est donc facile de résoudre ce problème - redémarrez simplement l'instance de base de données.
Une fois que vous avez redémarré l'instance, vous devez comprendre pourquoi la corruption s'est produite. Commencez par exécuter chkdsk
sur le lecteur sur lequel se trouve le fichier problème. Ensuite, vous devrez regarder le stockage lui-même et voir s'il y a des problèmes. Cela pourrait être un problème de disque physique, des pilotes de carte HBA ou RAID, etc.
J'ai pu résoudre ce problème en effaçant les caches SQL:
DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
Apparemment, le redémarrage du service SQL aurait eu le même effet.
(via Made By SQL , reproduit ici pour aider les autres!)
Ce que vous entendriez de beaucoup de gens est " la base de données est corrompue, vous devez restaurer " sans même vous recommander de prendre quelques minutes pour le faire certains des éléments suivants; examinez vos journaux, découvrez quand le problème est survenu pour la première fois, l'erreur qui a précédé cette ligne, consultez la base de données/table à laquelle appartient la page
Dans mon cas, cette erreur a été précédée de;
Impossible de trouver l'entrée d'index dans l'ID d'index 9, de la table 629577281, dans la base de données 'XYZ'. L'index indiqué est corrompu ou il y a un problème avec le plan de mise à jour actuel
Une solution de contournement consistait à tracer l'index auquel il était fait référence et à le supprimer temporairement.
j'ai trouvé plus tard un lien Microsoft qui décrit mon problème exact et propose une solution lien
j'espère que cela aidera quelqu'un d'autre à l'avenir
Dans mon cas, tronquer et repeupler les données dans les tables concernés était la solution.
Très probablement, les données à l'intérieur des tables étaient corrompues.