Jak skopiować bazę danych SQL Azure na mój lokalny serwer programistyczny?


164

Czy ktoś wie, jak mogę skopiować bazę danych SQL Azure na mój komputer deweloperski? Chciałbym przestać płacić za posiadanie deweloperskiej bazy danych w chmurze, ale to najlepszy sposób na uzyskanie danych produkcyjnych. Kopiuję moją produkcyjną bazę danych do nowej deweloperskiej bazy danych, ale chciałbym mieć tę samą lokalną bazę danych.

Jakieś sugestie?


2
Używam tego prawie zawsze! Jest mały, darmowy, stale aktualizowany, nie instaluje żadnych zbędnych plików, działa jak urok, nie tworzy żadnych niechcianych obiektów w bazie danych i robi dokładnie to, co mówi jego nazwa.
astajkow

4
Stało się to znacznie łatwiejsze. Zobacz odpowiedź Atom poniżej (luty 2018) wyjaśniającą, jak używać zadań => Wdróż bazę danych ... w SSMS.
Jon Crowell,

Odpowiedzi:


129

Można to zrobić na wiele sposobów:

  1. Korzystanie z usług SSIS (SQL Server Integration Services) . Importuje tylko dataw tabeli. Właściwości kolumn, ograniczenia, klucze, indeksy, procedury składowane, wyzwalacze, ustawienia zabezpieczeń, użytkownicy, dane logowania itp. Nie są przenoszone. Jest to jednak bardzo prosty proces i można go wykonać po prostu za pomocą kreatora w SQL Server Management Studio.
  2. Korzystanie z kombinacji skryptów do tworzenia SSIS i bazy danych . Spowoduje to uzyskanie danych i wszystkich brakujących metadanych, które nie są przesyłane przez SSIS. To też jest bardzo proste. Najpierw prześlij dane za pomocą SSIS (zobacz instrukcje poniżej), a następnie utwórz skrypt DB Create z bazy danych SQL Azure i odtwórz go ponownie w lokalnej bazie danych.
  3. Na koniec możesz użyć usługi importu / eksportu w SQL Azure . Spowoduje to przesłanie danych (z obiektami schematu) do usługi Azure Blob Storage jako BACPAC. Będziesz potrzebować konta usługi Azure Storage i zrób to w witrynie Azure Portal. Jest to tak proste, jak naciśnięcie przycisku „Eksportuj” w portalu internetowym Azure po wybraniu bazy danych, którą chcesz wyeksportować. Minusem jest to, że jest to tylko procedura ręczna, nie znam sposobu na zautomatyzowanie tego za pomocą narzędzi lub skryptów - przynajmniej pierwsza część, która wymaga kliknięcia na stronie internetowej.

Ręczna procedura dla metody nr 1 (przy użyciu SSIS) jest następująca:

  • W Sql Server Management Studio (SSMS) utwórz nową pustą bazę danych w lokalnym wystąpieniu SQL.
  • Wybierz opcję Importuj dane z menu kontekstowego (kliknij prawym przyciskiem myszy bazę danych -> Zadania -> Importuj dane ...)
  • Wpisz parametry połączenia dla źródła (SQL Azure). Wybierz dostawcę „.Net Framework Data Provider for SqlServer”.
  • Wybierz istniejącą pustą lokalną bazę danych jako miejsce docelowe.
  • Postępuj zgodnie z instrukcjami kreatora - będziesz mógł wybrać dane tabel, które chcesz skopiować. Możesz pominąć dowolne stoły, których nie potrzebujesz. Np. Jeśli przechowujesz dzienniki aplikacji w bazie danych, prawdopodobnie nie potrzebujesz ich w swojej kopii zapasowej.

Możesz to zautomatyzować, tworząc pakiet SSIS i wykonując go ponownie w dowolnym momencie, gdy chcesz ponownie zaimportować dane. Pamiętaj, że możesz importować tylko przy użyciu SSIS do czystej bazy danych, nie możesz wykonywać przyrostowych aktualizacji lokalnej bazy danych, gdy już to zrobiłeś.

