la famille de supports sur le périphérique est mal formée. SQL Server ne peut pas traiter cette famille de supports

31

J'essaie de restaurer un .BAK dans SQL Server mais j'obtiens l'erreur suivante:

Msg 3241, niveau 16, état 7, ligne 1 La famille de supports sur le périphérique «c: \ glyn \ JA.bak» est incorrectement formée. SQL Server ne peut pas traiter cette famille de supports. Msg 3013, niveau 16, état 1, ligne 1 RESTORE DATABASE se termine anormalement.

J'ai essayé de restaurer en utilisant 2012, 2008 et même 2005 mais rien ne fonctionne, j'ai utilisé la requête suivante et à travers le Tasks >> Back upmais rien ne fonctionne, voici mon SQL:

RESTORE DATABASE JA FROM DISK='c:\glyn\JA.bak'

Est-ce que quelqu'un a des suggestions? J'ai lu que le bak pouvait être corrompu, il m'a été envoyé par un autre développeur sur DVD qui travaille sur le projet.

Froussard
la source

Réponses:

12

Si vous essayez de restaurer une base de données plus récente vers une ancienne version SQL, vous pouvez toujours simplement créer manuellement la base de données dans l'ancienne version SQL et utiliser la tâche - générer des scripts et inclure les données.

Enregistrer dans un fichier -> Avancé -> Types de données à script -> Schéma et données .

Assurez-vous également de Script pour la version du serveur .

Cela peut être la seule option prise en charge si vous essayez de passer de SQL Server plus récent à une version plus ancienne.

Connexes: restaurer la sauvegarde SQL Server 2012 dans une base de données SQL Server 2008?

A. Thomas
la source
Cela ressemble à un piratage, mais je suppose que cela a fonctionné autour de ce problème dans mon cas.
jpierson
7

J'ai trouvé cela qui indique que votre fichier de sauvegarde est corrompu. Peut-être transféré par FTP en mode texte plutôt qu'en binaire.

Et ce blog qui répertorie comment quelqu'un d'autre a résolu le même problème.

Kenneth Fisher
la source
8
"répertorie comment quelqu'un d'autre a résolu le même problème", généralement sur les sites du réseau SE, vous devez publier les éléments pertinents, tels que les articles de blog; il empêche la décomposition des liens
jcollum
6

J'ai eu le même problème, mon script spécifiait le type de fichier incorrect, j'avais un .baket je spécifiais FILE = 2qui était un .trn.

USE [master]
RESTORE DATABASE [MyNewDB] FROM
DISK = N'D:\MyOldDB.bak'
WITH
    FILE = 1, -- 1 = .bak, 2 = .trn type backup
    MOVE N'MyOldDB' TO N'd:\data\MyOldDB.mdf',
    MOVE N'MyOldDB_log' TO N'd:\data\MyOldDB_log.ldf',
    NOUNLOAD,
    STATS = 5    
GO

Je ne sais pas si la commande RESTORE détecte automatiquement ou définit une valeur par défaut pour cela ...

sonjz
la source
1
L'erreur tourne autour de cela, le problème est que lorsque vous utilisez l'interface graphique pour restaurer des bases de données, SQL Managment Studio ne vous fournit pas d'informations détaillées. Si vous essayez de restaurer en utilisant le script t-sql, le serveur sql vous signalera d'utiliser l'option MOVE.
dlopezgonzalez
5

Exécutez le script suivant sur les serveurs SQL source et de destination, les versions doivent correspondre ou la destination doit avoir une version supérieure de SQL Server sinon vous ne pouvez pas restaurer le fichier .bak:

SELECT @@Version
Shadi Namrouti
la source
1
Le point sur les versions a été répété dans d'autres réponses.
Andriy M
1
@AndriyM vous avez raison, mais il manquait une action pratique. Nous ne parlons pas d'histoire ou de géographie, une commande ou un code doit être mentionné.
Shadi Namrouti
-4

supprimer le fichier corrompu et relancer la sauvegarde

votre maman
la source
4
Bonjour, Bienvenue sur le site. Nous aimons un peu plus de détails sur la façon dont cela fonctionnerait ou pourquoi.
Tom V - Team Monica