Bagaimana cara menyalin database SQL Azure ke server pengembangan lokal saya?

164

Adakah yang tahu bagaimana saya bisa menyalin database SQL Azure ke mesin pengembangan saya? Saya ingin berhenti membayar untuk memiliki basis data pengembangan di cloud, tetapi ini adalah cara terbaik untuk mendapatkan data produksi. Saya menyalin basis data produksi saya ke basis data pengembangan baru tetapi saya ingin memiliki basis data yang sama secara lokal.

Ada saran?

BZink
sumber
2
Saya menggunakan itu hampir selalu! Ini kecil, gratis, terus diperbarui, tidak menginstal file yang tidak perlu, berfungsi seperti pesona, tidak membuat objek yang tidak diinginkan dalam database, dan melakukan persis apa namanya sais.
astaykov
4
Ini menjadi lebih mudah secara dramatis. Lihat jawaban Atom di bawah (Feb 2018) yang menjelaskan cara menggunakan Tasks => Deploy Database ... di SSMS.
Jon Crowell

Jawaban:

129

Ada beberapa cara untuk melakukan ini:

  1. Menggunakan SSIS (SQL Server Integration Services) . Itu hanya mengimpor datadi meja Anda. Properti kolom, batasan, kunci, indeks, prosedur tersimpan, pemicu, pengaturan keamanan, pengguna, masuk, dll. Tidak ditransfer. Namun ini adalah proses yang sangat sederhana dan dapat dilakukan hanya dengan pergi melalui wisaya di SQL Server Management Studio.
  2. Menggunakan kombinasi skrip pembuatan SSIS dan DB . Ini akan memberi Anda data dan semua metadata yang hilang yang tidak ditransfer oleh SSIS. Ini juga sangat sederhana. Pertama-tama, transfer data menggunakan SSIS (lihat instruksi di bawah), lalu buat skrip DB Create dari database SQL Azure, dan putar ulang di database lokal Anda.
  3. Akhirnya, Anda bisa menggunakan layanan Impor / Ekspor di SQL Azure . Ini mentransfer data (dengan objek skema) ke Azure Blob Storage sebagai BACPAC. Anda akan memerlukan akun Azure Storage dan melakukan ini di portal web Azure. Ini sesederhana menekan tombol "Ekspor" di portal web Azure ketika Anda memilih database yang ingin Anda ekspor. Kelemahannya adalah ini hanya prosedur manual, saya tidak tahu cara untuk mengotomatisasi ini melalui alat atau skrip - setidaknya bagian pertama yang memerlukan klik pada halaman web.

Prosedur manual untuk metode # 1 (menggunakan SSIS) adalah sebagai berikut:

  • Di Sql Server Management Studio (SSMS) buat database kosong baru pada contoh SQL lokal Anda.
  • Pilih Impor Data dari menu konteks (klik kanan database -> Tugas -> Impor data ...)
  • Ketik parameter koneksi untuk sumber (SQL Azure). Pilih ".Net Framework Data Provider untuk SqlServer" sebagai penyedia.
  • Pilih database lokal kosong yang ada sebagai tujuan.
  • Ikuti panduan - Anda dapat memilih data tabel yang ingin Anda salin. Anda dapat memilih untuk melewati salah satu tabel yang tidak Anda butuhkan. Misalnya, jika Anda menyimpan log aplikasi dalam basis data, Anda mungkin tidak memerlukannya di cadangan.

Anda dapat mengotomatiskannya dengan membuat paket SSIS dan menjalankannya kembali kapan saja Anda ingin mengimpor kembali data. Perhatikan bahwa Anda hanya dapat mengimpor menggunakan SSIS ke DB yang bersih, Anda tidak dapat melakukan pembaruan tambahan ke database lokal Anda setelah Anda melakukannya sekali.

Metode # 2 (data SSID plus objek skema) sangat sederhana. Pertama pergi melalui langkah-langkah yang dijelaskan di atas, lalu buat skrip DB Creation (klik kanan pada database di SSMS, pilih Generate Scripts -> Database Create) Kemudian putar ulang skrip ini di basis data lokal Anda.

