208 votes

Restauration de la sauvegarde d'une base de données SQL Server sur une version inférieure

Comment restaurer un fichier de sauvegarde d'une base de données SQL Server de version supérieure sur un SQL Server de version inférieure ?

Utilisation de SQL Server 2008 R2 (10.50.1600) J'ai fait un fichier de sauvegarde et je veux maintenant le restaurer sur le serveur SQL de mon serveur réel. 2008 (10.00.1600) .

Lorsque j'ai essayé de restaurer la sauvegarde sur SQL Server 2008, une erreur s'est produite. Restore Failed parce que :

La base de données a été sauvegardée sur un serveur exécutant la version 10.50.1600. Cette version est incompatible avec ce serveur, qui exécute la version 10.00.1600.

Comment puis-je restaurer le fichier de sauvegarde sur ce serveur ?

0 votes

Hmm je ne suis pas sûr que cela soit possible (de la version supérieure à la version inférieure) l'autre option que vous avez est d'exporter les "données" (dans Excel, etc.) de la nouvelle version et de les importer dans l'ancienne version.

2 votes

Vous ne pouvez pas faire cela - ce n'est tout simplement pas possible. Le serveur SQL ne permet pas de "rétrograder" une base de données d'une version supérieure à une version inférieure.

39 votes

Microsoft sait tout sur SQL server (depuis qu'ils l'ont créé) et pourtant déplacer des données entre 2 versions est impossible. Je ne comprends tout simplement pas pourquoi une sorte de mode de compatibilité n'est pas disponible dans l'exportation. Comment cela peut-il être difficile ?

122voto

veljasije Points 1778

Vous pouvez utiliser la fonctionnalité appelée Exportation de données - Application de niveau supérieur qui génère .bacpac qui contient le schéma de la base de données et les données.

Sur le serveur de destination, vous pouvez utiliser Importation de données - Application de niveau 1 qui crée et alimente une nouvelle base de données à partir d'une base de données pré-créée. .bacpac fichier

Si vous voulez juste transférer le schéma de la base de données, vous pouvez utiliser Extraction de données - Application de niveau supérieur pour créer un fichier et Déployer l'application Data-Tier pour déployer le schéma de base de données créé.

J'ai essayé ce processus sur différentes versions de SQL Server, de SQL 2014 à SQL 2012 et de SQL 2014 à SQL 2008R2, et il a bien fonctionné.

10 votes

C'est une réponse qui mérite plus d'attention. Elle fonctionne en fait dans la plupart des cas. Cependant, si vous avez des utilisateurs SQL orphelins, les opérations d'exportation échoueront. Vous pouvez toujours supprimer/ajoutez ces bits manuellement pour transcender les versions de SQL.

3 votes

Je viens d'essayer ceci, pour créer une BD créée sur MSSQLEX2014 (V12) sur mon MSSQLEX2012 (V11). J'obtiens juste une erreur "Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider is not valid" sans possibilité de la modifier.

0 votes

Cela n'a pas fonctionné pour moi lorsque j'ai essayé d'exporter une base de données compatible avec 2012 de SQL2014 vers SQL2012.

82voto

Remus Rusanu Points 159382

Non, il n'est pas possible de rétrograder une base de données. 10.50.1600 est le serveur SQL 2008. R2 version. Il n'y a absolument aucun moyen de restaurer ou d'attacher cette base de données à l'instance de SQL Server 2008 sur laquelle vous essayez de restaurer (10.00.1600 est SQL Server 2008). Vos seules options sont :

  • mettre à niveau cette instance vers SQL Server 2008 R2 ou
  • restaurer la sauvegarde que vous avez sur une instance SQL Server 2008 R2, exporter toutes les données et les importer sur une base de données SQL Server 2008.

0 votes

Je ne peux pas mettre à niveau le serveur live des clients en raison de restrictions de permission. et la taille de ma base de données est supérieure à 2,5 Go, donc je ne pouvais pas créer de données script en raison d'une erreur d'exception de mémoire.

11 votes

