2012-11-28 40 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

相关问题