[sql-server] SQL Server 데이터베이스 복원 오류 : 지정된 캐스트가 유효하지 않습니다. (SqlManagerUI)

프로덕션 웹 사이트에는 SQL Server 2008 R2 Standard (버전 10.50.1600.1)를 사용하고 로컬 호스트에는 SQL Server Express 에디션 (v10.50.1600.1)을 데이터베이스로 사용하고 있습니다.

며칠 전 SQL Server가 충돌하여 로컬 호스트에 새로운 2008 R2 Express 버전을 설치해야했습니다. Express Edition에서 가져온 일부 이전 버전을 복원하면 제대로 작동했지만 .bak프로덕션 서버에서 가져온 파일 에서 데이터베이스를 복원하려고 하면 다음 오류가 발생합니다.

오류 : 지정된 캐스트가 유효하지 않습니다. (SqlManagerUI)

명령을 사용하여 데이터베이스를 복원하려고 할 때

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'

다른 오류가 발생합니다.

Msg 3154, Level 16, State 4, Line 1
백업 세트는 기존 ‘Publications’데이터베이스가 아닌 데이터베이스의 백업을 보유합니다.
메시지 3013, 수준 16, 상태 1, 줄 1
RESTORE DATABASE가 비정상적으로 종료됩니다.

버전을 교차 확인했습니다. 아래 이미지와 같이 모두 나와 일치하는 것 같습니다.

이전에는 표준 버전에서 Express 버전으로 데이터베이스를 복원 할 수 있었지만 지금은 실패합니다. 데이터베이스를 삭제하고 다시 만들려고했습니다. 그것도 실패합니다.

내가 뭘 잘못하고 있는지 잘 모르겠습니다. 나는 이와 관련하여 도움을 주시면 감사하겠습니다.

.bak 파일이 손상된 것 같아 문제가 해결 되었습니다. 다른 파일로 시도했을 때 작동했습니다.



답변

GUI는 때때로 변덕 스러울 수 있습니다. T-SQL을 사용할 때 발생하는 오류는 기존 데이터베이스를 덮어 쓰려고하지만 기존 데이터베이스를 덮어 쓰거나 바꾸도록 지정하지 않았기 때문입니다. 다음이 작동 할 수 있습니다.

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.


답변

SQL Server 2012 버전 백업 파일을 SQL Server 2008 R2 이하로 복원했기 때문일 수 있습니다.


답변

마침내 복원을 위해이 오류가 발생했습니다. 좌절감으로 SQL2012로 옮겼지만 2008R2에서도 여전히 작동 할 것 같습니다. 논리적 이름을 사용해야했습니다.

RESTORE FILELISTONLY
FROM DISK = location of your.bak file

그리고 거기에서 MOVE논리적 이름 을 사용하여 복원 문을 실행했습니다 .

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'

회복이 끝났을 때 나는 거의 기쁨으로 울었습니다.

행운을 빕니다!


답변

이 문제의 두 가지 이유는 다음과 같습니다.

  1. SQL 2012에서 수행 된 백업 및 헤더 만 복원은 SQL 2008 R2에서 수행되었습니다.

  2. 백업 미디어가 손상되었습니다.

아래 명령을 실행하면 항상 실제 오류를 찾을 수 있습니다.

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

견적서에 데이터베이스 파일의 전체 위치를 제공하십시오.

도움이되기를 바랍니다.


답변