Przywracanie kopii zapasowej SQL Server powoduje błąd

15

Mam bazę danych w dev (SQL Server 2005 w systemie Windows Server 2008), którą muszę przenieść do prod (SQL Server 2000 w systemie Windows Server 2003). Mój proces wygląda następująco:

  1. Zaloguj się do dev, otwórz SQL Server Management Studio
  2. Kliknij bazę danych prawym przyciskiem myszy | Zadania | Utworzyć kopię zapasową. Zachowaj wszystkie domyślne opcje (pełna kopia zapasowa itp.)
  3. Przenieś plik .bak lokalnie do prod (bez dysku sieciowego), zaloguj się do prod, otwórz SQL Server Enterprise Manager.
  4. Kliknij prawym przyciskiem myszy węzeł Bazy danych | Wszystkie zadania | Przywróć bazę danych.
  5. Zmień Przywróć jako bazę danych, aby odzwierciedlała tę samą nazwę bazy danych.
  6. Kliknij przycisk opcji „Z urządzenia”. Kliknij „Wybierz urządzenia”
  7. Kliknij Przywróć z: Dodaj ..., przejdź do pliku .bak (mały - tylko 6 MB)

Teraz jestem gotowy, aby przywrócić bazę danych, więc klikam OK i pojawia się następujący błąd:

„Rodzina mediów na urządzeniu„ E:… bak ”jest niepoprawnie utworzona. SQL Server nie może przetworzyć tej rodziny mediów. PRZYWRACANIE BAZY DANYCH kończy się nieprawidłowo.”

Ten błąd jest natychmiastowy.

Wypróbowałem kilka różnych odmian tego - przywracanie bazy danych na maszynie deweloperskiej z inną nazwą bazy danych i nazwami plików dziennika (skąd pochodzi), tworzenie wcześniejszej pustej bazy danych z tą samą fizyczną ścieżką do plików i próba jej przywrócenia, wykonanie kilku różnych plików .bak i upewnienie się, że zostały zweryfikowane przed przesłaniem ich do prod. Wiem, że katalog plików .mdf i .ldf istnieje na prod, chociaż same pliki nie istnieją. Jeśli przed kliknięciem OK, aby przywrócić, przejdź do karty opcji, zamiast tego pojawia się następujący błąd:

Błąd 3241: Niepoprawnie utworzono rodzinę multimediów na urządzeniu „E: ... bak”. SQL Server nie może przetworzyć tej rodziny mediów. PRZYWRACANIE FILELISTA kończy się nieprawidłowo.

Czy ktoś ma jakieś jasne pomysły?

Mario
źródło
Zgadzam się, spędziłem nad tym dzień i zmarnowałem swój czas, wydaje się, że jest to problem z kompatybilnością wsteczną, w moim przypadku 2k8 R2 do 2k5.

Odpowiedzi:

7

Nagłówki kopii zapasowych w MSSQL2008 różnią się od tych w MSSQL2005, co prawdopodobnie jest źródłem problemu. Spróbuj wyeksportować bazę danych zamiast paradygmatu przywracania kopii zapasowych lub skonfiguruj MSSQL2008 na serwerze DEV.

Thunder3
źródło
4

Jak mówi Mike Dimmick - SQL 2000 nie rozpoznaje kopii zapasowych SQL 2005 (tak jak Word 2000 nie rozpoznaje plików DOCX z 2007 roku). Dlatego musisz przeprowadzić migrację danych w mniejszym wspólnym formacie mianownika, takim jak skrypty SQL. Wypróbuj Kreatora publikacji bazy danych, który jest częścią SQL Server Hosting Toolkit, który generuje pojedynczy plik SQL zarówno dla schematu, jak i danych.

Duncan Smart
źródło
1
Ważne jest, aby sprawdzić, czy masz zainstalowany SqlExpress (możesz go zainstalować, nie wiedząc, że go masz). Bardzo łatwo przez pomyłkę zalogować się do SqlExpress, a następnie panikować, ponieważ nie pozwoli ci to przywrócić do niego bazy danych z 2008 roku. Jest to prawdopodobnie bardzo częsty powód tego błędu.
Simon
2

