SQL Azure veritabanını yerel geliştirme sunucuma nasıl kopyalarım?


164

SQL Azure veritabanını geliştirme makineme nasıl kopyalayabileceğimi bilen var mı? Bulutta bir geliştirme veritabanına sahip olmak için ödeme yapmayı bırakmak istiyorum, ancak üretim verilerini almanın en iyi yolu. Üretim veritabanımı yeni bir geliştirme veritabanına kopyalarım ama aynı veritabanının yerel olmasını istiyorum.

Baska öneri?


2
Bunu neredeyse her zaman kullanıyorum! Küçük, ücretsiz, sürekli güncellenir, gereksiz dosyaları yüklemez, cazibe gibi çalışır, veritabanında istenmeyen nesneler oluşturmaz ve adının tam olarak ne yaptığını yapar.
astaykov

4
Bu çok daha kolay hale geldi. Atom'un SSMS'de Görevler => Veritabanını Dağıtma ... yönteminin nasıl kullanılacağını açıklayan aşağıdaki Atom yanıtına (Şubat 2018) bakın .
Jon Crowell

Yanıtlar:


129

Bunu yapmanın birden çok yolu vardır:

  1. SSIS (SQL Server Entegrasyon Hizmetleri) kullanma . Yalnızca datatablonuzdan içe aktarır . Sütun özellikleri, kısıtlamaları, anahtarları, dizinleri, saklı yordamları, tetikleyicileri, güvenlik ayarlarını, kullanıcıları, oturumları vb. Aktarmaz. Ancak bu çok basit bir işlemdir ve SQL Server Management Studio'daki sihirbazdan geçerek yapılabilir.
  2. SSIS ve DB oluşturma komut dosyalarının birleşimini kullanma . Bu size SSIS tarafından aktarılmayan verileri ve tüm eksik meta verileri sağlar. Bu da çok basit. Önce SSIS kullanarak veri aktarın (aşağıdaki talimatlara bakın), sonra SQL Azure veritabanından DB Create komut dosyası oluşturun ve yerel veritabanınızda yeniden oynatın.
  3. Son olarak, SQL Azure'da İçe / Dışa Aktar hizmetini kullanabilirsiniz . Bu, verileri (şema nesneleriyle birlikte) BACPAC olarak Azure Blob Depolama'ya aktarır. Bir Azure Depolama hesabına ihtiyacınız olacak ve bunu Azure web portalında yapacaksınız. Dışa aktarmak istediğiniz veritabanını seçtiğinizde Azure web portalında "Dışa Aktar" düğmesine basmak kadar basittir. Dezavantajı, sadece manuel prosedürdür, bunu araçlar veya komut dosyaları aracılığıyla otomatikleştirmenin bir yolunu bilmiyorum - en azından web sayfasında bir tıklama gerektiren ilk bölüm.

Yöntem 1 (SSIS kullanarak) için manuel prosedür aşağıdaki gibidir:

  • Sql Server Management Studio'da (SSMS) yerel SQL örneğinizde yeni boş veritabanı oluşturun.
  • Bağlam menüsünden Verileri İçe Aktar'ı seçin (veritabanına sağ tıklayın -> Görevler -> Verileri içe aktar ...)
  • Kaynak için bağlantı parametrelerini yazın (SQL Azure). Sağlayıcı olarak "SqlServer için Net Framework Veri Sağlayıcısı" nı seçin.
  • Hedef olarak mevcut boş yerel veritabanını seçin.
  • Sihirbazı takip edin - kopyalamak istediğiniz tablo verilerini seçebilirsiniz. İhtiyacınız olmayan tablolardan herhangi birini atlamayı seçebilirsiniz. Örneğin, uygulama günlüklerini veritabanında tutarsanız, büyük olasılıkla yedeklemenize ihtiyacınız yoktur.

