Comment copier la base de données SQL Azure sur mon serveur de développement local?

164

Quelqu'un sait-il comment je peux copier une base de données SQL Azure sur ma machine de développement? J'aimerais arrêter de payer pour avoir une base de données de développement dans le cloud, mais c'est le meilleur moyen d'obtenir des données de production. Je copie ma base de données de production dans une nouvelle base de données de développement mais j'aimerais avoir cette même base de données locale.

Aucune suggestion?

BZink
la source
2
J'utilise celui-là presque toujours! Il est petit, gratuit, constamment mis à jour, n'installe aucun fichier inutile, fonctionne comme un charme, ne crée aucun objet indésirable dans la base de données et fait exactement ce que son nom indique.
astaykov
4
Cela est devenu considérablement plus facile. Voir la réponse d'Atom ci-dessous (février 2018) expliquant comment utiliser Tasks => Deploy Database ... dans SSMS.
Jon Crowell

Réponses:

129

Il existe plusieurs façons de procéder:

  1. Utilisation de SSIS (SQL Server Integration Services) . Il importe uniquement datadans votre table. Les propriétés de colonne, les contraintes, les clés, les index, les procédures stockées, les déclencheurs, les paramètres de sécurité, les utilisateurs, les ouvertures de session, etc. ne sont pas transférés. Cependant, il s'agit d'un processus très simple et peut être effectué simplement en passant par l'assistant de SQL Server Management Studio.
  2. Utilisation de la combinaison de scripts de création SSIS et DB . Cela vous obtiendra des données et toutes les métadonnées manquantes qui ne sont pas transférées par SSIS. Ceci est également très simple. Commencez par transférer les données à l'aide de SSIS (voir les instructions ci-dessous), puis créez un script DB Create à partir de la base de données SQL Azure et relancez-le sur votre base de données locale.
  3. Enfin, vous pouvez utiliser le service d' importation / exportation dans SQL Azure . Cela transfère les données (avec des objets de schéma) vers Azure Blob Storage en tant que BACPAC. Vous aurez besoin d'un compte de stockage Azure et effectuez cette opération dans le portail Web Azure. C'est aussi simple que d'appuyer sur un bouton «Exporter» dans le portail Web Azure lorsque vous sélectionnez la base de données que vous souhaitez exporter. L'inconvénient est qu'il ne s'agit que d'une procédure manuelle, je ne connais pas de moyen d'automatiser cela à l'aide d'outils ou de scripts - du moins la première partie qui nécessite un clic sur la page Web.

La procédure manuelle pour la méthode n ° 1 (utilisant SSIS) est la suivante:

  • Dans Sql Server Management Studio (SSMS), créez une nouvelle base de données vide sur votre instance SQL locale.
  • Choisissez Importer des données dans le menu contextuel (clic droit sur la base de données -> Tâches -> Importer des données ...)
  • Tapez les paramètres de connexion pour la source (SQL Azure). Sélectionnez ".Net Framework Data Provider for SqlServer" comme fournisseur.
  • Choisissez la base de données locale vide existante comme destination.
  • Suivez l'assistant - vous pourrez sélectionner les données des tables que vous souhaitez copier. Vous pouvez choisir d'ignorer toutes les tables dont vous n'avez pas besoin. Par exemple, si vous conservez les journaux des applications dans la base de données, vous n'en avez probablement pas besoin dans votre sauvegarde.

Vous pouvez l'automatiser en créant un package SSIS et en le réexécutant à chaque fois que vous souhaitez réimporter les données. Notez que vous ne pouvez importer à l'aide de SSIS que dans une base de données propre, vous ne pouvez pas effectuer de mises à jour incrémentielles de votre base de données locale une fois que vous l'avez déjà fait une fois.

La méthode n ° 2 (données SSID plus objets de schéma) est très simple. Suivez d'abord les étapes décrites ci-dessus, puis créez un script de création de base de données (cliquez avec le bouton droit sur la base de données dans SSMS, choisissez Générer des scripts -> Créer une base de données). Relancez ensuite ce script sur votre base de données locale.

