La restauration d'une sauvegarde par SQL Server entraîne une erreur


15

J'ai une base de données en développement (SQL Server 2005 sur Windows Server 2008) que je dois déplacer vers prod (SQL Server 2000 sur Windows Server 2003). Mon processus est le suivant:

  1. Connectez-vous au développeur, ouvrez SQL Server Management Studio
  2. Clic droit sur la base de données | Tâches | Sauvegarde. Conserver toutes les options par défaut (sauvegarde complète, etc.)
  3. Déplacez le fichier .bak localement vers prod (pas de lecteur réseau), connectez-vous à prod, ouvrez SQL Server Enterprise Manager.
  4. Clic droit sur le nœud Bases de données | Toutes les tâches | Restaurer la base de données.
  5. Modifiez la restauration en tant que base de données pour refléter le même nom de base de données.
  6. Cliquez sur le bouton radio «Depuis l'appareil». Cliquez sur «Sélectionner les appareils»
  7. Cliquez sur Restaurer à partir de: Ajouter ..., accédez au fichier .bak (petit - seulement 6 Mo)

Maintenant que je suis prêt à restaurer la base de données, je clique sur OK et j'obtiens l'erreur suivante:

"La famille de médias sur le périphérique 'E: ... bak' est incorrectement formée. SQL Server ne peut pas traiter cette famille de médias. RESTORE DATABASE se termine anormalement."

Cette erreur est immédiate.

J'ai essayé plusieurs variantes de cela - restaurer la base de données sur la machine de développement avec un nom de base de données et des noms de fichier journal différents (d'où il provient), créer une base de données vide avec le même chemin physique vers les fichiers avant et essayer de restaurer à cela, créer quelques fichiers .bak différents et vous assurer qu'ils sont vérifiés avant de les télécharger sur prod. Je sais que le répertoire des fichiers .mdf et .ldf existe sur prod, bien que les fichiers eux-mêmes n'existent pas. Si, avant de cliquer sur OK pour restaurer, accédez à l'onglet Options à la place, j'obtiens l'erreur suivante:

Erreur 3241: la famille de supports sur le périphérique «E: ... bak» est incorrectement formée. SQL Server ne peut pas traiter cette famille de supports. RESTORE FILELIST se termine anormalement.

Quelqu'un a des idées brillantes?


Je suis d'accord, je viens de passer une journée là-dessus et j'ai perdu mon temps, cela semble être un problème de compatibilité ascendante, 2k8 R2 à 2k5 dans mon cas.

Réponses:


7

Les en-têtes de sauvegarde dans MSSQL2008 sont différents de ceux dans MSSQL2005, ce qui est probablement la source de votre problème. Essayez d'exporter la base de données au lieu du paradigme de sauvegarde-restauration ou configurez MSSQL2008 sur votre serveur DEV.


4

Comme le dit Mike Dimmick - SQL 2000 ne reconnaîtra pas les sauvegardes SQL 2005 (comme Word 2000 ne reconnaîtrait pas les fichiers DOCX 2007). Par conséquent, vous devrez migrer vos données dans un format de dénominateur commun inférieur tel que les scripts SQL. Essayez l' Assistant Publication de base de données qui fait partie de la boîte à outils d'hébergement SQL Server qui génère un fichier SQL unique pour le schéma et les données.


1
Il est important de vérifier si vous avez installé SqlExpress (vous pouvez l'avoir installé sans vous en rendre compte). Il est très facile de se connecter à SqlExpress par erreur, puis de paniquer car cela ne vous permettra pas de lui restaurer une base de données 2008. C'est probablement une raison très courante pour obtenir cette erreur.
Simon

2

Vous pouvez faire avancer les sauvegardes dans la famille SQL Server, c'est-à-dire 2000 à 2005 ou 2008, mais pas en arrière: vous ne pouvez pas restaurer une sauvegarde SQL Server 2005 sur SQL Server 2000.


1

Il est possible que ce soit un problème d'autorisations empêchant la création du fichier lorsque vous essayez de restaurer. Essayez de créer une nouvelle base de données sur la cible avec le même nom que vous le souhaitez, puis restaurez par-dessus.

De plus, si vous essayez de restaurer la sauvegarde à partir d'un disque dur externe ou d'un partage réseau, essayez de copier le fichier de sauvegarde sur la machine locale avant de tenter la restauration.


1

Par défaut, il existe deux explorateurs d'objets depuis SQL Server 2005. Je suppose que vous essayez un objet serveur / sqlexpress. Essayez de restaurer sur un autre.


1

(Soupir soulagé.) Ahhhhh, c'est ça le problème.

J'ai SQL Server 2008 SP1 en cours d'exécution sur un PC distant. J'ai sauvegardé sa base de données, mais je n'ai pas pu récupérer ma copie locale de SQL Server 2008 à partir du fichier .bak.

Comme le dit [Yini], cela était dû à ma copie de SQL Server 2008 ouvrant mon instance SQL Server 2005 sur mon PC local, plutôt que mon instance SQL Server 2008. Génie.

Et je suis entièrement d'accord avec [Yini] - assez bien, vous ne pouvez pas restaurer une sauvegarde SQL Server 2008 dans une instance 2005, mais Microsoft pourrait, au moins, nous donner un message d'erreur décent.

«La famille de supports sur le périphérique« D: \ DatabaseBackup_21_02_2011.bak »est incorrectement formée. SQL Server ne peut pas traiter cette famille de supports.»

Ma sauvegarde n'a pas été mal formée. Il ne peut tout simplement pas être restauré dans une instance SQL Server 2005 , même lorsque j'exécute SQL Server 2008 SP1.

Est-ce vraiment si difficile de mettre cela dans un message d'erreur ............?


0

Quelques réflexions:

  • Quelle est la taille approximative de la base de données que vous restaurez?
    Le seul article de support sur cette erreur concerne SQL 2000 et parle de fichiers journaux volumineux. Bien que vous ne soyez pas sur SQL 2000, il peut être utile de commencer par réduire la taille des journaux s'ils sont particulièrement volumineux.

  • Êtes-vous en mesure de restaurer la base de données sur votre serveur de développement (sous un nom de base de données différent, dans différents fichiers)? Cela prouverait si le fichier lui-même est correct en ce qui concerne SQL 2005.

  • Pouvez-vous restaurer d'autres bases de données de ce serveur de développement vers Prod?


0

Salut tout le monde, comme Mike suggère que je recommanderais l'assistant de publication de base de données, il fait un beau travail.

Voici une solution de contournement que j'ai utilisée initialement que je ne suggérerais pas entièrement - cela semble un peu ghetto .


1) Créez la base de données sur prod, créez un utilisateur de base de données avec les droits appropriés, ouvrez le port sur votre pare-feu qui permet l'accès à distance
2) Dans dev dans SQL Server Management Studio, cliquez avec le bouton droit sur la base de données -> tâches -> exporter les données. Lors de la sélection de la destination, assurez-vous de spécifier le port xxx.xxx.xxx.xxx, 1764.
3) Sélectionnez toutes les tables à transférer, cliquez les 100 fois suivantes, et vous avez terminé.

AVERTISSEMENT: cela ne copie pas les procédures stockées.
AVERTISSEMENT: cela ne copie pas les identités des colonnes int

MISE À JOUR: Il semble que vous ne puissiez pas passer de 2005 à 2000. J'ai trouvé le texte du lien de publication suivant - il semble que vous pouvez utiliser mes méthodes ci-dessus, mais vous souhaitez également scripter tous les objets, puis l'exécuter sur 2000.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.