Możesz przenosić kopie zapasowe do przodu w rodzinie SQL Server, tj. 2000 do 2005 lub 2008, ale nie wstecz: nie można przywrócić kopii zapasowej SQL Server 2005 na SQL Server 2000.

Mike Dimmick
źródło
1

Możliwe, że problem z uprawnieniami uniemożliwia utworzenie pliku podczas próby przywrócenia. Spróbuj utworzyć nową bazę danych na celu o tej samej nazwie, którą chcesz, a następnie przywrócić nad nią.

Ponadto, jeśli próbujesz przywrócić kopię zapasową z zewnętrznego dysku twardego lub udziału sieciowego, spróbuj skopiować plik kopii zapasowej na komputer lokalny przed przystąpieniem do przywracania.


źródło
1

Domyślnie są dwa eksploratory obiektów z SQL Server 2005. Myślę, że próbujesz na obiekcie serwer / sqlexpress. Spróbuj przywrócić do innego.


źródło
1

(Z ulgą westchnął.) Ahhhhh, to jest problem.

Mam SQL Server 2008 SP1 działający na zdalnym komputerze. Utworzyłem kopię zapasową bazy danych, ale nie mogłem przywrócić mojej lokalnej wersji SQL Server 2008 do przywrócenia z pliku .bak.

Jak mówi [Yini], było to spowodowane moją kopią SQL Server 2008 otwierającą moją instancję SQL Server 2005 na moim lokalnym komputerze, a nie moją instancję SQL Server 2008. Geniusz.

I całkowicie się zgadzam z [Yini] - wystarczy, że nie można przywrócić kopii zapasowej SQL Server 2008 do instancji z 2005 r., Ale Microsoft może przynajmniej dać nam przyzwoity komunikat o błędzie.

„Rodzina multimediów na urządzeniu„ D: \ DatabaseBackup_21_02_2011.bak ”jest niepoprawnie utworzona. SQL Server nie może przetworzyć tej rodziny multimediów.”

Moja kopia zapasowa nie została poprawnie utworzona. Po prostu nie można go przywrócić do wystąpienia SQL Server 2005 , nawet jeśli korzystam z SQL Server 2008 SP1.

Czy naprawdę tak trudno jest umieścić to w komunikacie o błędzie ............?

Mike Gledhill
źródło
0

Kilka myśli:

  • Przybliżony rozmiar przywracanej bazy danych?
    Jedyny artykuł pomocniczy dotyczący tego błędu dotyczy SQL 2000 i mówi o dużych plikach dziennika. Chociaż nie korzystasz z SQL 2000, spróbuj najpierw zmniejszyć rozmiar dzienników, jeśli są one szczególnie duże.

  • Czy możesz przywrócić bazę danych na serwerze deweloperskim (pod inną nazwą db, do różnych plików)? To by udowodniło, czy sam plik jest w porządku, jeśli chodzi o SQL 2005.

  • Czy możesz przywrócić jakiekolwiek inne bazy danych z tego serwera deweloperskiego do Prod?

Rory
źródło
0

Cześć wszystkim, jak sugeruje Mike, poleciłbym Kreatora publikowania baz danych, robi to pięknie.

Oto obejście, którego początkowo użyłem , którego nie do końca sugerowałbym - wydaje się nieco getto .


1) Utwórz db na prod, utwórz użytkownika db z odpowiednimi prawami, otwórz port w firewallu, który umożliwia zdalny dostęp
2) Z poziomu dev w SQL Server Management Studio, kliknij prawym przyciskiem myszy db -> zadania -> eksportuj dane. Wybierając miejsce docelowe, należy podać port xxx.xxx.xxx.xxx, 1764.
3) Wybierz wszystkie tabele, które chcesz przesłać, kliknij następne 100 razy i gotowe.

OSTRZEŻENIE: Nie kopiuje to procedur przechowywanych.
OSTRZEŻENIE: To nie kopiuje tożsamości dla int kolumn

AKTUALIZACJA: Wygląda na to, że nie możesz przejść od 2005 do 2000 roku. Znalazłem następujący tekst linku do postu - wygląda na to, że możesz użyć moich metod powyżej, ale chcesz także napisać skrypt do wszystkich obiektów, a następnie uruchomić go w 2000 roku.

Mario
źródło