La méthode n ° 3 est décrite dans le blog ici: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/ . Il existe un clip vidéo avec le processus de transfert du contenu de la base de données vers le stockage Blob Azure en tant que BACPAC. Après cela, vous pouvez copier le fichier localement et l'importer dans votre instance SQL. Le processus d'importation de BACPAC vers l'application Data-Tier est décrit ici: http://msdn.microsoft.com/en-us/library/hh710052.aspx .

seva titov
la source
2
Cela fonctionne, juste une correction. Dans l'assistant d'importation / exportation de serveur, la source de données est '.Net Framework Data Provider for SqlServer'
BZink
Génial! Merci pour la correction. Je me souviens que l'un des prestataires travaillait et que d'autres ne fonctionnaient pas pour moi, mais je ne me souvenais pas exactement lequel.
seva titov
Échec pour moi: 'Échec de l'insertion dans la colonne en lecture seule "id"'
dumbledad
3
L'astuce pour moi était de commencer à répliquer les PK / FK / contraintes sur une base de données vide, puis de désactiver temporairement les contraintes lors de l'importation de données. Plus précisément: 1-Créez manuellement un DB cible vide. 2-Cliquez avec le bouton droit sur la base de données source> Tâches> Générer des scripts. 3-Exécutez le fichier de script sur la base de données cible vide (maintenant la base de données a des PK / FK / contraintes correctes, mais pas de données). 4-Désactivez toutes les contraintes ( stackoverflow.com/a/161410 ). 5-Importer des données (clic droit sur la base de données cible> Tâches> Importer des données). 6-Réactiver les contraintes. J'espère que cela t'aides!
Mathieu Frenette
1
@JoSmo, les méthodes n ° 1 et n ° 2 ne nécessitent pas de compte de stockage. Cependant, je recommanderais d'avoir un compte de stockage dans le même centre de données que votre base de données SQL Azure. La raison en est que vous pouvez l'utiliser pour les sauvegardes et la restauration de bases de données. Si vous ne disposez pas des autorisations administratives pour votre abonnement Azure, recherchez un membre de votre organisation qui dispose des droits suffisants pour créer de nouveaux comptes de stockage et vous donner des clés d'accès. Puisque vous avez déjà accès à la base de données, il n'y a aucune raison de refuser l'accès au compte de stockage.
seva titov
66

Copiez les données de la base de données Azure dans la base de données locale: vous pouvez maintenant utiliser SQL Server Management Studio pour le faire comme ci-dessous:

  • Connectez-vous à la base de données SQL Azure.
  • Cliquez avec le bouton droit sur la base de données dans l'Explorateur d'objets.
  • Choisissez l'option "Tâches" / "Déployer la base de données sur SQL Azure".
  • Dans l'étape nommée «Paramètres de déploiement», connectez SQL Server local et créez une nouvelle base de données.

entrez la description de l'image ici

"Suivant" / "Suivant" / "Terminer"

Atome
la source
9
Génial👏🏻 ce n'est pas si clair dans SSMS car le "déploiement de la base de données sur SQL AZURE" est quelque peu trompeur ...
EeKay
12
De loin la solution la plus simple mélangée avec le nom de menu de loin le plus trompeur. Merci d'avoir posté ceci.
Kevin Giszewski le
C'est le plus simple, mais l'inconvénient est que vous ne pouvez pas choisir les tables que vous souhaitez sauvegarder et celles que vous ne voulez pas. Dans mon entreprise, nous avons une table de pièces jointes qui contient des gigaoctets de pièces jointes (images, etc.). Normalement, nous ne voulons pas de cela car ce sera pour toujours à copier. Nous ne pouvons pas exclure cette table en utilisant cette méthode.
Rosdi Kasim
33

