Come copio il database SQL Azure sul mio server di sviluppo locale?


164

Qualcuno sa come posso copiare un database SQL Azure sul mio computer di sviluppo? Vorrei smettere di pagare per avere un database di sviluppo nel cloud, ma è il modo migliore per ottenere dati di produzione. Copio il mio database di produzione in un nuovo database di sviluppo ma vorrei avere lo stesso database locale.

Eventuali suggerimenti?


2
Lo uso quasi sempre! È piccolo, gratuito, costantemente aggiornato, non installa file inutili, funziona come un incantesimo, non crea oggetti indesiderati nel database e fa esattamente ciò che dice il suo nome.
astaykov,

4
Questo è diventato notevolmente più semplice. Vedi la risposta di Atom di seguito (febbraio 2018) che spiega come utilizzare Attività => Distribuisci database ... in SSMS.
Jon Crowell,

Risposte:


129

Esistono diversi modi per farlo:

  1. Utilizzo di SSIS (SQL Server Integration Services) . Importa solo datanella tua tabella. Le proprietà della colonna, i vincoli, le chiavi, gli indici, le procedure memorizzate, i trigger, le impostazioni di sicurezza, gli utenti, gli accessi, ecc. Non vengono trasferiti. Tuttavia è un processo molto semplice e può essere fatto semplicemente eseguendo la procedura guidata in SQL Server Management Studio.
  2. Utilizzo della combinazione di script di creazione SSIS e DB . In questo modo otterrai dati e tutti i metadati mancanti che non vengono trasferiti da SSIS. Anche questo è molto semplice. Innanzitutto trasferire i dati utilizzando SSIS (vedere le istruzioni di seguito), quindi creare DB Crea script dal database SQL Azure e riprodurli sul database locale.
  3. Infine, puoi usare il servizio di importazione / esportazione in SQL Azure . Questo trasferisce i dati (con oggetti schema) nell'archivio BLOB di Azure come BACPAC. Sarà necessario un account di archiviazione di Azure e farlo nel portale Web di Azure. È semplice come premere un pulsante "Esporta" nel portale Web di Azure quando si seleziona il database che si desidera esportare. Il rovescio della medaglia è che è solo una procedura manuale, non conosco un modo per automatizzare questo tramite strumenti o script - almeno la prima parte che richiede un clic sulla pagina web.

La procedura manuale per il metodo n. 1 (utilizzando SSIS) è la seguente:

  • In SQL Server Management Studio (SSMS) creare un nuovo database vuoto sull'istanza SQL locale.
  • Scegli Importa dati dal menu contestuale (fai clic con il pulsante destro del mouse sul database -> Attività -> Importa dati ...)
  • Digitare i parametri di connessione per l'origine (SQL Azure). Selezionare ".Net Framework Data Provider per SqlServer" come provider.
  • Scegli un database locale vuoto esistente come destinazione.
  • Segui la procedura guidata: sarai in grado di selezionare i dati delle tabelle che desideri copiare. Puoi scegliere di saltare uno qualsiasi dei tavoli che non ti servono. Ad esempio, se si mantengono i registri delle applicazioni nel database, probabilmente non è necessario nel backup.

È possibile automatizzarlo creando il pacchetto SSIS e rieseguendolo ogni volta che si desidera reimportare i dati. Si noti che è possibile importare utilizzando SSIS solo in un DB pulito, non è possibile eseguire aggiornamenti incrementali nel database locale dopo averlo già fatto una volta.

Il metodo n. 2 (dati SSID più oggetti schema) è molto semplice. Prima di tutto segui i passaggi sopra descritti, quindi crea lo script di creazione del DB (fai clic con il pulsante destro del mouse sul database in SSMS, scegli Genera script -> Crea database). Quindi riprodurre nuovamente questo script sul database locale.

Il metodo n. 3 è descritto nel blog qui: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/ . Esiste un video clip con il processo di trasferimento dei contenuti DB nell'archivio BLOB di Azure come BACPAC. Successivamente è possibile copiare il file localmente e importarlo nell'istanza SQL. Il processo di importazione di BACPAC nell'applicazione di livello dati è descritto qui: http://msdn.microsoft.com/en-us/library/hh710052.aspx .