Metoda nr 2 (dane SSID plus obiekty schematu) jest bardzo prosta. Najpierw wykonaj kroki opisane powyżej, a następnie utwórz skrypt tworzenia bazy danych (kliknij prawym przyciskiem myszy bazę danych w SSMS, wybierz opcję Generuj skrypty -> Utwórz bazę danych). Następnie odtwórz ponownie ten skrypt w lokalnej bazie danych.

Metoda nr 3 jest opisana na blogu tutaj: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/ . Istnieje klip wideo przedstawiający proces przesyłania zawartości bazy danych do usługi Azure Blob Storage jako BACPAC. Następnie możesz skopiować plik lokalnie i zaimportować go do swojej instancji SQL. Proces importowania BACPAC do aplikacji Data-Tier opisano tutaj: http://msdn.microsoft.com/en-us/library/hh710052.aspx .


2
To działa, tylko jedna korekta. W kreatorze importu / eksportu serwera źródłem danych jest „Dostawca danych .Net Framework dla SqlServer”
BZink

Wspaniały! Dzięki za sprostowanie. Pamiętam, że jeden z dostawców działał, a niektórzy nie działali dla mnie, ale nie pamiętałem dokładnie, który z nich.
seva titov

Niepowodzenie dla mnie: „Niepowodzenie wstawiania do kolumny tylko do odczytu„ id ””
dumbledad,

3
Sztuczka polegała na tym, aby rozpocząć replikację PK / FK / ograniczeń na pustej bazie danych, a następnie tymczasowo wyłączyć ograniczenia podczas importowania danych. Dokładniej: 1-Utwórz ręcznie pustą docelową bazę danych. 2 Kliknij prawym przyciskiem myszy źródłową bazę danych> Zadania> Generuj skrypty. Plik skryptu 3-Run na pustej docelowej bazie danych (teraz DB ma poprawne PK / FK / ograniczenia, ale nie ma danych). 4-Wyłącz wszystkie ograniczenia ( stackoverflow.com/a/161410 ). 5-Importuj dane (kliknij prawym przyciskiem myszy docelową bazę danych> Zadania> Importuj dane). 6-Włącz ponownie ograniczenia. Mam nadzieję że to pomoże!
Mathieu Frenette

1
@JoSmo, metody 1 i 2 nie wymagają konta magazynu. Jednak zaleca się posiadanie konta magazynu w tym samym centrum danych, w którym znajduje się baza danych SQL Azure. Powodem jest to, że możesz go używać do tworzenia kopii zapasowych i przywracania bazy danych. Jeśli nie masz uprawnień administracyjnych do subskrypcji platformy Azure, znajdź w organizacji osobę, która ma wystarczające uprawnienia do tworzenia nowych kont magazynu i udzielania do nich kluczy dostępu. Ponieważ masz już dostęp do bazy danych, nie ma powodu odmawiać dostępu do konta magazynu.
seva titov

66

Skopiuj dane bazy danych Azure do lokalnej bazy danych: teraz możesz użyć programu SQL Server Management Studio, aby zrobić to w następujący sposób:

  • Połącz się z bazą danych SQL Azure.
  • Kliknij prawym przyciskiem myszy bazę danych w Object Explorer.
  • Wybierz opcję „Zadania” / „Wdróż bazę danych na SQL Azure”.
  • W kroku o nazwie „Ustawienia wdrażania” połącz lokalny serwer SQL Server i utwórz nową bazę danych.

wprowadź opis obrazu tutaj

„Dalej” / „Dalej” / „Zakończ”


9
Niesamowite👏🏻 to nie jest takie jasne w SSMS, ponieważ „wdrażanie bazy danych w SQL AZURE” jest nieco mylące ...
EeKay

12
Zdecydowanie najłatwiejsze rozwiązanie połączone ze zdecydowanie najbardziej mylącą nazwą menu. Dziękuję za wysłanie tego.
Kevin Giszewski