Je voulais juste ajouter une version simplifiée de la réponse de dumbledad , car c'est la bonne.

  1. Exportez la base de données Azure SQL vers un fichier BACPAC sur le stockage d'objets blob.
  2. Depuis l'intérieur de SQL Management Studio, cliquez avec le bouton droit sur votre base de données, cliquez sur "importer une application de niveau données".
  3. Vous serez invité à entrer les informations pour accéder au fichier BACPAC sur votre stockage blob Azure.
  4. Frappez ensuite quelques fois et ... C'est fait!
Josh Mouch
la source
4
J'obtiens une erreur indiquant que la cible ne peut pas être SQL Azure v12?
Zapnologica
2
Assurez-vous que vous disposez d'une version de SSMS qui importera ce BACPAC: msdn.microsoft.com/en-us/library/mt238290.aspx
Paul Bullivant
Même avec cette version de SSMS, j'obtiens toujours une erreur à cause de la cible Azure sql db 12.
Preza8
28

Dans SQL Server 2016 Management Studio, le processus d'obtention d'une base de données Azure sur votre ordinateur local a été rationalisé.

Cliquez avec le bouton droit sur la base de données que vous souhaitez importer, cliquez sur Tâches> Exporter l'application au niveau des données et exportez votre base de données vers un fichier .dacpac local.

Dans votre instance de serveur SQL cible locale, vous pouvez cliquer avec le bouton droit sur Bases de données> Importer une application de niveau données , et une fois qu'elle est locale, vous pouvez effectuer des opérations telles que la sauvegarde et la restauration de la base de données.

Adam Skinner
la source
5
Ça y est. NB. "Exporter le niveau de données" inclut les données, "Extraire le niveau de données" vous donne uniquement des définitions
Colin
20

Je pense que c'est beaucoup plus facile maintenant.

  1. Lancez SQL Management Studio
  2. Cliquez avec le bouton droit sur "Bases de données" et sélectionnez "Importer une application au niveau des données ..."
  3. L'assistant vous guidera tout au long du processus de connexion à votre compte Azure, de création d'un fichier BACPAC et de création de votre base de données.

De plus, j'utilise Sql Backup et FTP ( https://sqlbackupandftp.com/ ) pour effectuer des sauvegardes quotidiennes sur un serveur FTP sécurisé. Je tire simplement un fichier BACPAC récent à partir de là et il l'importe dans la même boîte de dialogue, ce qui est plus rapide et plus facile pour créer une base de données locale.

ThisGuy
la source
9

Vous pouvez également consulter SQL Azure Data Sync dans le portail de gestion Windows Azure. Il vous permet de récupérer et de restaurer une base de données entière, y compris le schéma et les données entre SQL Azure et SQL Server.

Voclare
la source
1
SQL Data Sync ne doit pas être utilisé dans le cadre de votre stratégie de sauvegarde car il existe plusieurs limitations. Il ne fait pas de version, il ne sauvegarde que les données et aucun autre objet. Pour plus d'informations, consultez la rubrique FAQ sur SQL Data Sync. ( msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx )
Shaun Luttin
1
Data Sync est assez horrible - même aujourd'hui (plusieurs années après cet article), il y a une tonne de bugs et cela peut vraiment gâcher votre base de données - il a également encore beaucoup de limitations.
William
5

C'est assez simple. Cela a fonctionné pour moi ... en termes de transfert d'une base de données Azure SQL sur votre machine locale ...:

  1. Ouvrez votre SQL Management Studio et connectez-vous à votre serveur Azure SQL.
  2. Sélectionnez la base de données que vous souhaitez installer sur votre machine locale, et cliquez avec le bouton droit de la souris ... sélectionnez "Générer des scripts". Suivez les invites ...

MAIS, faites attention en ce que si vous voulez ÉGALEMENT les DONNÉES, ainsi que les scripts, assurez-vous de vérifier les Options avancées avant de commencer la génération ... faites défiler jusqu'à "Types de données à script", et assurez-vous que vous avez " Schéma et données "... ou tout ce qui vous convient.