2
Funziona, solo una correzione. Nella procedura guidata di importazione / esportazione del server l'origine dati è ".Net Framework Data Provider for SqlServer"
BZink

Grande! Grazie per la correzione. Ricordo che uno dei provider ha funzionato e alcuni altri non hanno funzionato per me, ma non hanno ricordato esattamente quale.
seva titov

Non riesce per me: "Errore nell'inserimento nella colonna di sola lettura" id "'
silente

3
Il trucco per me era iniziare a replicare PK / FK / vincoli su DB vuoto, quindi disabilitare temporaneamente i vincoli durante l'importazione dei dati. Più precisamente: 1-Creare manualmente un DB di destinazione vuoto. Fare clic con il pulsante destro del mouse sul DB di origine> Attività> Genera script. File di script 3-Run su DB di destinazione vuoto (ora DB ha corretti PK / FK / vincoli, ma nessun dato). 4-Disabilita tutti i vincoli ( stackoverflow.com/a/161410 ). 5-Importa dati (tasto destro del mouse DB di destinazione> Attività> Importa dati). 6-Riattivare i vincoli. Spero che questo ti aiuti!
Mathieu Frenette,

1
@JoSmo, i metodi n. 1 e n. 2 non richiedono un account di archiviazione. Tuttavia, consiglierei di avere un account di archiviazione nello stesso datacenter del database SQL Azure. Il motivo è che è possibile utilizzarlo per i backup e il ripristino del database. Se non si dispone delle autorizzazioni amministrative per l'abbonamento di Azure, trovare qualcuno nella propria organizzazione che disponga di diritti sufficienti per creare nuovi account di archiviazione e fornire le chiavi di accesso ad esso. Dato che hai già accesso al database, non c'è motivo di negare l'accesso all'account di archiviazione.
seva titov,

66

Copia i dati del database di Azure nel database locale: ora puoi usare SQL Server Management Studio per fare come segue:

  • Connettersi al database SQL Azure.
  • Fare clic con il tasto destro sul database in Esplora oggetti.
  • Scegli l'opzione "Attività" / "Distribuisci database in SQL Azure".
  • Nel passaggio denominato "Impostazioni di distribuzione", connettere SQL Server locale e creare un nuovo database.

inserisci qui la descrizione dell'immagine

"Avanti" / "Avanti" / "Fine"


9
Fantastico👏🏻 questo non è così chiaro in SSMS poiché il "deploy database in SQL AZURE" è in qualche modo fuorviante ...
EeKay,

12
Di gran lunga la soluzione più semplice mescolata con il nome di menu di gran lunga più fuorviante. grazie per aver postato questo.
Kevin Giszewski,

Questo è più semplice, ma lo svantaggio è che non puoi scegliere quali tabelle desideri eseguire il backup e quali non desideri. Nella mia azienda, abbiamo una tabella degli allegati che contiene Gigabyte di allegati (immagini, ecc.). Normalmente non lo vogliamo perché sarà per sempre da copiare. Non possiamo escludere questa tabella usando questo metodo.
Rosdi Kasim

33

Volevo solo aggiungere una versione semplificata della risposta di Silente , poiché è quella corretta.

  1. Esportare il database SQL di Azure in un file BACPAC nell'archivio BLOB.
  2. Dall'interno di SQL Management Studio, fare clic con il tasto destro del mouse sul database, fare clic su "Importa applicazione livello dati".
  3. Ti verrà chiesto di inserire le informazioni per accedere al file BACPAC nell'archivio BLOB di Azure.
  4. Premi il prossimo paio di volte e ... Fatto!

4
Viene visualizzato un errore che indica che la destinazione non può essere sql azure v12?
Zapnologica,

2
Assicurarsi di avere una versione di SQL Server Management Studio che consente di importare che BacPac: msdn.microsoft.com/en-us/library/mt238290.aspx
Paul Bullivant

Anche con questa versione di SSMS ricevo ancora un errore a causa della destinazione Azure sql db 12.
Preza8

28

In SQL Server 2016 Management Studio, il processo per ottenere un database azzurrato sul tuo computer locale è stato semplificato.