Metode # 3 dijelaskan dalam Blog di sini: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/ . Ada klip video dengan proses mentransfer konten DB ke penyimpanan Azure Blob sebagai BACPAC. Setelah itu Anda dapat menyalin file secara lokal dan mengimpornya ke contoh SQL Anda. Proses mengimpor BACPAC ke aplikasi Data-Tier dijelaskan di sini: http://msdn.microsoft.com/en-us/library/hh710052.aspx .

seva titov
sumber
2
Ini berfungsi, hanya satu koreksi. Dalam panduan Impor / Ekspor Server sumber Data adalah '.Net Framework Data Provider untuk SqlServer'
BZink
Bagus! Terima kasih atas koreksi. Saya ingat salah satu provider bekerja dan beberapa lainnya tidak bekerja untuk saya, tetapi tidak ingat persis yang mana.
seva titov
Gagal bagi saya: 'Gagal memasukkan ke dalam kolom hanya-baca "id"'
dumbledad
3
Triknya bagi saya adalah mulai mereplikasi PK / FK / kendala pada DB kosong, kemudian menonaktifkan sementara kendala saat mengimpor data. Lebih tepatnya: 1-Buat target DB kosong secara manual. 2-Klik kanan sumber DB> Tugas> Hasilkan Script. File skrip 3-Run pada target DB kosong (sekarang DB memiliki PK / FK / kendala yang benar, tetapi tidak ada data). 4-Nonaktifkan semua kendala ( stackoverflow.com/a/161410 ). 5-Impor data (Klik kanan target DB> Tugas> Impor Data). 6-Aktifkan kembali kendala. Semoga ini membantu!
Mathieu Frenette
1
@ Jojo, metode # 1 dan # 2 tidak memerlukan akun penyimpanan. Namun saya akan merekomendasikan untuk memiliki akun penyimpanan di pusat data yang sama dengan database SQL Azure Anda. Alasannya adalah Anda dapat menggunakannya untuk backup dan restore DB. Jika Anda tidak memiliki izin administratif untuk berlangganan Azure Anda, Temukan seseorang di organisasi Anda yang memiliki cukup hak untuk membuat akun penyimpanan baru dan memberi Anda kunci akses untuk itu. Karena Anda sudah memiliki akses ke database, tidak ada alasan untuk menolak akses ke akun penyimpanan.
seva titov
66

Salin data database Azure ke database lokal: Sekarang Anda dapat menggunakan SQL Server Management Studio untuk melakukan ini seperti di bawah ini:

  • Terhubung ke database SQL Azure.
  • Klik kanan database di Object Explorer.
  • Pilih opsi "Tugas" / "Menyebarkan Database ke SQL Azure".
  • Pada langkah bernama "Pengaturan Penempatan", sambungkan SQL Server lokal dan buat database baru.

masukkan deskripsi gambar di sini

"Selanjutnya" / "Selanjutnya" / "Selesai"

Atom
sumber
9
Luar biasaπŸ‘πŸ» ini tidak begitu jelas dalam SSMS karena "menyebarkan database ke SQL AZURE" agak menyesatkan ...
EeKay
12
Sejauh ini solusi termudah yang dicampur dengan nama menu yang paling menyesatkan. Terima kasih telah memposting ini.
Kevin Giszewski
Ini paling sederhana, tetapi kekurangannya adalah Anda tidak dapat memilih tabel mana yang ingin Anda cadangkan dan yang tidak Anda inginkan. Di perusahaan saya, kami memiliki tabel Lampiran yang berisi Gigabytes lampiran (gambar, dll.). Biasanya kami tidak menginginkan ini karena akan selamanya menyalin. Kami tidak dapat mengecualikan tabel ini menggunakan metode ini.
Rosdi Kasim
33