Il vous donnera un joli fichier de script SQL qui peut ensuite être exécuté sur votre machine locale et il créera la base de données et la remplira avec toutes les données.

Gardez à l'esprit que dans mon cas, je n'ai pas de FK ou d'autres contraintes ... aussi, ce n'était pas beaucoup de données.

Je ne recommande pas cela comme mécanisme de sauvegarde en général ...

Barry Theunissen
la source
2
Je dois dire que cela fonctionnait remarquablement bien sans aucun problème; clés étrangères parfaitement recréées. Le script SQL résultant était trop volumineux pour être ouvert dans SSMS, ou même dans de nombreux éditeurs de texte, mais j'ai pu utiliser la ligne de commandesqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
perlyking
5

En utilisant msdeploy.exe

Avertissement: msdeploy.exene parvient pas à créer la base de données de destination seule, vous devez donc d'abord la créer manuellement.

  1. Copiez la chaîne de connexion sur la page des propriétés de la base de données. Ajustez-le pour qu'il contienne un mot de passe correct. page des propriétés de la base de données
  2. Obtenez la chaîne de connexion pour le DB de destination.
  3. Courez msdeploy.execomme ceci:

    "c:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -dest:dbDacFx="destination_DB_connection_string",dropDestinationDatabase=true -source:dbDacFx="azure_DB_connection_string",includeData=true -verbose

En utilisant SqlPackage.exe

  1. Exportez la base de données azure vers un package bacpac.

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Export /ssn:"azure_db_server" /sdn:"azure_db_name" /su:"user_name" /sp:"password" /tf:"file.bacpac"
  2. Importez le package dans une base de données locale.

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Import /SourceFile:"file.bacpac" /TargetServerName:".\SQLEXPRESS" /TargetDatabaseName:CopyOfAzureDb
Gebb
la source
3

Dans SQL Server Management Studio

Cliquez avec le bouton droit sur la base de données que vous souhaitez importer, cliquez sur Tâches> Exporter l'application au niveau des données et exportez votre base de données vers un fichier .dacpac local.

Dans votre instance de serveur SQL cible locale, vous pouvez cliquer avec le bouton droit sur Bases de données> Importer une application de niveau données, et une fois qu'elle est locale, vous pouvez effectuer des opérations telles que la sauvegarde et la restauration de la base de données.

Ali Sufyan
la source
2

Je n'ai pas pu faire fonctionner l'importation / exportation SSIS car j'ai eu l'erreur «Échec de l'insertion dans la colonne en lecture seule« id »». Je ne pouvais pas non plus faire fonctionner http://sqlazuremw.codeplex.com/ , et les liens ci-dessus vers SQL Azure Data Sync ne fonctionnaient pas pour moi.

Mais j'ai trouvé un excellent article de blog sur les fichiers BACPAC: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

Dans la vidéo de l'article, l'auteur de l'article de blog passe par six étapes:

  1. Créez ou accédez à un compte de stockage dans le portail de gestion Azure. Vous aurez besoin de l'URL Blob et de la clé d'accès principale du compte de stockage.

  2. Le billet de blog conseille de créer un nouveau conteneur pour le fichier bacpac et suggère d'utiliser Azure Storage Explorer pour cela. (NB vous aurez besoin de l'URL Blob et de la clé d'accès principale du compte de stockage pour l'ajouter à Azure Storage Explorer.)

  3. Dans le portail de gestion Azure, sélectionnez la base de données que vous souhaitez exporter et cliquez sur `` Exporter '' dans la section Importer et exporter du ruban.

  4. Le dialogue qui en résulte requiert votre nom d'utilisateur et votre mot de passe pour la base de données, l'URL de l'objet blob et la clé d'accès. N'oubliez pas d'inclure le conteneur dans l'URL du blob et d'inclure un nom de fichier (par exemple https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac ).

  5. Après avoir cliqué sur Terminer, la base de données sera exportée vers le fichier BACPAC. Cela peut prendre un certain temps. Vous pouvez voir un fichier de zéro octet apparaître immédiatement si vous archivez l'explorateur de stockage Azure. Il s'agit du service d'importation / exportation qui vérifie qu'il dispose d'un accès en écriture au magasin d'objets blob.

  6. Une fois que cela est fait, vous pouvez utiliser l'explorateur de stockage Azure pour télécharger le fichier BACPAC, puis dans SQL Server Management Studio, cliquez avec le bouton droit sur le dossier de base de données de votre serveur local et choisissez Importer une application de niveau de données qui lancera l'assistant qui lit le fichier BACPAC pour produire la copie de votre 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.

