web-dev-qa-db-fra.com

Comment restaurer une base de données SQL Server 2012 vers SQL Server 2008 R2?

J'essaie de restaurer la sauvegarde prise à partir d'un SQL Server 2012 vers SQL Server 2008 R2, et une erreur est générée. 

La distribution spécifiée n'est pas valide. (SqlManagerUI)

Si vous avez une solution à cela s'il vous plaît donner un commentaire

merci. 

30
user2742047

NOTA, CERTAINES DES RÉPONSES CI-DESSUS SONT MASSIVEMENT DATUES! CELA PEUT ÊTRE FAIT AVEC TOUT DANS SQL SERVER MANAGEMENT STUDIO (SQL MS)


Il existe de nombreuses méthodes que vous pouvez adopter pour "rétrograder" une base de données, mais l'Assistant Copie de base de données est l'une de celles que j'ai trouvées récemment et que je ne crois pas trouvée dans les premières versions de SQL MS 2012. Voici comment vous pouvez copier une base de données depuis une instance de serveur 2012 vers une instance 2008 R2:

  1. Dans l'instance 2012, cliquez avec le bouton droit sur la base de données que vous souhaitez copier/"rétrograder" et sélectionnez "Tâches"> "Copier la base de données ...".

  2. "Bienvenue dans l'assistant de copie de base de données", cliquez sur [Suivant].

  3. "Sélectionner un serveur source": définissez le "serveur source" comme instance 2012 (ou l'instance de serveur de version supérieure), puis définissez l'authentification appropriée. cliquez sur Suivant]. [Remarque. les services de Server Agent doivent être en cours d'exécution]

  4. "Sélectionnez un serveur de destination:" Définissez le "serveur de destination" comme étant l'instance 2008 R2 (ou version inférieure), puis définissez l'authentification appropriée. cliquez sur Suivant]. [Remarque. les services de Server Agent doivent être en cours d'exécution]

  5. "Sélectionnez la méthode de transfert" Pour cet exemple, sélectionnez "Utiliser la méthode de l'objet de gestion SQL", cliquez sur [Suivant].

  6. Sélectionnez pour déplacer ou copier les bases de données requises, cliquez sur [Suivant].

  7. Configurez le chemin d'accès à la base de données de destination et les noms logiques, etc. Sélectionnez l'option requise si la base de données existe. Cliquez sur Suivant].

  8. Configurez le paquet de services d'intégration, cliquez sur [Suivant].

  9. Pour cet exemple, sélectionnez l'option "Exécuter immédiatement" pour les options "Planifier le package", cliquez sur [Suivant].

  10. "Complétez l'assistant", cliquez sur [Terminer] pour exécuter le package et créer la base de données "rétrogradée". 

Vous avez terminé, jours heureux. :]


Une autre méthode que j’ai trouvée est la migration de la base de données SQL Wizard, créée par Microsoft et à partir de laquelle (je ne sais pas), l’assistant ci-dessus a été créé. Obtenez-le ici http://sqlazuremw.codeplex.com/ . Pour utiliser ce package pour migrer une base de données de SQL Server 20012 vers 2008 R2, vous pouvez effectuer les opérations suivantes: 

Remarque. Microsoft a maintenant supprimé SQLAzureMW de Codeplex. Je l'ai personnellement rendu disponible ici

  1. Exécutez SQLAzureMW.exe.

  2. Sélectionnez le bouton radio Analyser/Migrer dans la partie droite de la fenêtre principale.

  3. Sélectionnez le serveur cible comme «Dernière version du service de base de données SQL (V12)». Cliquez sur Suivant].

  4. Connectez-vous à l'instance SQL Server 2012. Le nom de serveur de ma machine est “VAIOE\SQLSERVER2012”, utilisez l'authentification Windows, sélectionnez “Master DB (liste de toutes les bases de données)” dans les options de base de données et “Enregistrer les informations de connexion”. Cliquez sur [Connecter].

  5. Sélectionnez la base de données requise à migrer [utiliser la base de données GVH Report pour le moment]. Cliquez sur Suivant].

  6. Sélectionnez «Script de tous les objets de base de données».

  7. Cliquez sur [Avancé] et modifiez les options suivantes:

une. Sous Général, définissez «Serveur cible» sur «SQL Server». 

b. Sous «Options de table/vue», définissez «Script Table/Data» sur «Schéma de table avec données». Définissez «Procédures stockées du moteur de base de données» sur «True». Définissez «Fonctions de sécurité», «Procédures stockées de sécurité» et «Fonctions système» sur «Vrai». 