Saya hanya ingin menambahkan versi sederhana jawaban dumbledad , karena ini adalah jawaban yang benar.

  1. Mengekspor database Azure SQL ke file BACPAC pada penyimpanan gumpalan.
  2. Dari dalam SQL Management studio, klik kanan database Anda, klik "import aplikasi data-tier".
  3. Anda akan diminta memasukkan informasi untuk mendapatkan file BACPAC pada penyimpanan gumpalan Azure Anda.
  4. Hit berikutnya beberapa kali dan ... Selesai!
Josh Mouch
sumber
4
Saya mendapatkan pesan kesalahan yang mengatakan bahwa target tidak boleh sql azure v12?
Zapnologica
2
Pastikan Anda memiliki versi SSMS yang akan mengimpor BACPAC itu: msdn.microsoft.com/en-us/library/mt238290.aspx
Paul Bullivant
Bahkan dengan versi SSMS ini saya masih mendapatkan kesalahan karena target Azure sql db 12.
Preza8
28

Di SQL Server 2016 Management Studio, proses untuk mendapatkan basis data biru ke mesin lokal Anda telah disederhanakan.

Klik kanan pada database yang ingin Anda impor, klik Tugas> Ekspor aplikasi data-tier , dan ekspor database Anda ke file .dacpac lokal.

Dalam instance server SQL target lokal Anda, Anda dapat mengklik kanan Database> Impor aplikasi data-tier , dan setelah itu lokal, Anda dapat melakukan hal-hal seperti membuat cadangan dan mengembalikan database.

Adam Skinner
sumber
5
Ini dia. NB. "Ekspor data-tier" termasuk data, "Ekstrak data-tier" hanya memberi Anda definisi
Colin
20

Saya pikir itu jauh lebih mudah sekarang.

  1. Luncurkan SQL Management Studio
  2. Klik kanan pada "Databases" dan pilih "Impor aplikasi Data-tier ..."
  3. Wizard akan membawa Anda melalui proses menghubungkan ke akun Azure Anda, membuat file BACPAC dan membuat database Anda.