Verileri yeniden almak istediğinizde SSIS paketi oluşturarak ve yeniden yürüterek otomatikleştirebilirsiniz. SSIS kullanarak yalnızca temiz bir DB'ye aktarabileceğinizi, daha önce bir kez yaptıktan sonra yerel veritabanınızda artımlı güncellemeler yapamayacağınızı unutmayın.

Yöntem # 2 (SSID verileri artı şema nesneleri) çok basittir. Öncelikle yukarıda açıklanan adımları uygulayın, ardından DB Oluşturma komut dosyası oluşturun (SSMS'de veritabanına sağ tıklayın, Komut Dosyaları Oluştur -> Veritabanı Oluştur'u seçin). Ardından bu komut dosyasını yerel veritabanınızda yeniden oynatın.

Yöntem # 3 , buradaki Blog'da açıklanmıştır: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/ . DB içeriklerini BACPAC olarak Azure Blob depolama birimine aktarma işlemine sahip bir video klip var. Bundan sonra dosyayı yerel olarak kopyalayabilir ve SQL örneğinize alabilirsiniz. BACPAC'ı Veri Katmanı uygulamasına içe aktarma işlemi burada açıklanmaktadır: http://msdn.microsoft.com/en-us/library/hh710052.aspx .


2
Bu işe yarıyor, sadece bir düzeltme. Sunucu Alma / Verme sihirbazında Veri kaynağı 'SqlServer için Net Framework Veri Sağlayıcısı'
BZink

Harika! Düzeltme için teşekkürler. Sağlayıcılardan birinin çalıştığını ve bazılarının benim için çalışmadığını hatırlıyorum, ancak tam olarak hangisini hatırlamıyorum.
seva titov

Benim için başarısız oldu: '
Salt

3
Benim için püf noktası boş DB'deki PK'ları / FK'leri / kısıtlamaları çoğaltmaya başlamak, ardından veri içe aktarırken kısıtlamaları geçici olarak devre dışı bırakmaktı. Daha kesin olarak: 1-Boş hedef DB'yi manuel olarak oluşturun. 2-Kaynak DB> Görevler> Komut Dosyaları Oluştur'a sağ tıklayın. 3-Komut dosyasını boş hedef DB'de çalıştırın (şimdi DB'nin doğru PKs / FKs / kısıtlamaları var, ancak veri yok). 4-Tüm kısıtlamaları devre dışı bırakın ( stackoverflow.com/a/161410 ). 5-Verileri içeri aktar (Hedef DB> Görevler> Verileri İçeri Aktar'a sağ tıklayın). 6-Kısıtlamaları yeniden etkinleştirin. Bu yardımcı olur umarım!
Mathieu Frenette

1
@JoSmo, yöntem # 1 ve # 2 depolama hesabı gerektirmez. Ancak SQL Azure veritabanınızla aynı veri merkezinde bir depolama hesabına sahip olmanızı öneririm. Nedeni DB yedeklemeleri ve geri yükleme için kullanabilirsiniz. Azure aboneliğiniz için yönetici izinleriniz yoksa, kuruluşunuzda yeni depolama hesapları oluşturmak için yeterli haklara sahip olan ve size erişim anahtarları veren birini bulun. Veritabanına zaten erişiminiz olduğundan, depolama hesabına erişimi reddetmek için hiçbir neden yoktur.
seva titov

66

Azure veritabanı verilerini yerel veritabanına kopyalayın: Şimdi bunu yapmak için SQL Server Management Studio'yu kullanabilirsiniz:

  • SQL Azure veritabanına bağlanın.
  • Nesne Gezgini'nde veritabanını sağ tıklatın.
  • "Görevler" / "Veritabanını SQL Azure'a Dağıt" seçeneğini seçin.
  • "Dağıtım Ayarları" adlı adımda, yerel SQL Server'ı bağlayın ve Yeni veritabanı oluşturun.

resim açıklamasını buraya girin

"Sonraki" / "Sonraki" / "Son"


