![恢复数据库时出错(Windows 7 测试环境)](https://linux22.com/image/511502/%E6%81%A2%E5%A4%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E6%97%B6%E5%87%BA%E9%94%99%EF%BC%88Windows%207%20%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83%EF%BC%89.png)
我有一个 Windows 7 操作系统作为测试环境。我安装了 SQL Server EE,有两个实例,分别名为测试和生产。我从测试实例的 AdventureWorks 数据库中进行了完整备份,并尝试将其恢复到生产实例中:
RESTORE DATABASE [testikanta] FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\Backup\AdventureWorks.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10
GO
我收到一条错误消息:
Msg 3634, Level 16, State 1, Line 1
The operating system returned the error '32(failed to retrieve text for this error. Reason: 15105)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Data.mdf'.
Msg 3156, Level 16, State 8, Line 1
File 'AdventureWorks_Data' cannot be restored to 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Data.mdf'. Use WITH MOVE to identify a valid location for the file.
Msg 3634, Level 16, State 1, Line 1
The operating system returned the error '32(failed to retrieve text for this error. Reason: 15105)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Log.ldf'.
Msg 3156, Level 16, State 8, Line 1
File 'AdventureWorks_Log' cannot be restored to 'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008TESTI\MSSQL\DATA\AdventureWorks_Log.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 1
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.
问题出在哪里?我以本地机器管理员身份运行这些实例(SQL Server 服务使用同一帐户运行)。
答案1
“32(无法检索此错误的文本。原因:15105)”
经过一番搜索,这似乎是 SQL Server 无法正确报告操作系统(Win32 API)错误的方式。
错误 32 是 ERROR_SHARING_VIOLATION“该进程无法访问该文件,因为该文件正在被另一个进程使用。”
某些其他程序打开了该文件,这可能是其他连接,甚至是用于执行恢复的连接,也打开了 AdventureWorks。
答案2
就我而言,这是非常愚蠢的事情。经过多次检查,我没有意识到 SAS 的开始日期是错误的“将来日期”。在墨西哥,我们使用 dd/mm/yyyy,问题在于捕获的日期是“mm/dd/yyyy”,而该日期是将来日期。更新该日期后,恢复成功。
答案3
我遇到了完全相同的问题。将 xxx.mdf 更改为 xxx2.mdf(和日志) - 也就是说 - 只需更改名称即可解决。恢复会自动删除 xxx.mdf 文件。不知道是什么让它继续进行... 如果您确实希望它是 xxx.mdf,您可以在 xxx2.mdf 完成后进行额外的恢复... 很奇怪但它没有错误。所以完整 --> 原始名称为 xxx.mdf 和 xxx.ldf
从磁盘恢复数据库 ThedatebaseName
= 'D:\SQLbackup\mybackup.bak'
WITH MOVE 'PhysicalName' TO 'D:\SQL\xxx2.mdf',
MOVE 'PhysicalName_log' TO 'D:\SQL\xxx2.ldf',
REPLACE,STATS
GO
物理名称是您手动恢复时看到的名称,或者使用: 从磁盘
恢复文件列表 仅显示名称。祝你好运。
答案4
在我的情况下,.mdf 和 .ldb 都位于要还原到的目录以外的其他目录中。因此也请检查目录。