La dernière étape n'est peut-être disponible que dans l'édition SQL Server 2012 de SQL Server Management Studio (c'est la version que j'exécute). Je n'ai pas d'anciens sur cette machine à vérifier. Dans le billet de blog, l'auteur utilise l'outil de ligne de commande DacImportExportCli.exe pour l'importation qui, je crois, est disponible sur http://sqldacexamples.codeplex.com/releases

dumbledad
la source
Bien que je n'ai pas suivi cela exactement, cela m'a conduit dans la bonne direction. Vous pouvez ignorer le téléchargement du fichier bacpac et pointer vers le stockage Blob Azure directement à partir de SQL Server Management Studio.
Josh Mouch
2

En ce qui concerne le "Je n'ai pas pu faire fonctionner l'importation / exportation SSIS car j'ai eu le message d'erreur" Échec de l'insertion dans la colonne en lecture seule "id" ". Cela peut être contourné en spécifiant dans l'écran de mappage que vous voulez autoriser l'insertion d'éléments d'identité.

Après cela, tout a bien fonctionné en utilisant l'assistant d'importation / exportation SQL pour copier d'Azure vers la base de données locale.

Je n'avais que l'assistant d'importation / exportation SQL fourni avec SQL Server 2008 R2 (fonctionnait bien) et Visual Studio 2012 Express pour créer une base de données locale.

rsh
la source
2

Vous pouvez essayer avec l'outil "SQL Database Migration Wizard". Cet outil offre une option pour importer et exporter des données depuis azure sql.

Veuillez vérifier plus de détails ici.

https://sqlazuremw.codeplex.com/

Krishna_K_Systematix
la source
1

Vous pouvez utiliser les nouveaux services mobiles Azure pour effectuer une exportation de sauvegarde nocturne de SQL Azure vers un fichier .bacpac hébergé dans le stockage Azure. Cette solution est 100% cloud, ne nécessite pas d'outil tiers et ne nécessite pas d'instance SQL Server hébergée locale pour télécharger / copier / sauvegarder quoi que ce soit.

Il y a environ 8 étapes différentes, mais elles sont toutes faciles: http://geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx

Ben Barreth
la source
Cela semble vraiment prometteur! Une idée si cela fonctionnera avec les fédérations Azure?
Tim Lentine
@Tim désolé je ne sais pas. Faire cela via les services mobiles est une solution de contournement pour commencer, donc je ne serais pas surpris si ce n'est pas le cas.
Ben Barreth
1

J'utilise toujours la fonction d'importation / exportation qui semble être la plus simple de toutes.

Étape 1:

Obtenez la sauvegarde de l'instance azure comme suit, sélectionnez la base de données → clic droit → tâches → exporter l'application de niveau de données.

Étape 2: Donnez un nom spécifique au fichier de sauvegarde et enregistrez-le à l'emplacement souhaité

Étape 3: Voilà, vous avez effectué une sauvegarde de la base de données de l'instance SQL vers votre local. Permet de le restaurer au niveau local. Copiez la base de données sauvegardée sur votre lecteur C. Maintenant, ouvrez PowerShell avec des droits d'administrateur et accédez au lecteur C

Étape 4: Permet de télécharger le script PowerShell pour supprimer la clé principale. RemoveMasterKey.ps1 a le script sur le même lecteur dans ce cas, son C.