Jest to najprostsze, ale wada polega na tym, że nie możesz wybrać, które tabele chcesz zarchiwizować, a które nie. W mojej firmie mamy tabelę załączników, która zawiera gigabajty załączników (zdjęcia itp.). Zwykle tego nie chcemy, ponieważ kopiowanie będzie trwało wiecznie. Nie możemy wykluczyć tej tabeli za pomocą tej metody.
Rosdi Kasim

33

Chciałem tylko dodać uproszczoną wersję odpowiedzi dumbledada , ponieważ jest poprawna.

  1. Wyeksportuj Azure SQL Database do pliku BACPAC w magazynie obiektów blob.
  2. W studiu SQL Management kliknij prawym przyciskiem myszy bazę danych i kliknij „Importuj aplikację warstwy danych”.
  3. Zostanie wyświetlony monit o wprowadzenie informacji, aby uzyskać dostęp do pliku BACPAC w usłudze Azure Blob Storage.
  4. Kliknij kilka razy i ... Gotowe!

4
Pojawia się błąd z informacją, że celem nie może być sql azure v12?
Zapnologica

2
Upewnij się, że masz wersję programu SSMS, która zaimportuje ten plik BACPAC: msdn.microsoft.com/en-us/library/mt238290.aspx
Paul Bullivant

Nawet w tej wersji programu SSMS nadal otrzymuję błąd z powodu docelowej
bazy danych

28

W programie SQL Server 2016 Management Studio proces uzyskiwania Azure bazy danych na komputerze lokalnym został usprawniony.

Kliknij prawym przyciskiem myszy bazę danych, którą chcesz zaimportować, kliknij Zadania> Eksportuj aplikację warstwy danych i wyeksportuj bazę danych do lokalnego pliku .dacpac.

W lokalnej docelowej instancji serwera SQL możesz kliknąć prawym przyciskiem myszy Bazy danych> Importuj aplikację warstwy danych , a gdy będzie lokalna, możesz wykonywać takie czynności, jak tworzenie kopii zapasowych i przywracanie bazy danych.


5
To jest to. NB. „Eksport warstwy danych” obejmuje dane, „Wyodrębnij warstwę danych” zawiera tylko definicje
Colin

20

Myślę, że teraz jest o wiele łatwiej.

  1. Uruchom SQL Management Studio
  2. Kliknij prawym przyciskiem myszy „Bazy danych” i wybierz „Importuj aplikację warstwy danych ...”
  3. Kreator przeprowadzi Cię przez proces łączenia się z kontem platformy Azure, tworzenia pliku BACPAC i tworzenia bazy danych.