Cliquez sur OK]. Cliquez sur Suivant].

  1. Vérifiez vos sélections. Cliquez sur Suivant].

  2. Vous serez invité à «Prêt à générer un script?», Cliquez sur [Oui]. Cela va commencer la génération de script. Une fois que cela est fait, cliquez sur [Suivant].

  3. Vous allez maintenant avoir un autre dialogue de connexion. Cette fois, sélectionnez la base de données sur le serveur cible (l'instance SQL Server 2008 R2). Sélectionnez Base de données principale pour obtenir un choix de base de données cible. Cliquez sur [Connecter].

  4. Maintenant, il est probable que vous souhaitiez migrer vers une nouvelle base de données, cliquez donc sur [Créer une base de données].

  5. Entrez un nom de cible de base de données et laissez le “Collation” comme le “”, cela ne nous concerne pas. Cliquez sur [Créer une base de données]. Cliquez sur Suivant].

  6. Vous serez maintenant invité à «Exécuter le script sur le serveur de destination?», Cliquez sur [Oui].

  7. Cela va maintenant fonctionner et faire des tas de choses, en configurant le schéma en utilisant le script généré, mais contrairement à la méthode précédente que nous avons trouvée, les données sont chargées en bloc en utilisant BCP, ce qui est extrêmement rapide. Tout cela est également fait en interne, donc pas de génération de fichiers de script .sql massifs, etc. 

  8. Cliquez sur [Quitter]. 

Vous avez terminé. Maintenant, si vous ouvrez Management Studio et que vous vous connectez aux instances SQL Server 2012 et 2008 R2 avec lesquelles nous venons de travailler, vous pouvez constater que le schéma de la base de données source 2012 correspond à la base de données cible qui vient d'être créée. 


Les deux processus ci-dessus sont presque identiques et fournissent les mêmes fonctionnalités. Je ne voudrais pas effectuer cette dernière opération, sauf si vous devez migrer vers Azure ou que la méthode 1 échoue pour vous.

J'espère que ça aide quelqu'un.

36
MoonKnight

Faites un clic droit sur votre base de données et sélectionnez Tâches -> Générer des scripts 

Sélectionnez les éléments que vous souhaitez restaurer ou laissez simplement la base de données complète être sélectionnée par défaut. 

Maintenant, cliquez sur Suivant -> Cliquez sur Avancé et choisissez "Script pour la version du serveur" dans la "version de SSMS" que vous souhaitez restaurer, comme 2008 ou 2008 R2 ou autre.

aussi, sélectionnez 'type de données à écrire' à 'Schéma et Données'

Enfin, exécutez ce fichier .sql sur la destination ssms et modifiez le nom de la base de données dans la première utilisation de la base de données.

si la base de données n'existe pas, créez-en une et si vous rencontrez une erreur lors de l'exécution du script, exécutez-le à partir du mot-clé alter afin de compléter le bas.

12
Dheeraj Sharma

Vous ne pouvez pas, vous ne pouvez JAMAIS restaurer d'une version supérieure vers une version inférieure de SQL Server. Votre seule option est de créer un script pour la base de données, puis de transférer les données via SSIS, BCP, un serveur lié ou de créer un script pour les données.

7
SQLMenace

À: Killercam .__ Merci pour vos solutions. J'ai essayé la première solution pendant une heure, mais cela n'a pas fonctionné pour moi.

J'ai utilisé une méthode de génération de scripts pour déplacer des données de SQL Server 2012 vers SQL Server 2008 R2 en tant qu'étapes ci-dessous:

