2012-11-28 42 views
82

我爲我的生產網站使用SQL Server 2008 R2標準版(版本10.50.1600.1),使用高級服務(v10.50.1600.1)的SQL Server Express版本 作爲數據庫的本地主機。SQL Server數據庫恢復錯誤:指定的轉換無效。 (SqlManagerUI)

幾天後我的SQL Server崩潰了,我不得不在我的本地主機上安裝一個新的2008 R2 Express版本。它工作得很好,當我恢復從Express版本採取了一些老版本的,但是當我嘗試從是從生產服務器取它導致以下錯誤.bak文件恢復數據庫:

Error: Specified cast is not valid. (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
The backup set holds a backup of a database other than the existing 'Publications' database.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

我具有交叉檢查版本。如下圖所示,它們都與我匹配

以前我能夠從標準版本恢復數據庫以表達版本,但現在它失敗了。我刪除了數據庫並嘗試重新創建它。這也失敗了。

我不知道我在做什麼錯。我希望在這方面的幫助

問題已得到解決,因爲它似乎.bak文件已損壞。當我嘗試使用不同的文件時,它工作。

+0

即時通訊不贊成在這個,但快速的問題,是數據庫兼容的x86和x64 arhitecture? –

+0

我之前有過恢復數據庫,當時我沒有遇到過這樣的問題。由於某種原因,現在它產生錯誤我不確定數據庫服務器排序是否會產生任何問題 – Learning

+0

嘗試向T-SQL命令添加',REPLACE'以覆蓋現有的AlHabtoorPublications數據庫。 – SchmitzIT

回答

38

圖形用戶界面可能會變幻不定。使用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. 
+0

奇怪,我重複使用了你原來的陳述。在任何情況下,我添加的唯一字母是最後一行: ',REPLACE' – SchmitzIT

+0

令人沮喪的是,我希望我能儘快解決它 – Learning

+1

實際上,'Failed:38'表示'到達文件末尾'。 (在命令窗口中,運行NET HELPMSG 38)。這通常表明一個損壞的備份:http://stackoverflow.com/questions/5656363/restore-sql-server-database-failed-38reached-the-end-of-the-file – SchmitzIT

12

終於得到這個錯誤消失的恢復。我從失望中轉移到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' 

當它完成恢復時,我幾乎喜悅地哭泣。

祝你好運!

152

可能是因爲將SQL Server 2012版本備份文件還原到SQL Server 2008 R2或更少。

+10

你碰到了我的指甲:) – ABH

+2

你需要使用「生成腳本」來代替。 – kroiz

+0

絕對是我的問題。 – SimonGoldstone

相關問題