@Gaurav Ne script pas les données - à la place, script toute la base de données (tables, procs, triggers, contraintes, etc) sans les données, créez la nouvelle base de données, puis faites un clic droit sur la base de données source, allez à "Tools", puis "Export Data" pour transférer le contenu des tables vers votre base de données.

27 votes

Je me méfie beaucoup de la réponse toute faite "il n'y a pas de solution possible" - cela signifie simplement que vous n'avez pas encore trouvé la solution. Il peut y avoir de nombreuses raisons pour lesquelles vous voulez faire cela, donc ce n'est pas une réponse utile.

39voto

Smit Patel Points 1798

Vous ne pouvez pas restaurer une base de données (ou une pièce jointe) créée dans la version supérieure dans la version inférieure. Le seul moyen est de créer un script pour tous les objets et d'utiliser le script pour générer la base de données.

enter image description here

sélectionnez "Schéma et données" - si vous voulez prendre les deux choses dans le fichier script de sauvegarde
sélectionnez Schéma uniquement - si seul le schéma est nécessaire.

enter image description here

Oui, maintenant vous avez terminé avec la création de script avec le schéma et les données de la base de données.

0 votes

On est en 2020 et c'est la meilleure réponse maintenant !

2 votes

@d.popov seulement si la base de données fait quelques gigaoctets, sinon le fichier sera trop grand pour être lu par SSMS.

38voto

Ohad Schneider Points 10485

Ne fonctionnera pas nécessairement

Travaillera

  • Génération de script. - Tâches -> Générer des scripts . Assurez-vous d'avoir défini la version cible de SQL Server souhaitée sur l'onglet Définir les options de script -> Avancé page. Vous pouvez également y choisir de copier le schéma, les données ou les deux. Notez que dans le script généré, vous devrez peut-être changer le dossier DATA pour les fichiers mdf/ldf si vous passez de non-express à express ou vice versa.

  • Services de publication de bases de données Microsoft SQL Server - est fourni avec SQL Server 2005 et supérieur, je pense. Téléchargez la dernière version à partir de ici . Conditions préalables : sqlncli.msi / sqlncli_x64.msi / sqlncli_ia64.msi , SQLServer2005_XMO.msi / SQLServer2005_XMO_x64.msi / SQLServer2005_XMO_ia64.msi (télécharger ici ).

8 votes

La génération de script n'est pas fiable pour les bases de données substantielles, à éviter si possible.

0 votes

Les deux liens en bas de page sont 404.

1 votes

Según docs.microsoft.com/fr/sql/relational-databases/databases/ l'option Copier la base de données ne fonctionnera pas car "Une base de données ne peut pas être déplacée ou copiée vers une version antérieure de SQL Server".

31voto

Ken Williams Points 459

Voici mes deux cents sur les différentes options pour réaliser cette opération :

Outils tiers : La façon la plus simple de faire le travail est probablement de créer une base de données vide sur la version inférieure, puis d'utiliser des outils tiers pour lire la sauvegarde et synchroniser la nouvelle base de données nouvellement créée avec la sauvegarde.

Le portail rouge est l'un des plus populaires mais il en existe beaucoup d'autres comme ApexSQL Diff , ApexSQL Data Diff , Adept SQL , Idera . Tous ces outils sont des outils premium mais vous pouvez faire le travail en mode d'essai ;)

Génération de scripts Comme d'autres l'ont déjà mentionné, vous pouvez toujours script la structure et les données en utilisant SSMS mais vous devez prendre en considération l'ordre d'exécution. Par défaut, les scripts d'objets ne sont pas ordonnés correctement et vous devrez prendre soin des dépendances. Cela peut être un problème si la base de données est grande et a beaucoup d'objets.

Assistant d'importation et d'exportation : Ce n'est pas une solution idéale car elle ne restaurera pas tous les objets mais seulement les tables de données mais vous pouvez l'envisager pour des corrections rapides et sales quand c'est nécessaire.

1 votes

Red Gate Sql Clone ne prend pas en charge le clonage entre différentes versions de SQL Server, signalant exactement la même erreur que j'obtiens lorsque j'essaie de le faire manuellement.

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