Błąd przywracania bazy danych programu SQL Server: określone rzutowanie jest nieprawidłowe. (SqlManagerUI)

91

Używam programu SQL Server 2008 R2 Standard (wersja 10.50.1600.1) dla mojej produkcyjnej witryny sieci Web i wersji SQL Server Express z usługami zaawansowanymi (wersja 10.50.1600.1) dla mojego hosta lokalnego jako bazy danych.

Kilka dni temu mój SQL Server uległ awarii i musiałem zainstalować nową wersję 2008 R2 Express na moim hoście lokalnym. Działało dobrze, gdy przywróciłem niektóre starsze wersje pobrane z edycji Express, ale gdy próbuję przywrócić bazę danych z .bakpliku pobranego z serwera produkcyjnego, powoduje to następujący błąd:

Błąd: określona obsada jest nieprawidłowa. (SqlManagerUI)

i kiedy próbuję przywrócić bazę danych za pomocą polecenia

Use Master
Go
RESTORE DATABASE Publications
FROM DISK = 'C:\Publications.bak'
WITH MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
MOVE 'AlPublications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'

Generuje inny błąd

Msg 3154, poziom 16, stan 4, wiersz 1
Zestaw kopii zapasowych zawiera kopię zapasową bazy danych innej niż istniejąca baza danych „Publikacje”.
Msg 3013, poziom 16, stan 1, wiersz 1
RESTORE DATABASE kończy się nieprawidłowo.

Sprawdziłem wersje. Wszystkie wydają się pasować do mnie, jak pokazano na poniższym obrazku

Wcześniej udało mi się przywrócić bazę danych z wersji standardowej do wersji ekspresowej, ale teraz to się nie udaje. Usunąłem bazę danych i próbowałem ją odtworzyć. To też zawodzi.

Nie jestem pewien, co robię źle. Byłbym wdzięczny za pomoc w tej sprawie

Problem został rozwiązany, ponieważ wygląda na to, że plik .bak był uszkodzony. Kiedy próbowałem to z innym plikiem, zadziałało.

Uczenie się
źródło
Nie jestem profesjonalistą w tym, ale szybkie pytanie, czy architektura x86 i x64 w bazie danych jest kompatybilna?
Gustav Klimt
Miałem poprzednią bazę danych do przywracania, w tym czasie nie napotkałem takiego problemu. z jakiegoś powodu teraz generuje błędy Nie jestem pewien, czy sortowanie serwera bazy danych stwarza jakiekolwiek problemy
Learning
Spróbuj dodać ,REPLACEdo polecenia T-SQL, aby nadpisać istniejącą bazę danych AlHabtoorPublications.
SchmitzIT
Trafiłem dzisiaj w ten sam problem w pracy .. Wygląda na to, że sprawdzanie rozmiaru pliku po wykonaniu transferu FTP nie wystarcza. Wygląda na to, że plik jest bardzo wrażliwy. Rozwiązano problem przez spakowanie pliku przed wykonaniem transferu.
rofans91
Scenerio Zrobiłem kopię zapasową bazy danych na SQL SERVER 2008 i próbowałem ją przywrócić na SQL SERVER 2008 R2. Idealnie powinno działać dobrze, ale podczas wybierania pliku kopii zapasowej program SQL Management Studio 2208 R2 zgłosił błąd „Nie określono określonego rzutowania. (SqlManagerUI)”. Przyczyna i rozwiązywanie problemów Było to spowodowane uszkodzeniem pliku .BAK podczas transferu FTP (tryb transferu jest ustawiony na ASCII). Zawsze pamiętaj o ustawieniu trybu transferu FTP na BINARY podczas przesyłania bazy danych do pliku .BAK.
Rohan Sarkar

Odpowiedzi:

40

Graficzny interfejs użytkownika może być czasami zmienny. Błąd, który wystąpił podczas korzystania z T-SQL, polega na tym, że próbujesz zastąpić istniejącą bazę danych, ale nie określono, aby nadpisać / zastąpić istniejącą bazę danych. Poniższe mogą działać:

