90 votes

Erreur de restauration de la base de données du serveur SQL : le modèle spécifié n'est pas valide. (SqlManagerUI)

J'utilise SQL Server 2008 R2 Standard (version 10.50.1600.1) pour mon site Web de production et SQL Server Express edition with Advanced Services (v10.50.1600.1) pour mon hôte local comme base de données. SQL Server Express edition with Advanced Services (v10.50.1600.1) pour mon localhost comme base de données.

Il y a quelques jours, mon serveur SQL est tombé en panne et j'ai dû installer une nouvelle version 2008 R2 Express sur mon hôte local. Cela a bien fonctionné lorsque j'ai restauré d'anciennes versions de l'édition Express, mais lorsque j'ai essayé de restaurer une base de données à partir de l'édition Express, je n'ai pas réussi. .bak qui provient du serveur de production, l'erreur suivante se produit :

Erreur : Le modèle spécifié n'est pas valide. (SqlManagerUI)

et lorsque j'essaie de restaurer la base de données en utilisant la commande

Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'

Il génère une erreur différente

Msg 3154, Niveau 16, Etat 4, Ligne 1
Le jeu de sauvegarde contient une sauvegarde d'une base de données autre que la base de données "Publications" existante.
Msg 3013, Niveau 16, Etat 1, Ligne 1
RESTORE DATABASE se termine anormalement.

J'ai vérifié les versions. Elles me semblent toutes correspondre comme le montre l'image ci-dessous

Auparavant, j'ai pu restaurer une base de données de la version standard à l'édition express mais maintenant cela échoue. J'ai supprimé la base de données et j'ai essayé de la recréer. Cela ne fonctionne pas non plus.

Je ne suis pas sûr de ce que je fais mal. Je souhaiterais obtenir de l'aide à ce sujet

Le problème a été résolu car il semble que le fichier .bak était corrompu. Lorsque j'ai essayé avec un autre fichier, cela a fonctionné.

162voto

Subhash Makkena Points 499

Cela pourrait être dû à la restauration du fichier de sauvegarde de la version 2012 de SQL Server dans SQL Server 2008 R2 ou même moins.

39voto

SchmitzIT Points 4143

L'interface graphique peut parfois être capricieuse. L'erreur que vous avez obtenue en utilisant T-SQL est due au fait que vous essayez d'écraser une base de données existante, mais que vous n'avez pas spécifié d'écraser/remplacer la base de données existante. Ce qui suit pourrait fonctionner :

Use Master
Go
RESTORE DATABASE Publications
  FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak'
  WITH 
    MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
    MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
, REPLACE -- Add REPLACE to specify the existing database should be overwritten.

15voto

J'ai enfin réussi à faire disparaître cette erreur lors d'une restauration. Je suis passé à SQL2012 par frustration, mais je suppose que cela fonctionnerait encore sur 2008R2. J'ai dû utiliser les noms logiques :

RESTORE FILELISTONLY
FROM DISK = ‘location of your.bak file’

Et à partir de là, j'ai lancé une déclaration de restauration avec MOVE en utilisant des noms logiques.

RESTORE DATABASE database1
FROM DISK = '\\database path\database.bak'
WITH
MOVE 'File_Data' TO 'E:\location\database.mdf',
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf',
MOVE 'file' TO 'E:\location\database_2.ndf',
MOVE 'file' TO 'E:\location\database_3.ndf',
MOVE 'file_Log' TO 'E:\location\database.ldf'

Quand elle a été restaurée, j'ai presque pleuré de joie.

Bonne chance !

4voto

Keren Caelen Points 1460

Il peut y avoir deux raisons à ce problème :

  1. La sauvegarde a été faite sur SQL 2012 et la restauration a été faite sur SQL 2008 R2.

  2. Le support de sauvegarde est corrompu.

Si nous exécutons la commande ci-dessous, nous pouvons trouver l'erreur réelle toujours :

restore headeronly
from disk = 'C:\Users\Public\Database.bak'

Donnez l'emplacement complet de votre fichier de base de données dans le quot.

J'espère que cela vous aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X