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

Lea*_*ing 90 sql-server database-restore sql-server-2008

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

几天后我的SQL Server崩溃了,我不得不在我的localhost上安装一个新的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'
Run Code Online (Sandbox Code Playgroud)

它会产生不同的错误

消息3154,级别16,状态4,行1
备份集保存除现有"发布"数据库之外的数据库的备份.
消息3013,级别16,状态1,行1
RESTORE DATABASE异常终止.

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

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

我不确定我做错了什么.我很感激这方面的帮助

问题已解决,因为.bak文件似乎已损坏.当我用不同的文件尝试它时,它工作.

Sub*_*ena 161

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

  • 你为我打了钉头:) (12认同)
  • 人们需要使用"生成脚本". (4认同)
  • 这是我的问题.对于MS来说,为某些案例提供更有用的信息似乎并不难. (4认同)

Sch*_*zIT 39

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.
Run Code Online (Sandbox Code Playgroud)


小智 15

终于得到了这个错误,以便在恢复时消失.我沮丧地转移到SQL2012,但我想这可能仍然适用于2008R2.我不得不使用逻辑名称:

RESTORE FILELISTONLY
FROM DISK = ‘location of your.bak file’
Run Code Online (Sandbox Code Playgroud)

从那里我运行了一个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'
Run Code Online (Sandbox Code Playgroud)

当它完成恢复时,我几乎快乐地哭泣.

祝好运!


Ker*_*len 5

造成此问题的原因可能有以下 2 个:

  1. 在 SQL 2012 上进行的备份和仅恢复标头是在 SQL 2008 R2 中完成的

  2. 备份介质已损坏。

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

restore headeronly
from disk = 'C:\Users\Public\Database.bak'
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你