Restauration locale Azure SQL Database Bacpac


130

J'ai créé une sauvegarde BACPAC de ma base de données Azure SQL à l'aide de l'option «Exporter» dans Azure Management Console.

Après avoir téléchargé ceci sur ma machine, je suis un peu coincé sur la façon dont je peux restaurer ceci sur une instance SQL Server locale. Je suis tombé sur l'outil DacImportExportCli mais je n'ai pas trouvé d'exemple de restauration locale.

Aussi, si quelqu'un a écrit un script qui fait cela (afin qu'il puisse être programmé), ce serait génial.


8
Cela peut être une chose SQL Server 2012, mais dans SQL Server Management Studio si je clique avec le bouton droit sur le dossier de base de données de mon serveur local et que je choisis Importer une application de niveau de données qui démarre un assistant qui lit le fichier BACPAC pour produire la copie de ma base de données Azure . L'assistant peut également se connecter directement au magasin d'objets blob pour obtenir le fichier BACPAC si vous préférez ne pas le copier d'abord localement.
dumbledad le

Avez-vous déjà compris cela?
Nate le

3
@dumbledad Je crois que c'est une chose SQL 2012 SSMS d'importer l'application de niveau Données, 2008R2 semble seulement avoir la capacité d'exporter des DACPAC, ne peut pas voir une option d'importation.
jamiebarrow

Réponses:


179

Cela peut être fait simplement via SQL Server Management Studio 2012

  1. Cliquez avec le bouton droit de la souris sur le nœud Connexion> Bases de données et sélectionnez " Importer l'application au niveau des données ... "
  2. Sélectionnez " Suivant " à l'étape d'introduction.
  3. entrez la description de l'image ici
  4. Parcourez ou connectez-vous à un compte de stockage où les sauvegardes sont conservées.

2
C'est parfait. L'outil RedGate peut être floconneux. Je suis heureux de voir une option prise en charge par MS.
gilly3

2
Fonctionne-t-il avec SQL Express 2012? Parce que j'ai le message d'erreur suivant: Count ne charge pas le modèle de schéma à partir du package. (Microsoft.SqlServer.Dac) ------------------------------ INFORMATIONS SUPPLÉMENTAIRES: Erreur interne. Le type de plate-forme cible interne SqlAzureDatabaseSchemaProvider ne prend pas en charge la version de fichier de schéma «2.5». (Fichier: C: \ Users \ xxxxx \ Downloads \ dbname-2013-10-10-20-2.bacpac) (Microsoft.Data.Tools.Schema.Sql)
Antoine Meltzheim

@ElTone Je viens de restaurer un bacpac directement à partir du stockage Azure vers ma base de données SQL Server Express 2012 locale à l'aide de Management Studio. Je n'ai vu aucune erreur et les données semblent être là. Quelqu'un mentionne que l'installation d'une version plus récente de SQL Server Data Tools les a aidés (mais ils ne font pas référence à Management Studio) social.msdn.microsoft.com/Forums/windowsazure/en-US/…
Juha Palomäki

@Juha Palomäki Correct: l'installation de la dernière version de SSDT a résolu le problème. Tout va mieux maintenant.
Antoine Meltzheim

4
Il semble y avoir des limites sur la taille des fichiers bacpac que vous pouvez importer avec Management Studio. Si vous frappez l'exception OutOfMemory, vérifiez la réponse de Flea sur la façon d'utiliser l'outil de ligne de commande SqlPackage.exe
Juha Palomäki

52

