SQL Server数据库还原错误:指定的转换无效。(SqlManagerUI)


91

我将SQL Server 2008 R2 Standard(版本10.50.1600.1)用于我的生产网站,并将SQL Server Express版本和具有Advanced Services(v10.50.1600.1)的localhost作为数据库使用。

几天后,我的SQL Server崩溃了,我不得不在本地主机上安装新的2008 R2 Express版本。当我还原一些从Express版本获取的旧版本时,它工作正常,但是当我尝试.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'

它产生一个不同的错误

消息3154,级别16,状态4,第1行
备份集保存除现有“出版物”数据库以外的数据库备份。
消息3013,级别16,状态1,第1行
RESTORE DATABASE正在异常终止。

我已经交叉检查了版本。如下图所示,它们似乎都与我匹配

以前,我能够将数据库从标准版还原为快速版,但现在失败了。我删除了数据库并尝试重新创建它。那也失败了。

我不确定自己在做什么错。在此方面,我将不胜感激

该问题已解决,因为.bak文件似乎已损坏。当我尝试使用其他文件进行工作时。


我不是这方面的专家,而是一个快速的问题,数据库中的x86和x64体系结构是否兼容?
古斯塔夫·克里姆特

那时我以前有还原数据库,但没有遇到任何此类问题。由于某种原因,它现在会生成错误,我不确定数据库服务器排序规则是否会产生任何问题
学习

尝试添加,REPLACE到T-SQL命令以覆盖现有的AlHabtoorPublications数据库。
SchmitzIT 2012年

我今天在工作中遇到了同样的问题。似乎在执行FTP传输后检查文件大小还不够。似乎该文件非常敏感。在执行传输之前,通过压缩文件解决了该问题。
rofans91 2015年

Scenerio我在SQL SERVER 2008上进行了数据库备份,并尝试在SQL SERVER 2008 R2上还原它。理想情况下,它应该可以正常工作,但是在选择备份文件时,SQL Management Studio 2208 R2引发错误“未指定指定的转换。(SqlManagerUI)”。原因与解决方法这是由于FTP传输过程中.BAK文件损坏(传输模式设置为ASCII)引起的。始终,记住在传输数据库.BAK文件时将FTP传输模式设置为BINARY。
罗汉·萨卡

Answers:


40

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.

奇怪,我重用了您的原始声明。无论如何,我添加的唯一一行是最后一行: , REPLACE
SchmitzIT 2012年

1
实际上,Failed: 38表示reached end of the file。(在命令窗口中,运行NET HELPMSG 38)。这通常表示一个损坏的备份:stackoverflow.com/questions/5656363/...
SchmitzIT

我用较旧的.bak文件测试了还原,该文件没有任何问题。似乎该特定的.bak文件已损坏
学习

可能是坠机的结果。它可能损坏了驱动器的一部分。很高兴听到您使用其他备份解决了问题:)
SchmitzIT 2012年

您的脚本生成以下错误消息Msg 3203,级别16,状态1,行1在“ C:\ Publications.bak”上读取失败:38(未能为此错误检索文本。原因:15105)消息3013,级别16,状态1 ,第1行RESTORE DATABASE异常终止。
2012年


15

终于得到了这个错误,无法恢复。我出于沮丧而搬到了SQL2012,但我想这可能仍适用于2008R2。我必须使用逻辑名称:

RESTORE FILELISTONLY
FROM DISK = location of your.bak file

然后从那里运行MOVE使用逻辑名称的restore语句。

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'

恢复完成后,我几乎高兴地哭了。

祝好运!


4

以下是造成此问题的两个原因:

  1. 在SQL 2012 R2上进行的SQL 2012备份和Restore Headeronly备份

  2. 备份媒体已损坏。

如果运行以下命令,则始终可以发现实际错误:

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

在引号中给出数据库文件的完整位置

希望能帮助到你

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.