Use Master
Go
RESTORE DATABASE Publications
  FROM DISK = 'C:\Publications_backup_2012_10_15_010004_5648316.bak'
  WITH 
    MOVE 'Publications' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.mdf',--adjust path
    MOVE 'Publications_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS2008R2\MSSQL\DATA\Publications.ldf'
, REPLACE -- Add REPLACE to specify the existing database which should be overwritten.
SchmitzIT
źródło
Dziwne, ponownie wykorzystałem twoje oryginalne oświadczenie. W każdym razie jedyną rzeczą, jaką dodałem, była ostatnia linia: , REPLACE
SchmitzIT
1
Właściwie to Failed: 38wskazuje reached end of the file. (W oknie poleceń uruchom NET HELPMSG 38). To zwykle wskazuje na uszkodzoną kopię zapasową: stackoverflow.com/questions/5656363/ ...
SchmitzIT
Testowałem przywracanie z nieco starszym plikiem .bak, który został przywrócony bez żadnego problemu. Wygląda na to, że ten konkretny plik .bak jest uszkodzony
nauka
To mogło być wynikiem katastrofy. Mogło zepsuć części napędu. Cieszę się, że udało ci się rozwiązać problem z inną kopią zapasową :)
SchmitzIT
Skrypt generuje następujący błąd Msg 3203, poziom 16, stan 1, wiersz 1 Odczyt „C: \ Publications.bak” nie powiódł się: 38 (nie udało się pobrać tekstu tego błędu. Przyczyna: 15105) Msg 3013, poziom 16, stan 1 , Linia 1 RESTORE DATABASE kończy się nieprawidłowo.
Nauka
163

Może to być spowodowane przywróceniem pliku kopii zapasowej wersji programu SQL Server 2012 do programu SQL Server 2008 R2 lub nawet niższego.

Subhash Makkena
źródło
4
Zamiast tego należałoby użyć opcji „Generuj skrypt”.
kroiz
4
To był mój problem. Wydaje się, że MS nie byłoby zbyt trudne, aby przekazać bardziej pomocną wiadomość w niektórych z tych przypadków.
John Gilmer
Pinal Dave wyjaśnia powody tutaj - blog.sqlauthority.com/2015/06/01/…
shrivb
15

W końcu pojawił się ten błąd, aby przejść do przywracania. Przeniosłem się na SQL2012 z frustracji, ale myślę, że to prawdopodobnie nadal będzie działać w 2008R2. Musiałem użyć logicznych nazw:

RESTORE FILELISTONLY
FROM DISK = ‘location of your.bak file

Stamtąd uruchomiłem instrukcję przywracania z MOVEużyciem nazw logicznych.

RESTORE DATABASE database1
FROM DISK = '\\database path\database.bak'
WITH
MOVE 'File_Data' TO 'E:\location\database.mdf',
MOVE 'File_DOCS' TO 'E:\location\database_1.ndf',
MOVE 'file' TO 'E:\location\database_2.ndf',
MOVE 'file' TO 'E:\location\database_3.ndf',
MOVE 'file_Log' TO 'E:\location\database.ldf'

Kiedy skończył się przywracanie, prawie zapłakałem z radości.

Powodzenia!

Sara Anderson Noonan
źródło
4

Poniżej mogą być 2 przyczyny tego problemu:

  1. Kopia zapasowa wykonana w SQL 2012, a Restore Headeronly została wykonana w SQL 2008 R2

  2. Nośnik kopii zapasowej jest uszkodzony.

Jeśli uruchomimy poniższe polecenie, zawsze możemy znaleźć rzeczywisty błąd:

restore headeronly
from disk = 'C:\Users\Public\Database.bak'

Podaj pełną lokalizację pliku bazy danych w cudzysłowie

Mam nadzieję, że to pomoże

Keren Caelen
źródło