J'avais besoin d'exporter une base de données SQL Azure, puis de l'importer dans un serveur SQL 2008 R2 local (notez que j'utilise également Visual Studio 2010). Microsoft a certainement fait tout son possible pour en faire une tâche douloureuse, mais j'ai pu le faire en procédant comme suit:

  1. Accédez à ce lien http://msdn.microsoft.com/en-us/jj650014 et installez les outils de données SQL Server pour Visual Studio 2010

  2. Cela installera sur votre disque local. Dans mon cas, voici où il le met: C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DAC \ bin

  3. Accédez à cela via la ligne de commande ou PowerShell

  4. Vous allez vouloir exécuter le SqlPackage.exe

  5. Ouvrez ce lien pour voir une liste de toutes les options de paramètres pour SqlPackage.exe ( http://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx )

  6. Voici ma ligne de commande que je devais exécuter pour importer un fichier .bacpac dans mon serveur SQL 2008 R2 local:

    . \ SqlPackage.exe / a: Importer /sf:C:\mydatabasefile.bacpac / tdn: NorthWind / tsn: BINGBONG

/tdnest le nom de la base de données dans laquelle vous souhaitez restaurer votre fichier bacpac. /tsnest le nom de votre serveur SQL.

Vous pouvez voir toutes ces descriptions de paramètres sur le lien du n ° 5.


Cela peut être accompli encore plus facilement si vous avez installé SSMS 2012. Vous pouvez simplement utiliser l'assistant comme décrit par @Josiah ci-dessus, même avec un serveur 2008 R2.
DanO

2
J'ai passé tellement de temps à chercher cette solution que j'ai réussi à télécharger tout le studio de gestion 2014 entre-temps.
Santhos

SqlPackage était suspendu pour moi à l'étape de `` mise à jour de la base de données '' jusqu'à ce que je
supprime

10

Vous pouvez restaurer le BACPAC à l'aide des outils côté client. Les vidéos sont ici:

http://dacguy.wordpress.com/2011/09/09/importexport-services/

Les outils sont disponibles ici:

http://sqldacexamples.codeplex.com/documentation


L'outil est censé prendre en charge l'importation du bacpac dans la base de données locale. Par exemple, l'importation d'un bacpac dans une base de données à l'aide de Windows Auth ressemblerait à ceci: "DacCli -S myserver -E -D nw_restored -F northwind.bacpac -I". Cependant, la liste codeplex des assemblys requis est obsolète - aucun des liens ne fonctionnerait, donc l'outil ne fonctionnera pas (il a une condition préalable sur certains composants CTP SQL 2012).
David Airapetyan

J'ai installé tous les composants sur ma machine, j'ai donc essayé d'importer un bacpac avec DacCli - cela a fonctionné (voir la ligne de commande dans mon commentaire précédent). Il a fallu environ 20 minutes pour 100 Mo de bacpac.
David Airapetyan

7

Il semble que mes prières ont été exaucées. Redgate a lancé GRATUITEMENT son outil de sauvegarde SQL Azure aujourd'hui - http://www.red-gate.com/products/dba/sql-azure-backup/download


Plusieurs problèmes: 1. Le développement actif de SQL Azure Backup est arrêté pour l'instant (cette note s'affiche lorsque vous exécutez la dernière version de l'outil) 2. Lors de la sauvegarde directe d'Azure vers SQL local, il ne semble pas passer par le bacpac mais implémente à la place une sorte de copie de schéma / données maison. D'après mon expérience, cela a été très lent. 3. Pour construire sur le point précédent, le mécanisme est bogué - j'ai eu plusieurs tables qui n'ont pas réussi à transférer parce que l'outil ne pouvait pas détecter une clé unique
David Airapetyan

2
Cette réponse doit être mise à jour ou ne plus être la réponse acceptée. L'outil lié est depuis devenu une solution «cloud» et ne prend pas en charge les sauvegardes locales.
Timothy Strimple

2
L'outil de sauvegarde est toujours disponible sur red-gate.com/products/dba/sql-azure-backup/Discontinued
Ben Foster

5

Si vous utilisez SSMS 2012, il suffit de cliquer avec le bouton droit de la souris sur le dossier Bases de données sous un serveur dans l'Explorateur d'objets et de choisir «Importer l'application au niveau des données ...».

Il y a une bosse sur la route à surveiller: à partir du 26 mars 2013 (lorsque j'ai eu besoin de savoir comment le faire moi-même), lorsque vous exportez un .bacpac depuis Azure, il sera téléchargé sous forme de fichier .zip, pas un fichier .bacpac, et la boîte de dialogue de fichier qui est ouverte par le bouton Parcourir dans l'assistant d'importation n'affichera que * .bacpac ou . dans les filtres de fichiers, ce qui implique que .zip n'est pas pris en charge. Cependant, si vous modifiez le filtre en . , sélectionnez votre fichier .zip téléchargé et cliquez sur Suivant, l'assistant se déroulera normalement.


2
C'est la bonne réponse. Vous pouvez maintenant installer la version autonome gratuite de SSMS 2016 et elle fournit toutes ces fonctionnalités
Aaron

3

Voici un script pour restaurer un tas de fichiers bacpac à la fois: Restauration en bloc des fichiers bacpac local

cd [FOLDERPATH]
$goodlist = dir
cd 'C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin'
foreach($i in $goodlist){ $name = $i.Name; $namer = $i.Name.Substring(0, $i.Name.length - 7); .\SqlPackage.exe /a:Import /sf:[FOLDERPATH]\$name /tdn:$namer /tsn:[SERVERNAME] }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.