Dodatkowo używam Sql Backup i FTP ( https://sqlbackupandftp.com/ ) do codziennego tworzenia kopii zapasowych na bezpiecznym serwerze FTP. Po prostu pobieram stamtąd najnowszy plik BACPAC i importuję go w tym samym oknie dialogowym, co jest szybsze i łatwiejsze do utworzenia lokalnej bazy danych.


9

Możesz również sprawdzić usługę SQL Azure Data Sync w portalu zarządzania Windows Azure. Umożliwia pobieranie i przywracanie całej bazy danych, w tym schematu i danych między SQL Azure i SQL Server.


1
Synchronizacja danych SQL nie powinna być używana jako część strategii tworzenia kopii zapasowych, ponieważ istnieje kilka ograniczeń. Nie wykonuje wersji, tylko tworzy kopie zapasowe danych i żadnych innych obiektów. Aby uzyskać więcej informacji, zobacz temat Często zadawane pytania dotyczące synchronizacji danych SQL. ( msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx )
Shaun Luttin,

1
Synchronizacja danych jest dość okropna - nawet dzisiaj (kilka lat po tym poście) jest mnóstwo błędów i może naprawdę zepsuć twoją bazę danych - nadal ma wiele ograniczeń.
William

5

To całkiem proste. To zadziałało dla mnie ... pod względem pobierania bazy danych Azure SQL na komputer lokalny ...:

  1. Otwórz SQL Management Studio i połącz się z Azure SQL Server.
  2. Wybierz bazę danych, którą chcesz przenieść na swój komputer lokalny i kliknij prawym przyciskiem myszy ... wybierz "Generuj skrypty". Postępuj zgodnie z instrukcjami ...

ALE, uważaj, jeśli RÓWNIEŻ chcesz DANE, a także skrypty, sprawdź Opcje zaawansowane przed rozpoczęciem generowania ... przewiń w dół do "Typy danych do skryptu" i upewnij się, że masz " Schemat i dane ”... lub cokolwiek jest dla Ciebie odpowiednie.

Da ci ładny plik skryptu SQL, który można następnie uruchomić na komputerze lokalnym i utworzy bazę danych, a także zapełni ją wszystkimi danymi.

Miej na uwadze, że w moim przypadku nie mam ograniczeń FK ani innych ... również nie było to dużo danych.

Ogólnie nie polecam tego jako mechanizmu tworzenia kopii zapasowych ...


2
Muszę powiedzieć, że zadziałało to zadziwiająco dobrze i bez zamieszania; klucze obce odtworzone doskonale. Wynikowy skrypt SQL był zbyt duży, aby można go było otworzyć w SSMS, a nawet w wielu edytorach tekstu, ale udało mi się użyć wiersza poleceńsqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
perlyking

5

Za pomocą msdeploy.exe

Uwaga: msdeploy.exenie można samodzielnie utworzyć docelowej bazy danych, więc musisz najpierw utworzyć ją ręcznie.

  1. Skopiuj parametry połączenia na stronie właściwości bazy danych. Dostosuj go tak, aby zawierał prawidłowe hasło. strona właściwości bazy danych
  2. Pobierz parametry połączenia dla docelowej bazy danych.
  3. Uruchom w msdeploy.exeten sposób:

    "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

Za pomocą SqlPackage.exe

  1. Wyeksportuj Azure DB do pakietu 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. Zaimportuj pakiet do lokalnej bazy danych.

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


3

W SQL Server Management Studio

Kliknij prawym przyciskiem myszy bazę danych, którą chcesz zaimportować, kliknij Zadania> Eksportuj aplikację warstwy danych i wyeksportuj bazę danych do lokalnego pliku .dacpac.

W lokalnej docelowej instancji serwera SQL możesz kliknąć prawym przyciskiem myszy Bazy danych> Importuj aplikację warstwy danych, a gdy będzie lokalna, możesz wykonywać takie czynności, jak tworzenie kopii zapasowych i przywracanie bazy danych.


2

Nie mogłem uruchomić importu / eksportu SSIS, ponieważ pojawił się błąd „Błąd wstawiania do kolumny tylko do odczytu„ id ””. Nie mogłem też uruchomić witryny http://sqlazuremw.codeplex.com/ , a powyższe linki do usługi SQL Azure Data Sync nie działały.

Ale znalazłem doskonały wpis na blogu dotyczący plików BACPAC: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

W filmie w poście autor posta na blogu wykonuje sześć kroków:

  1. Utwórz lub przejdź do konta magazynu w portalu zarządzania Azure. Będziesz potrzebować adresu URL obiektu BLOB i podstawowego klucza dostępu do konta magazynu.

  2. W poście na blogu zalecono utworzenie nowego kontenera dla pliku bacpac i zasugerowano użycie do tego Eksploratora usługi Azure Storage . (Uwaga: będziesz potrzebować adresu URL obiektu BLOB i podstawowego klucza dostępu konta magazynu, aby dodać go do Eksploratora usługi Azure Storage).

  3. W portalu zarządzania Azure wybierz bazę danych, którą chcesz wyeksportować, i kliknij „Eksportuj” w sekcji Importuj i eksportuj na wstążce.

  4. Wynikowe okno dialogowe wymaga podania nazwy użytkownika i hasła do bazy danych, adresu URL obiektu BLOB oraz klucza dostępu. Nie zapomnij dołączyć kontenera do adresu URL obiektu blob i podać nazwę pliku (np. Https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac ).

  5. Po kliknięciu przycisku Zakończ baza danych zostanie wyeksportowana do pliku BACPAC. To może chwilę potrwać. Jeśli sprawdzisz w Eksploratorze usługi Azure Storage, może zostać wyświetlony plik o rozmiarze zerowym. To jest usługa importu / eksportu sprawdzająca, czy ma dostęp do zapisu w magazynie obiektów blob.

  6. Gdy to zrobisz, możesz użyć Eksploratora usługi Azure Storage, aby pobrać plik BACPAC, a następnie w programie SQL Server Management Studio kliknąć prawym przyciskiem myszy folder bazy danych serwera lokalnego i wybrać opcję Importuj aplikację warstwy danych, która uruchomi kreatora, który odczytuje plik BACPAC do utworzyć kopię bazy danych Azure. Kreator może również połączyć się bezpośrednio z magazynem obiektów blob w celu uzyskania pliku BACPAC, jeśli wolisz nie kopiować go najpierw lokalnie.

Ostatni krok może być dostępny tylko w wersji SQL Server 2012 programu SQL Server Management Studio (jest to wersja, której używam). Nie mam wcześniejszych na tym komputerze do sprawdzenia. W poście na blogu autor używa narzędzia wiersza poleceń DacImportExportCli.exe do importu, które moim zdaniem jest dostępne pod adresem http://sqldacexamples.codeplex.com/releases


Chociaż nie podążałem za tym dokładnie, poprowadziło mnie to we właściwym kierunku. Możesz pominąć pobieranie pliku bacpac i wskazać usługę Azure Blob Storage bezpośrednio z poziomu programu SQL Server Management Studio.
Josh Mouch

2

Jeśli chodzi o „Nie mogłem uruchomić importu / eksportu SSIS, ponieważ otrzymałem błąd„ Nie udało się wstawić do kolumny tylko do odczytu „id” ”. Można to obejść, określając na ekranie mapowania, że ​​chcesz zezwalaj na wstawianie elementów tożsamości.

Potem wszystko działało dobrze, korzystając z kreatora importu / eksportu SQL w celu skopiowania z platformy Azure do lokalnej bazy danych.

Miałem tylko Kreatora importu / eksportu SQL, który jest dostarczany z SQL Server 2008 R2 (działał dobrze) i Visual Studio 2012 Express do tworzenia lokalnej bazy danych.




1

Za pomocą nowych usług Azure Mobile Services można co noc eksportować kopie zapasowe z platformy SQL Azure do pliku .bacpac hostowanego w usłudze Azure Storage. To rozwiązanie jest w 100% oparte na chmurze, nie wymaga narzędzia innej firmy i nie wymaga lokalnie hostowanej instancji programu SQL Server do pobierania / kopiowania / tworzenia kopii zapasowych czegokolwiek.

Jest około 8 różnych kroków, ale wszystkie są łatwe: http://geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx


To wygląda naprawdę obiecująco! Masz jakiś pomysł, czy to zadziała z Azure Federations?
Tim Lentine

@Tim sorry, nie wiem. Wykonywanie tego za pośrednictwem usług mobilnych to na początek obejście, więc nie zdziwiłbym się, gdyby tak się nie stało.
Ben Barreth

1

Zawsze używam funkcji importu / eksportu, która wydaje się być najłatwiejsza ze wszystkich.

Krok 1:

Uzyskaj kopię zapasową z wystąpienia Azure w następujący sposób, wybierz bazę danych → Kliknij prawym przyciskiem myszy → Zadania → Eksportuj aplikację warstwy danych.

Krok 2: Nadaj plikowi kopii zapasowej określoną nazwę i zapisz go w wybranej lokalizacji

Krok 3: To jest to, że wykonałeś kopię zapasową bazy danych z instancji sql do swojego lokalnego. Przywróćmy go do lokalnego. Skopiuj kopię zapasową bazy danych na dysk C. Teraz otwórz PowerShell z uprawnieniami administratora i przejdź do dysku C.

Krok 4: Pobierzmy skrypt PowerShell, aby usunąć klucz główny UsuńMasterKey.ps1 , aby skrypt znajdował się na tym samym dysku, w tym przypadku jego C.

Krok 5: Uruchom skrypt w następujący sposób,. \ RemoveMasterKey.ps1 -bacpacPath "C: \ identity.bacpac"

To wszystko, teraz możesz przywrócić go na MSSQL 2017 w swoim środowisku lokalnym.

Krok 6: Połącz się z serwerem lokalnym i kliknij Bazy danych → Importuj-warstwę-danych-aplikacji

Krok 7 : Podaj nazwę bazy danych do przywrócenia.

Teraz zobaczysz wszystko na zielono!

Przeczytaj mój blog z diagramami.



0

Sztuczka polegała na tym, że zacząłem replikować PK / FK / ograniczenia w pustej bazie danych, a następnie tymczasowo wyłącz ograniczenia podczas importowania danych (patrz https://stackoverflow.com/a/161410 ).

Dokładniej:

  1. Utwórz ręcznie pustą docelową bazę danych;
  2. Kliknij prawym przyciskiem myszy źródłową bazę danych> Zadania> Generuj skrypty;
  3. Uruchom plik skryptu na pustej docelowej bazie danych (teraz DB ma poprawne PK / FK / ograniczenia, ale brak danych);
  4. Wyłącz wszystkie ograniczenia;
  5. Import danych (kliknij prawym przyciskiem myszy docelową bazę danych> Zadania> Importuj dane);
  6. Ponownie włącz ograniczenia.

Mam nadzieję że to pomoże!


0

Teraz możesz do tego użyć programu SQL Server Management Studio.

  • Połącz się z bazą danych SQL Azure.
  • Kliknij prawym przyciskiem myszy bazę danych w Object Explorer.
  • Wybierz opcję „Zadania” / „Wdróż bazę danych na SQL Azure”.
  • W kroku o nazwie „Ustawienia wdrażania” wybierz połączenie z lokalną bazą danych.
  • „Dalej” / „Dalej” / „Zakończ” ...

Nie mogłem tego zrobić, ponieważ przycisk „Dalej” jest wyszarzony, dopóki nie wybiorę innej bazy danych Azure jako połączenia docelowego
Colin


0

Jeśli ktoś ma problem z zaimportowaniem Bacpaca bazy danych korzystającej z Azure SQL Sync , Sandrino Di Mattia opracował świetną, prostą aplikację, która rozwiązuje ten problem.

  1. Wyeksportuj Bacpac swojej bazy danych
  2. Pobierz plik binarny Di Mattii
  3. Za pomocą tej aplikacji konsoli napraw pobrany plik Bacpac
  4. Lauch SSMS
  5. Kliknij prawym przyciskiem myszy „Bazy danych” i wybierz „Importuj aplikację warstwy danych”
  6. Wybierz naprawiony Bacpac.

0

Jeśli ktoś chce darmowej i skutecznej opcji (i nie ma nic przeciwko robieniu tego ręcznie), aby wykonać kopię zapasową bazy danych do lokalnego, użyj schematu i funkcji porównywania danych wbudowanej w najnowszą wersję Microsoft Visual Studio 2015 Community Edition (bezpłatna) lub Professional / Premium / Ultimate wydanie. To działa jak urok!

Mam konto BizPark na platformie Azure i nie ma możliwości bezpośredniego tworzenia kopii zapasowych bazy danych bez płacenia. Znalazłem tę opcję w VS działa.

Odpowiedź pochodzi z https://stackoverflow.com/a/685073/6796187


0

Cześć, używam narzędzia SQLAzureMW do migracji i zarządzania bazą danych SQLAzure. Bardzo przydatny. Został pobrany z codeplex, ale obecnie nie jest dostępny, codeplex zostanie zamknięty, to samo narzędzie aplikacji jest teraz dostępne w GttHub. Poniższe łącze wyjaśnia, jak korzystać z tego narzędzia, a także udostępnia aplikację do pobrania.

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.