3 votes

SQL Server 2005 Restaurer à partir d'une sauvegarde échoue

J'ai des fichiers .bak pour la base de données d'un projet que mon entreprise a récemment repris.

J'ai pu restaurer plusieurs des fichiers .bak, mais le plus important échoue.

Quand cela échoue, je reçois simplement une erreur générique et on me demande de vérifier le journal.

Voici l'erreur qui se produit : Message Assertion du serveur SQL : Fichier : , ligne=1443 Assertion échouée = 'pFile'. Cette erreur peut être liée au timing. Si l'erreur persiste après avoir relancé l'instruction, utilisez DBCC CHECKDB pour vérifier l'intégrité structurale de la base de données, ou redémarrez le serveur pour vous assurer que les structures de données en mémoire ne sont pas corrompues.

Je ne sais pas comment exécuter DBCC CHECKDB sur un fichier *.bak.

Toute aide serait grandement appréciée. Bien que j'aie de l'expérience avec SQL en tant que développeur, je ne suis définitivement pas un DBA. Alors imaginez que je suis un idiot. :)

Merci!

0 votes

Une question : quel pack de services est installé sur votre SQL Server 2005, s'il y en a un d'installé?

0 votes

C'est SQL 2005. Aucun Service Pack. J'allais installer le Service Pack 1

11voto

Bernie Perez Points 5091

Cette assertion se produit parce que le code de restauration a lu une page à partir de la sauvegarde mais que la page est corrompue et l'ID de fichier estampillé dans l'en-tête de la page n'existe pas dans la base de données en cours de restauration. Cela se déclenche à partir d'un fichier de code appelé bckioreq.cpp (Je possédais tout cela à l'époque où j'étais chez MS).

Le message pour exécuter DBCC CHECKDB est un message générique qui ne s'applique pas dans ce cas.

Je présume que vous restaurez une sauvegarde complète de la base de données puis une série d'autres sauvegardes différentielles et/ou de journaux ? Vous restaurez sur 2005, mais est-ce que vous restaurez une ancienne sauvegarde ?

C'est ce qu'on appelle un retail-assert dans le code - il n'y a absolument aucun moyen de contourner cela - dès que le code l'atteint, l'assertion se déclenchera et la restauration échouera. Il existe un élément de Connect pour rendre cela plus agréable mais ce n'est pas corrigé en 2008 non plus.

Cela se produit sur la sauvegarde complète que vous êtes en train de restaurer ou sur l'une des sauvegardes différentielles et/ou de journaux suivantes ? Si c'est la sauvegarde complète, il n'y a rien que vous puissiez faire - cette sauvegarde est irrécupérable. Si c'est l'une des sauvegardes ultérieures, vous pouvez restaurer tout jusqu'à cette sauvegarde mais sans inclure celle-ci.

C'est essentiellement votre réponse, je crains.

Maintenant, comment cela s'est-il produit ? (question rhétorique) Il se peut que la base de données sauvegardée soit corrompue, ou que le sous-système E/S ait corrompu la sauvegarde. Quelques choses que vous pouvez faire pour vous protéger contre cela - activez les sommes de contrôle de page dans la base de données et utilisez l'option WITH CHECKSUM sur vos sauvegardes. Cela ajoute une certaine vérification pour s'assurer que ce qui est sauvegardé n'est pas corrompu. Vous pouvez également valider vos sauvegardes de différentes manières - consultez mon article de blog à ce sujet : Importance of validating backups.

J'espère que cela vous aidera !

0 votes

+1 Merci, Paul! Je suis en train de passer en revue nos travaux de sauvegarde maintenant...

0 votes

Donc, en gros, ce que tu dis, c'est que je dois retourner auprès du cabinet qui a créé la sauvegarde et leur dire de la refaire car elle est corrompue?

0 votes

Et ouais, je suppose que c'est la sauvegarde complète. Ils ont également envoyé un translog, mais je suppose que c'est la sauvegarde complète. De plus, lorsque j'ai tenté de Restaurer en utilisant Management Studio, le nom de la base de données était listé comme "INCOMPLETE". Aurait-ce dû être mon premier signe que quelque chose n'allait pas?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X