Fare clic con il tasto destro del mouse sul database che si desidera importare, fare clic su Attività> Esporta applicazione livello dati ed esportare il database in un file .dacpac locale.

Nell'istanza del server SQL di destinazione locale, è possibile fare clic con il pulsante destro del mouse su Database> Importa applicazione livello dati e, una volta locale, è possibile eseguire operazioni come il backup e il ripristino del database.


5
Questo è. NB. "Esporta livello dati" include i dati, "Estrai livello dati" fornisce solo le definizioni
Colin

20

Penso che ora sia molto più semplice.

  1. Avviare SQL Management Studio
  2. Fare clic destro su "Database" e selezionare "Importa applicazione livello dati ..."
  3. La procedura guidata ti guiderà attraverso il processo di connessione al tuo account Azure, creando un file BACPAC e creando il tuo database.

Inoltre, utilizzo Sql Backup e FTP ( https://sqlbackupandftp.com/ ) per eseguire backup giornalieri su un server FTP sicuro. Prendo semplicemente un file BACPAC recente da lì e lo importa nella stessa finestra di dialogo, che è più veloce e più facile per creare un database locale.


9

Puoi anche consultare SQL Azure Data Sync nel portale di gestione di Windows Azure. Consente di recuperare e ripristinare un intero database, inclusi schema e dati tra SQL Azure e SQL Server.


1
SQL Data Sync non deve essere utilizzato come parte della strategia di backup in quanto vi sono diverse limitazioni. Non è una versione, esegue solo il backup dei dati e nessun altro oggetto. Per ulteriori informazioni, consultare l'argomento Domande frequenti sulla sincronizzazione dei dati SQL. ( msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx )
Shaun Luttin

1
La sincronizzazione dei dati è piuttosto terribile - anche oggi (diversi anni dopo questo post) ci sono un sacco di bug e può davvero rovinare il tuo db - ha anche molte limitazioni.
William,

5

È abbastanza facile Questo ha funzionato per me ... in termini di ottenere un database SQL di Azure sul tuo computer locale ...:

  1. Apri SQL Management Studio e connettiti a Azure SQL Server.
  2. Seleziona il database che desideri scaricare sul tuo computer locale e fai clic con il pulsante destro del mouse ... seleziona "Genera script". Segui le istruzioni ...

MA, fai attenzione nel caso in cui desideri ANCHE i DATI, così come gli script, assicurati di controllare le Opzioni avanzate prima di iniziare la generazione ... scorri verso il basso fino a "Tipi di dati da scrivere" e assicurati di avere " Schema e dati "... o qualunque cosa sia appropriata per te.

Ti darà un bel file di script SQL che può quindi essere eseguito sul tuo computer locale e creerà il database e lo popolerà con tutti i dati.

Tenete presente che nel mio caso non ho FK o altri vincoli ... inoltre, non erano molti dati.

Non lo consiglio come meccanismo di backup in generale ...


2
Devo dire che ha funzionato molto bene senza complicazioni; chiavi esterne ricreate perfettamente. Lo script SQL risultante era troppo grande per essere aperto in SSMS, o addirittura in molti editor di testo, ma sono stato in grado di utilizzare la riga di comandosqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
perlyking il

5

utilizzando msdeploy.exe

Avvertenza: impossibile msdeploy.execreare il database di destinazione da solo, quindi è necessario prima crearlo manualmente.

  1. Copia la stringa di connessione nella pagina delle proprietà del database. Regolarlo in modo che contenga una password corretta. pagina delle proprietà del database
  2. Ottieni la stringa di connessione per il DB di destinazione.
  3. Esegui in msdeploy.exequesto modo:

    "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

utilizzando SqlPackage.exe

  1. Esporta il DB azzurro in un pacchetto 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. Importa il pacchetto in un DB locale.

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


3

In SQL Server Management Studio

Fare clic con il tasto destro del mouse sul database che si desidera importare, fare clic su Attività> Esporta applicazione livello dati ed esportare il database in un file .dacpac locale.

Nell'istanza del server SQL di destinazione locale, è possibile fare clic con il pulsante destro del mouse su Database> Importa applicazione livello dati e, una volta locale, è possibile eseguire operazioni come il backup e il ripristino del database.


2

Non riesco a far funzionare l'importazione / esportazione di SSIS perché ho visualizzato l'errore "Errore durante l'inserimento nella colonna di sola lettura" id ". Né sono riuscito a far funzionare http://sqlazuremw.codeplex.com/ e i collegamenti sopra a SQL Azure Data Sync non hanno funzionato per me.

Ma ho trovato un eccellente post sul blog sui file BACPAC: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

Nel video nel post l'autore del post del blog esegue sei passaggi:

  1. Crea o vai a un account di archiviazione nel portale di gestione di Azure. È necessario l'URL BLOB e la chiave di accesso principale dell'account di archiviazione.

  2. Il post sul blog consiglia di creare un nuovo contenitore per il file bacpac e suggerisce di usare Azure Storage Explorer per questo. (NB è necessario l'URL BLOB e la chiave di accesso principale dell'account di archiviazione per aggiungerlo ad Azure Storage Explorer.)

  3. Nel portale di gestione di Azure selezionare il database che si desidera esportare e fare clic su "Esporta" nella sezione Importa ed esporta della barra multifunzione.

  4. La finestra di dialogo risultante richiede nome utente e password per il database, l'URL del BLOB e la chiave di accesso. Non dimenticare di includere il contenitore nell'URL del BLOB e di includere un nome file (ad es. Https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac ).

  5. Dopo aver fatto clic su Fine, il database verrà esportato nel file BACPAC. Questo può richiedere del tempo. È possibile visualizzare immediatamente un file a zero byte se si controlla in Esplora archivi di Azure. Questo è il servizio di importazione / esportazione che verifica che abbia accesso in scrittura all'archivio BLOB.

  6. Una volta fatto, è possibile usare Azure Storage Explorer per scaricare il file BACPAC e quindi in SQL Server Management Studio fare clic con il pulsante destro del mouse sulla cartella del database del server locale e scegliere Importa applicazione a livello di dati che avvierà la procedura guidata che legge nel file BACPAC in produrre la copia del database di Azure. La procedura guidata può anche connettersi direttamente al BLOB-store per ottenere il file BACPAC se si preferisce non copiarlo prima in locale.

L'ultimo passaggio potrebbe essere disponibile solo nell'edizione SQL Server 2012 di SQL Server Management Studio (questa è la versione in esecuzione). Non ne ho precedenti su questa macchina da controllare. Nel post del blog l'autore utilizza lo strumento da riga di comando DacImportExportCli.exe per l'importazione che credo sia disponibile su http://sqldacexamples.codeplex.com/releases


Anche se non l'ho seguito esattamente, mi ha portato nella giusta direzione. È possibile saltare il download del file bacpac e puntare all'archivio BLOB di Azure direttamente dall'interno di SQL Server Management Studio.
Josh Mouch,

2

Per quanto riguarda "Non riesco a far funzionare l'importazione / esportazione di SSIS perché ho visualizzato l'errore" Errore durante l'inserimento nella colonna di sola lettura "id". Questo può essere ottenuto specificando nella schermata di mappatura che si desidera consentire l'inserimento di elementi Identity.

Dopodiché, tutto ha funzionato bene usando la procedura guidata di importazione / esportazione SQL per copiare da Azure al database locale.

Avevo solo l'importazione / esportazione guidata SQL fornita con SQL Server 2008 R2 (funzionava bene) e Visual Studio 2012 Express per creare un database locale.




1

È possibile usare i nuovi Servizi mobili di Azure per eseguire un'esportazione notturna di backup da SQL Azure in un file .bacpac ospitato in Archiviazione di Azure. Questa soluzione è al 100% cloud, non richiede uno strumento di terze parti e non richiede un'istanza di SQL Server ospitata locale per scaricare / copiare / eseguire il backup di qualsiasi cosa.

Ci sono circa 8 passaggi diversi, ma sono tutti facili: http://geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure aspx


Sembra davvero promettente! Qualche idea se questo funzionerà con le Federazioni di Azure?
Tim Lentine

@ Mi dispiace, non lo so. Fare questo tramite i servizi mobili è una soluzione per cominciare, quindi non sarei sorpreso se non lo facesse.
Ben Barreth,

1

Uso sempre la funzione di importazione / esportazione che sembra essere la più semplice tra tutte.

Passo 1:

Ottenere il backup dall'istanza azzurrata come segue, selezionare il database → tasto destro → Attività → Esporta applicazione livello dati.

Passaggio 2: assegnare un nome specifico per il file di backup e salvarlo nella posizione desiderata

Passo 3: Ecco fatto che hai eseguito un backup del database dall'istanza sql al tuo locale. Consente di ripristinarlo sul locale. Copia il database di backup sull'unità C. Ora apri PowerShell con i diritti di amministratore e passa all'unità C.

Passaggio 4: consente di scaricare lo script PowerShell per rimuovere la chiave masterRemoveMasterKey.ps1 ha lo script sulla stessa unità in questo caso è C.

Passaggio 5: eseguire lo script come segue,. \ RemoveMasterKey.ps1 -bacpacPath "C: \ identity.bacpac"

Ecco fatto, ora puoi ripristinarlo su MSSQL 2017 nel tuo ambiente locale.

Passaggio 6: connettersi al server locale e fare clic su Database → Import-Data-Tier-Application

Passaggio 7 : assegnare un nome per il ripristino del database.

Ora vedrai tutto in verde!

Leggi il mio blog con diagrammi.



0

Il trucco per me era iniziare a replicare PK / FK / vincoli su DB vuoto, quindi disabilitare temporaneamente i vincoli durante l'importazione dei dati (consultare https://stackoverflow.com/a/161410 ).

Più precisamente:

  1. Creare manualmente un DB di destinazione vuoto;
  2. Fare clic con il tasto destro del mouse su DB di origine> Attività> Genera script;
  3. Esegui il file di script su DB di destinazione vuoto (ora DB ha corretti PK / FK / vincoli, ma nessun dato);
  4. Disabilita tutti i vincoli;
  5. Importa dati (tasto destro del mouse DB di destinazione> Attività> Importa dati);
  6. Riattivare i vincoli.

Spero che questo ti aiuti!


0

Ora è possibile utilizzare SQL Server Management Studio per eseguire questa operazione.

  • Connettersi al database SQL Azure.
  • Fare clic con il tasto destro sul database in Esplora oggetti.
  • Scegli l'opzione "Attività" / "Distribuisci database in SQL Azure".
  • Nel passaggio denominato "Impostazioni di distribuzione", selezionare la connessione al database locale.
  • "Avanti" / "Avanti" / "Fine" ...

Non ho potuto farlo perché il pulsante "Avanti" è disattivato fino a quando non seleziono un altro database di Azure come connessione di destinazione
Colin,


0

Se qualcuno ha un problema nell'importare un Bacpac di un DB che usa Azure SQL Sync , Sandrino Di Mattia ha sviluppato un'ottima e semplice applicazione per risolvere questo problema.

  1. Esporta un Bacpac del tuo DB
  2. Scarica il binario di Di Mattia
  3. Con questa app per console ripara il Bacpac scaricato
  4. Lauch SSMS
  5. Fare clic destro su "Database" e selezionare "Importa applicazione livello dati"
  6. Seleziona il Bacpac riparato.

0

Se qualcuno desidera un'opzione gratuita ed efficace (e non ti dispiace farlo manualmente) per eseguire il backup del database su Local, utilizza la funzionalità di confronto di schemi e dati integrata nell'ultima versione di Microsoft Visual Studio 2015 Community Edition (gratuita) o Professional / Premium / Ultimate edizione. Esso funziona magicamente!

Ho un account BizPark con Azure e non c'è modo di eseguire il backup del database direttamente senza pagare. Ho trovato questa opzione in VS funziona.

La risposta è tratta da https://stackoverflow.com/a/685073/6796187


0

Ciao sto usando lo strumento SQLAzureMW per la migrazione e la gestione di SQLAzure DB. Molto utile. È stato scaricato da codeplex, ma al momento non è disponibile il codeplex si spegnerà, lo stesso strumento applicativo è ora disponibile in GttHub. Questo link di seguito spiega come utilizzare questo strumento e anche disponibile l'applicazione per il download.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.