web-dev-qa-db-fra.com

SQL Server Restaurer une sauvegarde des résultats dans une erreur

J'ai une base de données dans Dev (SQL Server 2005 sur Windows Server 2008) que j'ai besoin de passer à ProD (SQL Server 2000 sur Windows Server 2003). Mon processus est le suivant:

  1. Connectez-vous à Dev, Ouvrez SQL Server Management Studio
  2. Faites un clic droit sur la base de données | Tâches | Sauvegarde. Gardez toutes les options par défaut (sauvegarde complète, etc.)
  3. Déplacez le fichier .bak localement pour produire (pas de lecteur réseau), connectez-vous à prod, Ouvrez SQL Server Enterprise Manager.
  4. Clic droit sur les bases de données noeud | 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 la base de données.
  6. Cliquez sur le bouton radio 'de l'appareil'. Cliquez sur 'Sélectionner des périphériques'
  7. Cliquez sur Restaurer depuis: Ajouter ..., accédez au fichier .bak (petit - seulement 6 Mo)

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

"La famille des médias sur l'appareil" E: ... Bak "est formée de manière incorrecte. SQL Server ne peut pas traiter cette famille de médias. La base de données de restauration se termine anormalement."

Cette erreur est immédiate.

J'ai essayé quelques variantes différentes de ceci - restauration de la machine à DB à DB avec un nom de DB différent et des noms de fichiers de journaux de DB (où il est originaire), créant une base de données vide avec le même chemin physique pour les fichiers avant et essayer de restaurer à cela, Faire quelques fichiers .bak différents et s'assurer qu'ils sont vérifiés avant de les télécharger pour prod. Je sais pour un fait 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, allez à l'onglet Options plutôt que j'obtiens l'erreur suivante:

Erreur 3241: La famille des médias sur le périphérique 'E: ... BAK' est formée de manière incorrecte. SQL Server ne peut pas traiter cette famille de médias. Restaurer le filélateur se termine anormalement.

Quelqu'un a des idées lumineuses?

15
Mario

Les en-têtes de sauvegarde dans MSSQL2008 sont différents de ceux de MSSQL2005, 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.

7
Thunder3

Vous pouvez déplacer des sauvegardes en avant 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.

2
Mike Dimmick

Il est possible que ce soit une question d'autorisations en tenant compte du fichier d'être créé 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 souhaitez, puis de la restauration sur le 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
Ryan Roper

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

1
Nagaraju

(Soupain Simple.) Ahhhhh, c'est 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 obtenir mon local Copie de SQL Server 2008 pour restaurer à partir du fichier .bak.

Comme [Yini] dit, c'était à ma copie de SQL Server 2008 ouvrant mon SQL Server 2005 instance sur mon PC local, plutôt que mon serveur SQL Instance 2008. Génie.

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

"La famille des médias sur le périphérique" D:\Beatan Beatan Backackup_21_02_2011.bak "est formée de manière incorrecte. SQL Server ne peut pas traiter cette famille de médias."

Ma sauvegarde n'était pas Formé de manière incorrecte. Il ne peut tout simplement pas être restauré dans une instance SQL Server 2005 SQL Server , même lorsque j'exécute SQL Server 2008 SP1.

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

1
Mike Gledhill

Quelques pensées:

  • Envers quelle taille est la base de données que vous restaurez?
    [.____] Le seul Article de support sur cette erreur est pour SQL 2000 et parle des fichiers journaux volumineux. Pendant que vous n'êtes pas sur SQL 2000, vous pouvez vous aider à essayer de réduire d'abord la taille des journaux si elles sont particulièrement grandes.

  • Êtes-vous capable de restaurer la base de données sur votre serveur DEV (comme nom de dB différent, à différents fichiers)? Cela prouverait si le fichier lui-même est bien jusqu'à présent que SQL 2005 est concerné.

  • Êtes-vous en mesure de restaurer des autres bases de données de ce serveur de dev?

0
Rory

Hé 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 initialement utilisée que je ne suggérerais pas entièrement - il semble un peu ghetto .


[.____] 1) Créez la base de données sur PROD, créez un utilisateur de DB avec des droits appropriés, ouvrez le port de votre pare-feu qui permet un accès à distance
2) de Dev dans SQL Server Management Studio, cliquez avec le bouton droit de la souris sur les données DB -> Tâches -> Exporter des données. Lorsque vous sélectionnez la destination, assurez-vous de spécifier le port xxx.xxx.xxx.xxx, 1764.
[.____] 3) Sélectionnez toutes les tables à transférer, cliquez sur Next 100 fois et vous avez terminé.

[.____] AVERTISSEMENT: Cela ne copie pas sur les procédures stockées.
[.____] AVERTISSEMENT: cela ne copie pas sur les identités pour les colonnes int

Mise à jour: On dirait que vous ne pouvez pas aller de 2005 à 2000. J'ai trouvé le message suivant texte de liaison - Il semble que vous puissiez utiliser mes méthodes ci-dessus, mais vous souhaitez également scripter tous les objets, puis exécuter que sur 2000.

0
Mario