ChatGPT解决这个技术问题 Extra ChatGPT

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 版本中获取的一些旧版本时它工作正常,但是当我尝试从从生产服务器获取的 .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 数据库。
我今天在工作中遇到了同样的问题。似乎在进行 FTP 传输后检查文件大小还不够。似乎该文件非常敏感。通过在执行传输之前压缩文件解决了该问题。
Scenerio 我在 SQL SERVER 2008 上进行了数据库备份,并尝试在 SQL SERVER 2008 R2 上恢复它。理想情况下,它应该可以正常工作,但在选择备份文件时,SQL Management Studio 2208 R2 出现错误“未指定指定的转换。(SqlManagerUI)”。原因和故障排除 这是由于 .BAK 文件在 FTP 传输期间损坏(传输模式设置为 ASCII)。始终,请记住在传输数据库 .BAK 文件时将 FTP 传输模式设置为 BINARY。

S
Subhash Makkena

可能是因为将 SQL Server 2012 版本的备份文件还原到 SQL Server 2008 R2 甚至更低。


需要改用“生成脚本”。
这是我的问题。对于其中一些案例,MS 似乎并不难提供更有帮助的信息。
Pinal Dave 在这里解释了原因 -blog.sqlauthority.com/2015/06/01/…
I
Irshad

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
实际上,Failed: 38 表示 reached end of the file。 (在命令窗口中,运行 NET HELPMSG 38)。这通常表示备份损坏:stackoverflow.com/questions/5656363/…
我使用较旧的 .bak 文件测试了恢复,该文件恢复时没有任何问题。这个特定的 .bak 文件似乎已损坏
可能是坠机的结果。它可能会破坏驱动器的某些部分。很高兴听到您设法通过不同的备份解决了这个问题:)
您的脚本生成以下错误 Msg 3203, Level 16, State 1, Line 1 Read on "C:\Publications.bak" failed: 38(failed to retrieve text for this error. Reason: 15105) Msg 3013, Level 16, State 1 , 第 1 行 RESTORE DATABASE 异常终止。
C
Chris Peters

最后得到这个错误在恢复中消失。出于沮丧,我转向了 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'

当它完成恢复时,我几乎高兴地哭了。

祝你好运!


K
Keren Caelen

以下可能是此问题的 2 个原因:

在 SQL 2012 上进行的备份和在 SQL 2008 R2 中完成的仅还原 Header 备份媒体已损坏。

如果我们运行下面的命令,我们总是可以找到实际的错误:

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

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

希望能帮助到你