Czy mogę przywrócić pliki .bak programu SQL Server bez programu SQL Server?

16

Mam kilka dużych .bakplików ze zrzutu SQL Server 2005.

Czy mogę je przywrócić bez użycia SQL Server, zarówno do PostgreSQL, MySQL, jak i do płaskich plików tekstowych?

Najbardziej przydatne byłoby rozwiązanie typu open source.

Abe
źródło
1
„Wolałbym tego nie robić tylko do tego zadania”. Dlaczego nie? To sposób na robienie tego, co próbujesz zrobić.
swasheck
Czy przywrócenie do czegoś innego ma w ogóle jakiś sens? Co chcesz zrobić z wynikowymi danymi?
Philᵀᴹ
1
@Phil Chciałbym przenieść uzyskane dane do bazy danych PostgreSQL, a nawet płaskich plików tekstowych.
Abe
1
@swasheck Usunąłem cytowany wiersz, ponieważ wydaje się, że zniechęcił do pytania. Ale żeby odpowiedzieć na twoje pytanie, ponieważ nie mam pojęcia, jak go używać, a mój serwer działa pod Linuksem. Dostępny laptop z systemem Windows nie ma wystarczającej ilości miejsca.
Abe
2
Cóż, to informacje, których wcześniej nie mieliśmy :). Dzięki za dodatkowe informacje - mam plan
swasheck

Odpowiedzi:

19

Oto, co sugeruję:

  1. zbuduj maszynę wirtualną z systemem Windows, z wystarczającą ilością miejsca na dysku do przechowywania kopii zapasowej. Skopiuj tam plik kopii zapasowej. Jeśli nie masz jeszcze możliwości tworzenia maszyn wirtualnych, możesz to zrobić za pomocą bezpłatnych produktów, takich jak Oracle VirtualBox .
  2. pobierz i zainstaluj wersję ewaluacyjną SQL Server . Upewnij się, że dołączasz zarówno aparat bazy danych, jak i Narzędzia zarządzania - kompletne.
  3. jeśli maszyna wirtualna ma wystarczającą ilość miejsca do przechowywania kopii zapasowej, ale nie ma wystarczającej ilości miejsca, aby ją również przywrócić, możesz wykonać „przywracanie wirtualne” przy użyciu wersji próbnej produktu firmy Red-Gate o tej samej nazwie (co pozwala na interakcję z plik kopii zapasowej, jakby został przywrócony). W przeciwnym razie przywróć bazę danych w normalny sposób .

  4. Gdy baza danych będzie dostępna (poprzez normalne lub wirtualne przywracanie), możesz wygenerować skrypty dla schematu i danych w następujący sposób:

    • Otwórz Management Studio i połącz się z instancją.
    • Otwórz Eksplorator obiektów.
    • Kliknij prawym przyciskiem myszy nowo przywróconą bazę danych, wybierz Zadania> Generuj skrypty ...
    • Kliknij Dalej, kliknij Dalej
    • Na stronie „Wybierz opcje skryptu” przewiń w dół i ustaw „Dane skryptu” na Prawda
    • Kliknij Następny
    • Sprawdź wszystkie odpowiednie obiekty i kliknij Dalej
    • Sprawdź odpowiednie tabele i kliknij Dalej
    • Wybierz skrypt do pliku. Teraz będziesz mieć plik, który zawiera wszystkie twoje obiekty i dane przy użyciu składni wstawiania SQL Server, będziesz musiał grać z danymi wyjściowymi, aby uzyskać go w formacie, który działa dla Postgres (nie mam uprawnień do żadnych drobnych różnic w składni).