9
"SQL AZURE için veritabanı dağıtmak" biraz yanıltıcı olduğu için Awesome👏🏻 bu SSMS çok net değil ...
EeKay 17:18

12
Şimdiye kadar en kolay çözüm, en yanıltıcı menü adıyla karıştırıldı. Bunu gönderdiğiniz için teşekkür ederiz.
Kevin Giszewski

Bu en basit, ancak dezavantajı, hangi tabloları yedeklemek istediğinizi ve hangilerini istemediğinizi seçememenizdir. Şirketimde, Gigabyte ekleri (resimler vb.) İçeren bir Ek tablomuz var. Normalde bunu sonsuza kadar kopyalayacağımız için istemiyoruz. Bu yöntemi bu yöntemi kullanarak hariç tutamayız.
Rosdi Kasım

33

Dumbledad'ın cevabının basitleştirilmiş bir versiyonunu eklemek istedim , çünkü doğru olanı.

  1. Azure SQL Veritabanı'nı blob depolamadaki bir BACPAC dosyasına verin.
  2. SQL Management Studio'nun içinden veritabanınızı sağ tıklayın ve "veri katmanı uygulamasını içe aktar" ı tıklayın.
  3. Azure blob depolama alanınızdaki BACPAC dosyasına ulaşmak için bilgileri girmeniz istenir.
  4. Sonraki birkaç kez vurmak ve ... Bitti!

4
Hedef sql azure v12 olamaz söyleyerek bir hata alıyorum?
Zapnologica

2
BACPAC'ı içe aktaracak bir SSMS sürümünüz olduğundan emin olun: msdn.microsoft.com/en-us/library/mt238290.aspx
Paul Bullivant


28

SQL Server 2016 Management Studio'da yerel makinenize masmavi bir veritabanı alma işlemi kolaylaştırılmıştır.

Almak istediğiniz veritabanına sağ tıklayın, Görevler> Veri katmanı uygulamasını dışa aktar'a tıklayın ve veritabanınızı yerel bir .dacpac dosyasına aktarın.

Yerel hedef SQL sunucusu örneğinizde, Veritabanları> Veri katmanı uygulamasını içe aktar'a sağ tıklayabilir ve yerel olduktan sonra, yedekleme ve veritabanını geri yükleme gibi şeyleri yapabilirsiniz.


5
Budur. NB. "Veri katmanını dışa aktar" verileri içerir, "Veri katmanını ayıkla" size yalnızca tanımlar verir
Colin

20

Sanırım şimdi çok daha kolay.

  1. SQL Management Studio'yu başlatın
  2. "Veritabanları" na sağ tıklayın ve "Veri katmanı uygulamasını içe aktar ..." ı seçin.
  3. Sihirbaz, Azure hesabınıza bağlanma, bir BACPAC dosyası oluşturma ve veritabanınızı oluşturma işlemlerini gerçekleştirir.