Étape 5: Exécutez le script comme suit,. \ RemoveMasterKey.ps1 -bacpacPath "C: \ identity.bacpac"

Voilà, vous pouvez maintenant le restaurer sur MSSQL 2017 dans votre environnement local.

Étape 6: Connectez - vous à votre serveur local et cliquez sur Bases de données → Import-Data-Tier-Application

Étape 7 : Donnez un nom à votre base de données à restaurer.

Maintenant, vous verrez tout en vert!

Lisez mon blog avec des diagrammes.

Sajeetharan
la source
0

L'astuce pour moi était de commencer à répliquer les PK / FK / contraintes sur une base de données vide, puis de désactiver temporairement les contraintes lors de l'importation de données (voir https://stackoverflow.com/a/161410 ).

Plus précisément:

  1. Créez manuellement une base de données cible vide;
  2. Cliquez avec le bouton droit sur la base de données source> Tâches> Générer des scripts;
  3. Exécutez le fichier de script sur la base de données cible vide (maintenant la base de données a des PK / FK / contraintes correctes, mais pas de données);
  4. Désactivez toutes les contraintes;
  5. Importer des données (clic droit sur la base de données cible> Tâches> Importer des données);
  6. Réactivez les contraintes.

J'espère que cela t'aides!

Mathieu Frenette
la source
0

Vous pouvez maintenant utiliser SQL Server Management Studio pour ce faire.

  • Connectez-vous à la base de données SQL Azure.
  • Cliquez avec le bouton droit sur la base de données dans l'Explorateur d'objets.
  • Choisissez l'option "Tâches" / "Déployer la base de données sur SQL Azure".
  • Dans l'étape intitulée «Paramètres de déploiement», sélectionnez votre connexion à la base de données locale.
  • "Suivant" / "Suivant" / "Terminer" ...
ferhrosa
la source
Je ne pouvais pas faire cela car ce bouton «Suivant» est grisé jusqu'à ce que je sélectionne une autre base de données Azure comme connexion cible
Colin
0

Utilisez le service d'importation / exportation dans SQL Azure pour créer un fichier .bacpac.

Jetez ensuite un œil à cette méthode dans un autre article de Stack Overflow.

Restauration locale Azure SQL Database Bacpac

Jeff Bailey
la source
0

Si quelqu'un a un problème pour importer un Bacpac d'une base de données qui utilise Azure SQL Sync , Sandrino Di Mattia a développé une excellente application simple pour résoudre ce problème.

  1. Exporter un Bacpac de votre DB
  2. Télécharger le binaire de Di Mattia
  3. Avec cette application console, réparez le Bacpac téléchargé
  4. Lancement de SSMS
  5. Cliquez avec le bouton droit sur "Bases de données" et sélectionnez "Importer une application au niveau des données"
  6. Sélectionnez le Bacpac réparé.
Géza
la source
0

Si quelqu'un veut une option gratuite et efficace (et que cela ne vous dérange pas de le faire manuellement) pour sauvegarder la base de données sur Local, utilisez la fonctionnalité de comparaison de schémas et de données intégrée à la dernière version de Microsoft Visual Studio 2015 Community Edition (Free) ou Professional / Premium / Ultimate édition. Il fonctionne comme un charme!

J'ai un compte BizPark avec Azure et il n'y a aucun moyen de sauvegarder la base de données directement sans payer. J'ai trouvé cette option dans VS fonctionne.

La réponse est tirée de https://stackoverflow.com/a/685073/6796187

Crennotech
la source
0

Bonjour, j'utilise l'outil SQLAzureMW pour la migration et la gestion de SQLAzure DB. Très utile. Il a été téléchargé à partir de codeplex, mais actuellement il n'est pas disponible, le codeplex va s'arrêter, le même outil d'application est maintenant disponible dans GttHub. Ce lien ci-dessous explique comment utiliser cet outil et est également disponible en téléchargement.

https://github.com/twright-msft/azure-content/blob/master/articles/sql-database/sql-database-migration-wizard.md

Raja Subbiah
la source