Alternatywnie możesz spróbować grać za pomocą narzędzia bcp, aby wyodrębnić dane do plików CSV lub podobnych, ale będziesz musiał wykonać tę tabelę po tabeli lub użyć sprytnego skryptu (PowerShell, T-SQL, C # / SMO itp. ), aby wygenerować dla ciebie wszystkie polecenia bcp. Gdy znajdziesz się w plikach CSV, zbiorcze ładowanie danych do Postgres powinno być trywialne (ale nadal będziesz mieć trochę pracy, aby wygenerować tabele).

Ostatecznie, jeśli plik .bak nie jest gigantyczny, a dane nie są poufne, chętnie spróbuję wygenerować dla Ciebie pliki w wymaganym formacie. Mam dużo maszyn wirtualnych z systemem Windows z przestrzenią, wyzwaniem byłoby przeniesienie pliku .BAK do miejsca, w którym mogę go odzyskać - zwłaszcza jeśli jest większy niż większość usług udostępniania plików.

Aaron Bertrand
źródło
+1 Miałem zamiar zasugerować metodę bcp, kiedy dotrę do komputera. Niektóre gotchas to ograniczniki tabel, TOŻSAMOŚĆ (sekwencja, w pg), nvarchar, żeby wymienić tylko kilka. W przeciwnym razie zasugerowałbym to (bez Red-Gate) w mojej sekcji edycji.
swasheck
Istnieje 8, 20 GB plików .bak i byłoby wspaniale, gdybyś mógł pomóc, ale zapoznaj się z podobnymi pytaniami na gis.se, gis.stackexchange.com/q/28281/3218 i gis.stackexchange.com/q/28257 / 3218 o bazie danych USDA Soils Database (SSURGO). Obecnie bardzo trudno jest korzystać z dostępu do tych danych w sposób zautomatyzowany do modelowania symulacyjnego. Ogromną korzyścią dla nauki byłoby mieć te dane w bardziej użytecznej strukturze. Możesz pobrać go z mojego serwera. Dane nie są poufne, każdy może je uzyskać za 50 USD / CD lub 100 USD / DVD lub może mniej od swojego agenta rozszerzeń.
Abe
Wygląda na to, że masz odpowiedzi na temat uzyskiwania danych w GIS.SE. Poszedłem i spojrzałem na te witryny, ale nie widzę, gdzie określają, że plik jest kopią zapasową SQL Server. Jak / skąd masz te pliki?
swasheck
7

Niestety nie ma sposobu na uzyskanie dostępu do zawartości pliku .bak bez głębokiej wiedzy o wewnętrznych elementach samego pliku. Mogę wymyślić tutaj jedną osobę, która może mieć dostęp do tych informacji, ale nie mogę powiedzieć, czy dana osoba powie ci, jak to zrobić

Będziesz musiał zainstalować instancję programu SQL Server. Musisz także upewnić się, że to wystąpienie może komunikować się z twoim serwerem Postgres (fregowanie z pg_hba.conf). Tam znajdziesz kilka dobrych ścieżek do migracji danych.

Pierwszą ścieżką byłoby zainstalowanie sterownika ODBC dla systemu Windows Postgres i skonfigurowanie połączenia z serwerem pg. Następnie możesz użyć SSIS do skryptu migracji danych. Jeśli zamierzasz pójść tą drogą, sugeruję zainstalowanie SSIS podczas instalowania serwera bazy danych.

Inna opcja obejmuje również połączenie sterownika ODBC, ale można utworzyć serwer połączony w programie SQL Server i uruchamiać wstawki w instancji pg za pośrednictwem programu SQL Server. Odpowiedziałem na to pytanie już wcześniej, więc nie powinno być trudno go znaleźć.

EDYTOWAĆ

Aby uwzględnić komentarz Aarona, po uruchomieniu programu SQL Server można również wyeksportować dane do płaskich plików na wiele różnych sposobów. Jeśli wybierzesz tę ścieżkę, daj mi znać, a ja opublikuję kilka sposobów, aby to zrobić

EDYCJA (2):

Proces połączonego serwera może nie być najlepszym rozwiązaniem, chyba że chcesz wcześniej utworzyć struktury. To moja preferowana metoda, ale zwykle mam już strukturę po obu stronach.

To pozostawia odpowiedź Aarona Bertranda jako najlepszą odpowiedź. Pamiętaj, że oprócz typów danych ( IDENTITYvs. SEQUENCEpostgres nic nie wie, NVARCHARponieważ ustawiłeś kodowanie w samej bazie danych). Postgres nic nie wie CREATE CLUSTERED INDEX( CLUSTERmoże działać dla Ciebie). Wreszcie, ponieważ widzę w komentarzach, że zamierzasz używać danych przestrzennych, postgresql nie wie nic o CREATE SPATIAL INDEXskładni. Musisz zainstalować postgis i użyć INDEXTYPEsłowa kluczowego, aby utworzyć indeksy przestrzenne. Na koniec upewnij się, że odpowiednio obsługujesz schematy.

Krótko mówiąc:

  1. Generuj skrypty i dane przy użyciu metody Aarona Bertranda (prawdopodobnie trzymałbym się poziomu tabeli)
  2. Zanotuj indeks DDL (jeśli nadal jest ważny), ale nie dołączaj go
  3. Utwórz indeksy dla postgres, gdy struktura i dane będą już na miejscu
swasheck
źródło
3
Nie sądzę, że musisz skonfigurować SQL Server, aby rozmawiać z Postgres. Jestem pewien, że po zainstalowaniu programu SQL Server możesz wyodrębnić dane do różnych formatów, które zrozumie Postgres.
Aaron Bertrand
Przeprosiny. Miałem na myśli, że musisz skonfigurować Postgres, aby akceptował połączenia zewnętrzne (w tym przypadku SQL Server)
swasheck
Nie przepraszaj :-) Właśnie wyjaśniłem, że nie trzeba, aby SQL Server rozmawiał bezpośrednio z Postgres lub odwrotnie ..
Aaron Bertrand