Azure SQL Database Bacpac Local Restore

132

Utworzyłem kopię zapasową BACPAC mojej Azure SQL Database przy użyciu opcji „Eksportuj” w konsoli Azure Management Console.

Po pobraniu tego na mój komputer trochę utknąłem na tym, jak mogę przywrócić to do lokalnej instancji SQL Server. Natknąłem się na narzędzie DacImportExportCli, ale nie mogłem znaleźć przykładu przywracania lokalnego.

Byłoby wspaniale, gdyby ktoś napisał skrypt, który to robi (więc można to zaplanować).

Ben Foster
źródło
8
Może to być problem SQL Server 2012, ale w SQL Server Management Studio, jeśli kliknę prawym przyciskiem myszy folder bazy danych mojego lokalnego serwera i wybiorę opcję Importuj aplikację warstwy danych, która uruchamia kreatora, który odczytuje plik BACPAC w celu utworzenia kopii mojej 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.
dumbledad
Czy kiedykolwiek to rozgryzłeś?
Nate,
3
@dumbledad Uważam, że importowanie aplikacji warstwy danych jest rzeczą SQL 2012 SSMS, 2008R2 wydaje się mieć tylko możliwość eksportowania DACPAC, nie widzę opcji importu.
jamiebarrow

Odpowiedzi:

181

Można to zrobić po prostu za pomocą programu SQL Server Management Studio 2012

  1. Kliknij prawym przyciskiem myszy węzeł Połączenie> Bazy danych i wybierz „ Importuj aplikację warstwy danych ...
  2. Wybierz „ Dalej ” na etapie wprowadzenia.
  3. wprowadź opis obrazu tutaj
  4. Przeglądaj lub połącz się z kontem magazynu, w którym przechowywane są kopie zapasowe.
Josiah Ruddell
źródło
3
To jest doskonałe. Narzędzie RedGate może być niestabilne. Cieszę się, że widzę opcję obsługiwaną przez MS.
gilly3
2
Czy to działa z SQL Express 2012? Ponieważ mam następujący komunikat o błędzie: Count not load model schema from package. (Microsoft.SqlServer.Dac) ------------------------------ INFORMACJE DODATKOWE: Błąd wewnętrzny. Typ wewnętrznej platformy docelowej SqlAzureDatabaseSchemaProvider nie obsługuje wersji pliku schematu „2.5”. (Plik: C: \ Users \ xxxxx \ Downloads \ dbname-2013-10-10-20-2.bacpac) (Microsoft.Data.Tools.Schema.Sql)
Antoine Meltzheim
@ElTone Właśnie przywróciłem bacpac bezpośrednio z usługi Azure Storage do mojej lokalnej bazy danych SQL Server Express 2012 przy użyciu Management Studio. Nie widziałem żadnych błędów i wydaje się, że dane tam są. Ktoś wspomina, że ​​zainstalowanie nowszej wersji SQL Server Data Tools pomogło im (ale nie odnoszą się do Management Studio) social.msdn.microsoft.com/Forums/windowsazure/en-US/ ...
Juha Palomäki
@Juha Palomäki Poprawnie: Zainstalowanie najnowszej wersji SSDT rozwiązało problem. Teraz wszystko jest lepsze.
Antoine Meltzheim
4
Wydaje się, że istnieją pewne ograniczenia dotyczące wielkości plików bacpac, które można importować za pomocą Management Studio. Jeśli trafisz na wyjątek OutOfMemory, sprawdź odpowiedź Flea na temat korzystania z narzędzia wiersza poleceń SqlPackage.exe
Juha Palomäki
52