Ayrıca, güvenli bir FTP sunucusuna günlük yedeklemeler yapmak için Sql Yedekleme ve FTP ( https://sqlbackupandftp.com/ ) kullanıyorum. Ben sadece yeni bir BACPAC dosyasını oradan alıyorum ve aynı iletişim kutusunda içe aktarıyorum, ki bu da yerel bir veritabanı oluşturmak için daha hızlı ve daha kolay.


9

SQL Azure Data Sync'i Windows Azure Yönetim Portalı'nda da kontrol edebilirsiniz . SQL Azure ve SQL Server arasındaki şema ve veriler dahil tüm veritabanını almanıza ve geri yüklemenize olanak tanır.


1
SQL Data Sync, çeşitli sınırlamalar olduğundan yedekleme stratejinizin bir parçası olarak kullanılmamalıdır. Sürüm oluşturmaz, yalnızca verileri yedekler ve başka hiçbir nesneyi yedeklemez. Daha fazla bilgi için SQL Data Sync SSS konusuna bakın. ( msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx )
Shaun Luttin

1
Veri Senkronizasyonu oldukça korkunç - bugün bile (bu yazıdan birkaç yıl sonra) bir ton hata var ve gerçekten db'nizi sıkıştırabilir - ayrıca hala birçok sınırlama var.
William

5

Oldukça kolay. Bu benim için çalıştı ... Azure SQL veritabanını yerel makinenize aktarma açısından ...:

  1. SQL Management Studio'nuzu açın ve Azure SQL Server'ınıza bağlanın.
  2. Yerel makinenize inmek istediğiniz veritabanını seçin ve sağ tıklayın ... "Komut Dosyaları Oluştur" u seçin. İstemleri izleyin ...

AMA, ayrıca VERİLERİ ve komut dosyalarını da istiyorsanız, oluşturmaya başlamadan önce Gelişmiş Seçenekleri kontrol ettiğinizden emin olun ... "Komut dosyasına veri türleri" bölümüne gidin ve " Şema ve veriler "... veya sizin için uygun olan her şeyi.

Daha sonra yerel makinenizde çalıştırılabilecek güzel bir SQL komut dosyası verecektir ve veritabanını oluşturacak ve tüm verilerle dolduracaktır.

Benim durumumda, FK veya başka kısıtlama olmadığımı aklınızdan çıkarmayın ... ayrıca, çok fazla veri değildi.

Bunu genel olarak bir yedekleme mekanizması olarak önermiyorum ...


2
Bu hiçbir yaygara ile oldukça iyi çalıştı söylemek gerekir; yabancı anahtarlar mükemmel yeniden. Ortaya çıkan SQL komut dosyası sqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
SSMS'de açılamayacak

5

kullanma msdeploy.exe

Uyarı: msdeploy.exehedef veritabanını tek başına oluşturamaz, bu yüzden önce manuel olarak oluşturmanız gerekir.

  1. Bağlantı dizesini veritabanı özellikleri sayfasına kopyalayın. Doğru bir şifre içerecek şekilde ayarlayın. veritabanı özellikleri sayfası
  2. Hedef DB için bağlantı dizesini alın.
  3. Şu şekilde çalıştırın msdeploy.exe:

    "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

kullanma SqlPackage.exe

  1. Azure DB'yi bir bacpac paketine verin.

    "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. Paketi yerel bir DB'ye aktarın.

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


3

SQL Server Management Studio'da

Almak istediğiniz veritabanına sağ tıklayın, Görevler> Veri katmanı uygulamasını dışa aktar'a tıklayın ve veritabanınızı yerel bir .dacpac dosyasına aktarın.

Yerel hedef SQL sunucusu örneğinizde, Veritabanları> Veri katmanı uygulamasını içe aktar'a sağ tıklayabilir ve yerel olduktan sonra, yedekleme ve veritabanını geri yükleme gibi şeyleri yapabilirsiniz.


2

'Salt okunur sütun "id" içine ekleme hatası' aldım SSIS alma / verme çalışamadı. Ayrıca http://sqlazuremw.codeplex.com/ adresini çalıştıramadım ve yukarıdaki SQL Azure Data Sync bağlantıları benim için çalışmadı.

Ama BACPAC dosyaları hakkında mükemmel bir blog yazısı buldum: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

Yayındaki videoda blog yayınının yazarı altı adımdan geçiyor:

  1. Azure Yönetim Portalı'nda bir depolama hesabı oluşturun veya bu hesaba gidin. Blob URL'sine ve depolama hesabının Birincil erişim anahtarına ihtiyacınız olacaktır.

  2. Blog gönderisi, bacpac dosyası için yeni bir kap oluşturmanızı önerir ve bunun için Azure Depolama Gezgini'ni kullanmanızı önerir . (Not: Azure Storage Explorer'a eklemek için depolama hesabının Blob URL'sine ve Birincil erişim anahtarına ihtiyacınız olacaktır.)

  3. Azure Yönetim Portalı'nda dışa aktarmak istediğiniz veritabanını seçin ve şeridin İçe ve Dışa Aktar bölümünde 'Dışa Aktar'ı tıklayın.

  4. Ortaya çıkan diyalog, veritabanı, blob URL'si ve erişim anahtarı için kullanıcı adınızı ve şifrenizi gerektirir. Kapsayıcıyı damla URL'sine eklemeyi ve bir dosya adı eklemeyi unutmayın (örn. Https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac ).

  5. Son'u tıklattıktan sonra veritabanı BACPAC dosyasına aktarılır. Bu biraz zaman alabilir. Azure Depolama Gezgini'nde işaretlerseniz hemen sıfır baytlık bir dosya görebilirsiniz. Bu, blob-store'a yazma erişimi olup olmadığını kontrol eden İthalat / İhracat Hizmetidir.

  6. Bu yapıldıktan sonra BACPAC dosyasını indirmek için Azure Depolama Gezgini'ni kullanabilirsiniz ve ardından SQL Server Management Studio'da yerel sunucunuzun veritabanı klasörünü sağ tıklatıp BACPAC dosyasında okunan sihirbazı başlatacak Veri Katmanı Uygulamasını İçe Aktar'ı seçin. Azure veritabanınızın kopyasını oluşturun. Sihirbaz ayrıca yerel olarak kopyalamak istemiyorsanız BACPAC dosyasını almak için doğrudan blob-store'a bağlanabilir.

Son adım yalnızca SQL Server Management Studio'nun SQL Server 2012 sürümünde kullanılabilir (bu, çalıştırdığım sürümdür). Bu makinede kontrol edilecek daha öncekiler yok. Blog gönderisinde yazar http://sqldacexamples.codeplex.com/releases adresinde mevcut olduğuna inandığım içe aktarma için DacImportExportCli.exe komut satırı aracını kullanır.


Bunu tam olarak takip etmeme rağmen, beni doğru yöne götürdü. Bacpac dosyasının indirilmesini atlayabilir ve doğrudan SQL Server Management Studio'nun içinden Azure Blob depolama alanına işaret edebilirsiniz.
Josh Mouch

2

"SSIS içe aktarma / dışa aktarma işleminin çalışmasını sağlayamadım. Kimlik öğelerinin eklenmesine izin ver.

Bundan sonra, Azure'dan yerel veritabanına kopyalamak için SQL Import / Export sihirbazını kullanarak her şey yolunda gitti.

Yalnızca SQL Server 2008 R2 (iyi çalıştı) ve yerel veritabanı oluşturmak için Visual Studio 2012 Express ile birlikte gelen SQL Alma / Verme Sihirbazı vardı.




1

SQL Azure'dan Azure Depolama'da barındırılan bir .bacpac dosyasına her gece yedek dışa aktarma yapmak için yeni Azure Mobil Hizmetleri'ni kullanabilirsiniz. Bu çözüm% 100 buluttur, üçüncü taraf bir araç gerektirmez ve herhangi bir şeyi indirmek / kopyalamak / yedeklemek için yerel olarak barındırılan bir SQL Server örneği gerektirmez.

Yaklaşık 8 farklı adım var, ancak hepsi kolay: http://geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx


Bu gerçekten umut verici görünüyor! Bunun Azure Federasyonları ile çalışıp çalışmayacağı hakkında bir fikriniz var mı?
Tim Lentine

@Zaman üzgünüm bilmiyorum. Mobil Servisler aracılığıyla bunu yapmak başlamak için bir çözüm, bu yüzden değilse şaşırmazdım.
Ben Barreth

1

Her zaman en kolay görünen İthalat / İhracat Özelliğini kullanıyorum.

Aşama 1:

Azure örneğinden aşağıdaki gibi yedek alın: Veritabanını seçin → Sağ tıklatın → Görevler → Veri Katmanı Uygulamasını Dışa Aktar.

Adım 2: Yedek dosyası için belirli bir ad verin ve istediğiniz konuma kaydedin

Adım 3: Bu, sql örneğinden yerelinize veritabanının yedeğini aldınız. Yerel olarak geri yükleyelim. Yedeklenen veritabanını C sürücünüze kopyalayın. Şimdi PowerShell'i yönetici haklarıyla açın ve C sürücüsüne gidin

Adım 4: Ana anahtarı kaldırmak için powershell betiğini indirelim .

Adım 5: Betiği aşağıdaki gibi çalıştırın. \ RemoveMasterKey.ps1 -bacpacPath "C: \ identity.bacpac"

Hepsi bu, şimdi yerel ortamınızda MSSQL 2017'de geri yükleyebilirsiniz.

6. Adım: Yerel sunucunuza bağlanın ve Veritabanları → İçe Aktar-Veri-Katman-Uygulaması'nı tıklayın.

Adım 7 : Veritabanınızın geri yüklemesi için bir ad verin.

Şimdi her şeyi yeşil renkte göreceksiniz!

Blogumu diyagramlarla oku .



0

Benim için püf noktası boş DB'deki PK'ları / FK'leri / kısıtlamaları çoğaltmaya başlamak, ardından veri alırken kısıtlamaları geçici olarak devre dışı bırakmaktı (bkz. Https://stackoverflow.com/a/161410 ).

Daha kesin:

  1. Manuel olarak boş hedef DB oluşturun;
  2. Kaynak DB> Görevler> Komut Dosyaları Oluştur'a sağ tıklayın;
  3. Komut dosyasını boş hedef DB'de çalıştırın (şimdi DB'nin doğru PKs / FKs / kısıtlamaları var, ancak veri yok);
  4. Tüm kısıtlamaları devre dışı bırakın;
  5. Verileri içe aktarma (Hedef DB> Görevler> Verileri İçe Aktar'ı sağ tıklayın);
  6. Kısıtlamaları yeniden etkinleştirin.

Bu yardımcı olur umarım!


0

Şimdi bunu yapmak için SQL Server Management Studio'yu kullanabilirsiniz.

  • SQL Azure veritabanına bağlanın.
  • Nesne Gezgini'nde veritabanını sağ tıklatın.
  • "Görevler" / "Veritabanını SQL Azure'a Dağıt" seçeneğini seçin.
  • "Dağıtım Ayarları" adlı adımda yerel veritabanı bağlantınızı seçin.
  • "Sonraki" / "Sonraki" / "Son" ...

Bunu yapamadım çünkü hedef bağlantı olarak başka bir Azure veritabanı seçinceye kadar "İleri" düğmesi gri görünüyor
Colin


0

Herkes Azure SQL Sync kullanan bir DB Bacpac almak için bir sorun varsa , Sandrino Di Mattia bunu çözmek için büyük bir basit uygulama geliştirdi .

  1. DB'nizin Bacpac'ını dışa aktarın
  2. Dowload Di Mattia'nın ikili dosyası
  3. Bu konsol uygulaması ile indirilen Bacpac onarım
  4. Lauch SSMS
  5. "Veritabanları" na sağ tıklayın ve "Veri Katmanı Uygulamasını İçe Aktar" ı seçin
  6. Onarılan Bacpac'ı seçin.

0

Herkes veritabanını Yerel'e yedeklemek için ücretsiz ve etkili bir seçenek istiyorsa (ve bunu manuel olarak yapmayı düşünmüyorsanız), en son Microsoft Visual Studio 2015 Topluluk Sürümü (Ücretsiz) veya Professional / Premium / Ultimate'da yerleşik şema ve veri karşılaştırma işlevini kullanın baskı. Mucizevi şekilde çalışır!

Azure ile BizPark hesabım var ve ödemeden doğrudan veritabanını yedeklemenin bir yolu yok. Bu seçeneği VS işlerinde buldum.

Yanıt https://stackoverflow.com/a/685073/6796187 adresinden alınmıştır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.