93

我将 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 文件似乎已损坏。当我尝试使用不同的文件时,它起作用了。

4

4 回答 4

164

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

于 2013-10-14T03:38:22.850 回答
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.
于 2012-11-28T12:20:34.097 回答
15

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

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

祝你好运!

于 2013-07-10T16:20:56.690 回答
4

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

  1. 在 SQL 2012 上进行的备份和还原 Headeronly 是在 SQL 2008 R2 中完成的

  2. 备份媒体已损坏。

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

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

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

希望能帮助到你

于 2018-06-20T10:08:21.120 回答