Selain itu, saya menggunakan Sql Backup dan FTP ( https://sqlbackupandftp.com/ ) untuk melakukan backup harian ke server FTP yang aman. Saya cukup menarik file BACPAC baru-baru ini dari sana dan mengimpornya dalam dialog yang sama, yang lebih cepat dan lebih mudah untuk membuat database lokal.

Orang ini
sumber
9

Anda juga dapat memeriksa Sinkronisasi Data SQL Azure di Portal Manajemen Azure Windows. Ini memungkinkan Anda untuk mengambil dan mengembalikan seluruh database, termasuk skema dan data antara SQL Azure dan SQL Server.

Voclare
sumber
1
SQL Data Sync tidak boleh digunakan sebagai bagian dari strategi cadangan Anda karena ada beberapa batasan. Itu bukan versi, itu hanya membuat cadangan data dan tidak ada objek lain. Untuk informasi lebih lanjut, lihat topik FAQ Sinkronisasi Data SQL. ( msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx )
Shaun Luttin
1
Sinkronisasi data cukup buruk - bahkan hari ini (beberapa tahun setelah posting ini) ada banyak bug dan itu benar-benar dapat mengacaukan db Anda - itu juga masih memiliki banyak keterbatasan.
William
5

Cukup mudah. Ini bekerja untuk saya ... dalam hal mendapatkan database Azure SQL ke mesin lokal Anda ...:

  1. Buka SQL Management Studio Anda dan sambungkan ke Azure SQL Server Anda.
  2. Pilih basis data yang Anda inginkan untuk masuk ke mesin lokal Anda, dan klik kanan ... pilih "Generate Scripts". Ikuti petunjuknya ...

TETAPI, berhati-hatilah karena jika Anda JUGA menginginkan DATA, juga skrip, pastikan untuk memeriksa Opsi Lanjut sebelum mulai membuat ... gulir ke bawah ke "Jenis data ke skrip", dan pastikan Anda memiliki " Skema dan data "... atau apa pun yang sesuai untuk Anda.

Ini akan memberi Anda file skrip SQL yang bagus yang kemudian dapat dijalankan pada mesin lokal Anda dan itu akan membuat database serta mengisinya dengan semua data.

Ingat bahwa dalam kasus saya, saya tidak memiliki FK atau kendala lain ... juga, itu tidak banyak data.

Saya tidak merekomendasikan ini sebagai mekanisme cadangan secara umum ...

Barry Theunissen
sumber
2
Saya harus mengatakan ini bekerja sangat baik tanpa kerepotan; kunci asing dibuat ulang dengan sempurna. Script SQL yang dihasilkan terlalu besar untuk dibuka di SSMS, atau memang di banyak editor teks, tapi saya bisa menggunakan baris perintahsqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
perlyking
5

Menggunakan msdeploy.exe

Peringatan: msdeploy.exegagal membuat database tujuan sendiri, jadi Anda harus membuatnya secara manual terlebih dahulu.

  1. Salin string koneksi pada halaman properti database. Sesuaikan sehingga berisi kata sandi yang benar. halaman properti database
  2. Dapatkan string koneksi untuk DB tujuan.
  3. Jalankan msdeploy.exeseperti ini:

    "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

Menggunakan SqlPackage.exe

  1. Ekspor DB azure ke paket 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. Impor paket ke DB lokal.

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

Silakan coba ini: http://mooneyblog.mmdbsolutions.com/index.php/2011/01/11/simple-database-backups-with-sql-azure/ .

Alternatif lain adalah Sinkronisasi Data Azure SQL .

Ada satu lagi posting blog yang saya lewati beberapa hari yang lalu tetapi tidak dapat menemukannya sekarang. Saya akan memperbarui posting ini segera setelah saya menemukannya.

Gaurav Mantri-AIS
sumber
Berikut adalah link lain yang saya sebutkan di posting saya sebelumnya: bmegias.wordpress.com/2010/09/14/...
Gaurav Mantri-AIS
3

Di SQL Server Management Studio

Klik kanan pada database yang ingin Anda impor, klik Tugas> Ekspor aplikasi data-tier, dan ekspor database Anda ke file .dacpac lokal.

Dalam instance server SQL target lokal Anda, Anda dapat mengklik kanan Database> Impor aplikasi data-tier, dan setelah itu lokal, Anda dapat melakukan hal-hal seperti membuat cadangan dan mengembalikan database.

Ali Sufyan
sumber
2

Saya tidak bisa mendapatkan impor / ekspor SSIS karena saya mendapatkan kesalahan 'Gagal memasukkan ke dalam kolom read-only "id"'. Saya juga tidak dapat mengaktifkan http://sqlazuremw.codeplex.com/ , dan tautan di atas ke Sinkronisasi Data SQL Azure tidak berfungsi untuk saya.

Tapi saya menemukan posting blog yang sangat baik tentang file BACPAC: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

Dalam video dalam posting, penulis posting blog menjalankan melalui enam langkah:

  1. Buat atau buka akun penyimpanan di Portal Manajemen Azure. Anda memerlukan Blob URL dan kunci akses utama dari akun penyimpanan.

  2. Posting blog menyarankan membuat wadah baru untuk file bacpac dan menyarankan menggunakan Azure Storage Explorer untuk itu. (NB Anda akan memerlukan Blob URL dan kunci akses utama dari akun penyimpanan untuk menambahkannya ke Azure Storage Explorer.)

  3. Di Portal Manajemen Azure pilih basis data yang ingin Anda ekspor dan klik 'Ekspor' di bagian Impor dan Ekspor pita.

  4. Dialog yang dihasilkan memerlukan nama pengguna dan kata sandi Anda untuk database, URL gumpalan, dan kunci akses. Jangan lupa untuk memasukkan wadah di blob URL dan memasukkan nama file (mis. Https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac ).

  5. Setelah Anda mengklik Selesai, basis data akan diekspor ke file BACPAC. Ini bisa memakan waktu cukup lama. Anda mungkin melihat file nol byte muncul segera jika Anda memeriksa di Azure Storage Explorer. Ini adalah Layanan Impor / Ekspor yang memeriksa apakah ia memiliki akses tulis ke toko gumpalan.

  6. Setelah selesai, Anda dapat menggunakan Azure Storage Explorer untuk mengunduh file BACPAC dan kemudian di SQL Server Management Studio klik kanan folder database server lokal Anda dan pilih Impor Aplikasi Data Tier yang akan memulai wizard yang membaca wacana yang membaca di file BACPAC untuk menghasilkan salinan basis data Azure Anda. Wizard juga dapat terhubung langsung ke blob-store untuk mendapatkan file BACPAC jika Anda lebih suka tidak menyalinnya secara lokal terlebih dahulu.

Langkah terakhir mungkin hanya tersedia di SQL Server Management Studio edisi SQL Server 2012 (itulah versi yang saya jalankan). Saya tidak punya yang sebelumnya pada mesin ini untuk memeriksa. Dalam posting blog penulis menggunakan alat baris perintah DacImportExportCli.exe untuk impor yang saya percaya tersedia di http://sqldacexamples.codeplex.com/releases

dumbledad
sumber
Meskipun saya tidak mengikuti ini persis, itu membawa saya ke arah yang benar. Anda dapat melewati unduhan file bacpac dan arahkan ke penyimpanan Azure Blob langsung dari dalam SQL Server Management Studio.
Josh Mouch
2

Mengenai "Saya tidak bisa mendapatkan impor / ekspor SSIS karena saya mendapatkan kesalahan 'Gagal memasukkan ke dalam kolom read-only" id "'. Ini bisa didapat dengan menentukan di layar pemetaan yang ingin Anda lakukan. memungkinkan elemen Identity untuk dimasukkan.

Setelah itu, semuanya bekerja dengan baik menggunakan wizard Impor / Ekspor SQL untuk menyalin dari Azure ke database lokal.

Saya hanya punya SQL Impor / Ekspor Wizard yang datang dengan SQL Server 2008 R2 (berfungsi dengan baik), dan Visual Studio 2012 Express untuk membuat database lokal.

rsh
sumber
2

Anda dapat mencoba dengan alat "SQL Database Migration Wizard". Alat ini menyediakan opsi untuk mengimpor dan mengekspor data dari azure sql.

Silakan periksa lebih detail di sini.

https://sqlazuremw.codeplex.com/

Krishna_K_Systematix
sumber
1

Anda bisa menggunakan Layanan Seluler Azure baru untuk melakukan ekspor cadangan malam hari dari SQL Azure ke file .bacpac yang dihosting di Azure Storage. Solusi ini adalah cloud 100%, tidak memerlukan alat pihak ke-3 dan tidak memerlukan turunan SQL Server lokal untuk mengunduh / menyalin / mencadangkan apa pun.

Ada sekitar 8 langkah berbeda, tapi semuanya mudah: http://geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx

Ben Barreth
sumber
Ini terlihat sangat menjanjikan! Adakah ide jika ini akan bekerja dengan Azure Federations?
Tim Lentine
@Tim maaf saya tidak tahu. Melakukan ini melalui Layanan Seluler adalah solusi untuk memulai, jadi saya tidak akan terkejut jika tidak.
Ben Barreth
1

Saya selalu menggunakan Fitur Impor / Ekspor yang tampaknya paling mudah di antara semuanya.

Langkah 1:

Dapatkan cadangan dari instance biru sebagai berikut, Pilih database β†’ Klik kanan β†’ Tugas β†’ Ekspor Aplikasi Data Tier.

Langkah 2: Berikan nama spesifik untuk file cadangan dan simpan di lokasi yang Anda inginkan

Langkah 3: Itu saja Anda telah mengambil cadangan dari database dari sql instance ke lokal Anda. Mari mengembalikannya ke lokal. Salin database yang dicadangkan ke drive C Anda. Sekarang buka PowerShell dengan hak administrator dan navigasikan ke drive C

Langkah 4: Mari unduh skrip powershell untuk menghapus master keyRemoveMasterKey.ps1 memiliki skrip pada drive yang sama dalam hal ini C.

Langkah 5: Jalankan skrip sebagai berikut,. \ RemoveMasterKey.ps1 -bacpacPath "C: \ identity.bacpac"

Itu saja, sekarang Anda dapat mengembalikannya di MSSQL 2017 di lingkungan lokal Anda.

Langkah 6: Sambungkan ke server lokal Anda, dan klik Databases β†’ Import-Data-Tier-Application

Langkah 7 : Berikan nama untuk dipulihkan oleh basis data Anda.

Sekarang Anda akan melihat semuanya berwarna hijau!

Baca blog saya dengan diagram.

Sajeetharan
sumber
0

Trik bagi saya adalah mulai mereplikasi PK / FK / kendala pada DB kosong, kemudian menonaktifkan sementara kendala saat mengimpor data (lihat https://stackoverflow.com/a/161410 ).

Lebih tepatnya:

  1. Buat target DB kosong secara manual;
  2. Klik kanan sumber DB> Tugas> Hasilkan Skrip;
  3. Jalankan file skrip pada target DB kosong (sekarang DB memiliki PK / FK / kendala yang benar, tetapi tidak ada data);
  4. Nonaktifkan semua kendala;
  5. Mengimpor data (Klik kanan target DB> Tugas> Impor Data);
  6. Aktifkan kembali kendala.

Semoga ini membantu!

Mathieu Frenette
sumber
0

Sekarang Anda dapat menggunakan SQL Server Management Studio untuk melakukan ini.

  • Terhubung ke database SQL Azure.
  • Klik kanan database di Object Explorer.
  • Pilih opsi "Tugas" / "Menyebarkan Database ke SQL Azure".
  • Pada langkah bernama "Pengaturan Penempatan", pilih koneksi database lokal Anda.
  • "Selanjutnya" / "Selanjutnya" / "Selesai" ...
ferhrosa
sumber
Saya tidak bisa melakukan ini karena tombol "Next" berwarna abu-abu sampai saya memilih database Azure lain sebagai koneksi target
Colin
0

Gunakan layanan Impor / Ekspor di SQL Azure untuk membuat file .bacpac.

Kemudian lihat metode ini di artikel Stack Overflow lainnya.

Azure SQL Database Bacpac Pemulihan Lokal

Jeff Bailey
sumber
0

Jika ada yang memiliki masalah untuk mengimpor Bacpac dari DB yang menggunakan Azure SQL Sync , Sandrino Di Mattia mengembangkan aplikasi sederhana yang bagus untuk menyelesaikan ini.

  1. Ekspor Bacpac dari DB Anda
  2. Biner Dowload Di Mattia
  3. Dengan aplikasi konsol ini memperbaiki Bacpac yang diunduh
  4. Lauch SSMS
  5. Klik kanan pada "Database" dan pilih "Impor Aplikasi Data-tier"
  6. Pilih Bacpac yang diperbaiki.
Gza
sumber
0

Jika ada yang menginginkan opsi gratis dan efektif (dan tidak keberatan melakukannya secara manual) untuk membuat cadangan basis data ke Lokal, maka gunakan skema dan fungsi perbandingan data yang dibangun dalam versi terbaru Microsoft Visual Studio 2015 Edisi Komunitas (Gratis) atau Profesional / Premium / Ultimate edisi. Itu bekerja seperti pesona!

Saya memiliki akun BizPark dengan Azure dan tidak ada cara untuk mem-backup database secara langsung tanpa membayar. Saya menemukan opsi ini dalam karya VS.

Jawaban diambil dari https://stackoverflow.com/a/685073/6796187

Crennotech
sumber