Musiałem wyeksportować bazę danych SQL Azure, a następnie zaimportować ją do lokalnego serwera SQL 2008 R2 (uwaga: używam również programu Visual Studio 2010). Microsoft z pewnością zrobił wszystko, co w ich mocy, aby było to bolesne, jednak udało mi się to zrobić, wykonując następujące czynności:

  1. Przejdź do tego łącza http://msdn.microsoft.com/en-us/jj650014 i zainstaluj narzędzia SQL Server Data Tools dla programu Visual Studio 2010

  2. Spowoduje to zainstalowanie na dysku lokalnym. W moim przypadku tutaj to umieścił: C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DAC \ bin

  3. Przejdź do tego za pomocą wiersza poleceń lub programu PowerShell

  4. Zamierzasz uruchomić SqlPackage.exe

  5. Otwórz to łącze, aby wyświetlić listę wszystkich opcji parametrów dla SqlPackage.exe ( http://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx )

  6. Oto mój wiersz poleceń, który musiałem wykonać, aby zaimportować plik .bacpac do mojego lokalnego serwera SQL 2008 R2:

    . \ SqlPackage.exe / a: Import /sf:C:\mydatabasefile.bacpac / tdn: NorthWind / tsn: BINGBONG

/tdnto nazwa bazy danych, do której chcesz przywrócić plik bacpac. /tsnto nazwa twojego serwera SQL.

Możesz zobaczyć wszystkie te opisy parametrów w linku z # 5.

Pchła
źródło
Można to zrobić jeszcze łatwiej, jeśli masz zainstalowany program SSMS 2012. Możesz po prostu użyć kreatora opisanego powyżej przez @Josiah, nawet z serwerem 2008 R2.
DanO,
2
Spędziłem tyle czasu na poszukiwaniu tego rozwiązania, że ​​w międzyczasie udało mi się pobrać całe studio zarządzania 2014.
Santhos
SqlPackage wisiał dla mnie na etapie „aktualizowania bazy danych”, dopóki całkowicie nie porzuciłem docelowej bazy danych
michael_hook
10

Możesz przywrócić BACPAC za pomocą narzędzi po stronie klienta. Filmy są tutaj:

http://dacguy.wordpress.com/2011/09/09/importexport-services/

Narzędzia są dostępne tutaj:

http://sqldacexamples.codeplex.com/documentation

ABC
źródło
Narzędzie ma wspierać importowanie bacpaca do lokalnej bazy danych. Na przykład importowanie bacpaca do bazy danych przy użyciu uwierzytelniania Windows wyglądałoby następująco: „DacCli -S myserver -E -D nw_restored -F northwind.bacpac -I”. Jednak lista codeplex wymaganych zestawów jest nieaktualna - żadne z łączy nie działałoby, więc narzędzie nie będzie działać (ma wymagania wstępne dotyczące niektórych komponentów CTP SQL 2012).
David Airapetyan
Mam wszystkie komponenty zainstalowane na moim komputerze, więc próbowałem zaimportować bacpac z DacCli - zadziałało (zobacz wiersz poleceń w moim poprzednim komentarzu). Zajęło około 20 minut na 100 MB bacpac.
David Airapetyan
7

Wygląda na to, że moje modlitwy zostały wysłuchane. Firma Redgate uruchomiła dziś BEZPŁATNIE narzędzie SQL Azure Backup - http://www.red-gate.com/products/dba/sql-azure-backup/download

Ben Foster
źródło
Kilka problemów: 1. Aktywne tworzenie kopii zapasowej SQL Azure jest chwilowo zatrzymane (ta uwaga jest wyświetlana po uruchomieniu najnowszej wersji narzędzia) 2. Podczas tworzenia kopii zapasowej bezpośrednio z Azure do lokalnego SQL, nie wydaje się, bacpac, ale zamiast tego implementuje jakiś własny schemat / kopię danych. Z mojego doświadczenia wynika, że ​​działo się to bardzo wolno. 3. Opierając się na poprzednim punkcie, mechanizm zawiera błędy - wiele tabel nie udało się przesłać, ponieważ narzędzie nie mogło wykryć unikalnego klucza
David Airapetyan
2
Ta odpowiedź powinna zostać zaktualizowana lub przestać być akceptowaną odpowiedzią. Powiązane narzędzie stało się od tego czasu rozwiązaniem „chmurowym” i nie obsługuje lokalnych kopii zapasowych.
Timothy Strimple,
2
Narzędzie do tworzenia kopii zapasowych jest nadal dostępne na stronie red-gate.com/products/dba/sql-azure-backup/Discontinued
Ben Foster,
5

Jeśli używasz programu SSMS 2012, wystarczy kliknąć prawym przyciskiem myszy folder Bazy danych na serwerze w Eksploratorze obiektów i wybrać opcję „Importuj aplikację warstwy danych ...”.

Na drodze jest jedna przeszkoda, na którą trzeba uważać: od 26 marca 2013 r. (Kiedy musiałem sam się dowiedzieć, jak to zrobić), podczas eksportowania .bacpac z Azure zostanie pobrany jako plik .zip, nie jest plikiem .bacpac, a okno dialogowe pliku otwierane przyciskiem Przeglądaj w kreatorze importu pokaże tylko * .bacpac lub . w filtrach plików, co oznacza, że ​​plik .zip nie jest obsługiwany. Jeśli jednak zmienisz filtr na . , wybierz pobrany plik .zip i kliknij Dalej, kreator będzie działał normalnie.

Adam Anderson
źródło
2
To jest poprawna odpowiedź. Możesz teraz zainstalować bezpłatną, samodzielną wersję programu SSMS 2016, która zapewnia wszystkie te funkcje
Aaron,
3

Oto skrypt do jednoczesnego przywracania kilku plików bacpac: Przywróć zbiorczo pliki bacpac lokalnie

cd [FOLDERPATH]
$goodlist = dir
cd 'C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin'
foreach($i in $goodlist){ $name = $i.Name; $namer = $i.Name.Substring(0, $i.Name.length - 7); .\SqlPackage.exe /a:Import /sf:[FOLDERPATH]\$name /tdn:$namer /tsn:[SERVERNAME] }
Jeffrey Rosselle
źródło