Dans le SQL Management Studio 2012

  1. Tâches -> Générer des scripts (dans le premier écran de l'assistant, cliquez sur Suivant - peut Ne pas afficher)
  2. Choisissez Script toute la base de données et tous les objets de la base de données -> Suivant
  3. Cliquez sur le bouton [Avancé] 3.1 Remplacez "Types de données dans un script] de" Schéma uniquement "par" Schéma et données " 3.2 Modifiez [Script pour la version serveur]" 2012 "en" 2008 ".
  4. Terminez les étapes suivantes de l'assistant pour créer un fichier de script
  5. Utilisez sqlcmd pour importer le fichier de script exporté dans votre SQL Server 2008 R2 5.1 Ouvrez la ligne de commande Windows 5.2 Tapez [sqlcmd -S -i chemin d'accès à votre fichier] (Ex: [sqlcmd -S localhost -i C:\mydatabase.sql])

Ça marche pour moi.

5
Hieu

Vous ne pourrez pas restaurer de 2012 à 2008. Vous pourrez utiliser un outil tel que red-gate SQL compare pour copier le schéma, etc. (à condition qu'aucun élément spécifique de 2012 ne soit utilisé). Si vous devez également copier des données, vous pouvez utiliser leur outil Data Compare , et je pense que vous obtenez un essai gratuit de 14 jours.

2
christiandev

Le seul moyen intégré de " rétrograder " d'une base de données d'une version de SQL Server à une version inférieure est la méthode la plus difficile: écrivez en script l'ensemble de la base de données, schema et data, puis exécutez le script à l'aide de la commande serveur cible. 

C'est faisable mais tend à être brutal.

1
RBarryYoung

Voici une autre option qui a fait le tour pour moi: https://dba.stackexchange.com/a/44340

Là j'ai utilisé Option B. Ce n'est pas mon idée alors tout le mérite revient à l'auteur original. Je ne fais que l'insérer ici aussi, car je sais que parfois les liens ne fonctionnent pas et qu'il est recommandé d'avoir toute l'histoire à portée de main.

Juste un conseil de ma part: résolvez d’abord les incompatibilités de schéma, le cas échéant. Puis verser les données devrait être un jeu d'enfant.


Option A: Scriptez la base de données en mode compatibilité en utilisant l'option Générer le script:

Remarque: Si vous écrivez une base de données avec un schéma et des données en fonction de la taille de vos données, le script sera volumineux et ne sera pas géré par SSMS, sqlcmd ou osql (éventuellement en Go).

 enter image description here

Option B:

Commencez par rédiger le script en commençant par les tables avec tous les index, les FK, etc., puis créez des tables vides dans la base de données de destination - option avec SCHEMA ONLY (pas de données).

Utiliser BCP pour insérer des données

I. BCP sur les données en utilisant le script ci-dessous. Définissez SSMS en mode texte et copiez la sortie générée par le script ci-dessous dans un fichier bat.

-- save below output in a bat file by executing below in SSMS in TEXT mode

-- clean up: create a bat file with this command --> del D:\BCP\*.dat 

select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
    +  QUOTENAME(DB_NAME())+ '.' /* Current Database */
    +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
    +  QUOTENAME(name)  
    +  ' out D:\BCP\'  /* Path where BCP out files will be stored */
    +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
    +  REPLACE(name,' ','') 
    + '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
from sys.tables
where is_ms_shipped = 0 and name <> 'sysdiagrams'                       /* sysdiagrams is classified my MS as UserTable and we dont want it */
/*and schema_name(schema_id) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
order by schema_name(schema_id)

II. Exécutez le fichier bat qui générera les fichiers .dat dans le dossier que vous avez spécifié.

III. Exécutez le script ci-dessous sur le serveur de destination avec SSMS en mode texte à nouveau.

--- Execute this on the destination server.database from SSMS.

--- Make sure the change the @Destdbname and the bcp out path as per your environment.

declare @Destdbname sysname
set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
select 'BULK INSERT '
/*Remember Tables must be present on destination database */ 
+ QUOTENAME(@Destdbname) + '.' 
+ QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) 
+ '.' + QUOTENAME(name) 
+ ' from ''D:\BCP\' /* Change here for bcp out path */ 
+ REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') 
+ '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )' 
+ char(10) 
+ 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... ''' 
+ char(10) + 'go'
from sys.tables
where is_ms_shipped = 0
and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
--and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
    order by schema_name(schema_id)

IV Exécutez la sortie à l'aide de SSMS pour insérer des données dans les tables.

C'est une méthode très rapide de BCP car elle utilise le mode natif.

1
Angel Naydenov

Comme cela a déjà été mentionné, vous ne pouvez pas utiliser les fonctionnalités "Sauvegarder" et "Restaurer" pour passer d'une base de données SQL Server 2012 à une base de données SQL Server 2008. Un programme que j'ai écrit, SQL Server Scripter , va cependant se connecter à une base de données SQL Server et écrire un script dans une base de données, son schéma et ses données. Il peut être cloné à partir de BitBucket et compilé avec Visual Studio 2010 ou version ultérieure (s'il s'agit d'une version ultérieure, ouvrez simplement le .csproj).

0
Jez