我在本地机器上创建了一个数据库,然后对表DataLabTables进行了名为tables.bak的备份。

我将备份移动到远程机器,没有该表,并尝试进行恢复,但得到以下错误:

sqlclient . sqlerror:操作系统返回 尝试访问时错误'5(访问被拒绝。)' 'RestoreContainer::ValidateTargetForCreation'在c:\程序 文件\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf `。

如果这是问题所在,我该如何修正我的权利?


当前回答

我刚刚有这个问题与SQL Server 2012。

结果证明,我所要做的就是在“文件”部分勾选“将所有文件重新定位到文件夹”:

(点击查看图片完整尺寸)

当然,前提是你安装了正确的SQL Server版本。

其他回答

最近我用SQL 2008 R2遇到了这个问题,下面的解决方案对我有用:

1)创建一个与您试图恢复的数据库同名的新数据库 2)在恢复时,使用与上面使用的名称相同的选项,单击覆盖选项

如果其他解决方案不奏效,你可以尝试上面的方法。

试试这个:

在恢复DB向导窗口,转到文件选项卡,取消“将所有文件重新定位到文件夹”复选框,然后将恢复目标从C:更改为其他驱动器。然后继续执行常规恢复过程。它将成功恢复。

Another scenario could be the existence of multiple database paths. First, make note of the path where new databases are currently being stored. So if you create a new empty database and then do Tasks/Restore, make sure that the path the restore is trying to use is the same directory that the empty database was created in. Even if the restore path is legal, you will still get the access denied error if it is not the current path you are working with. Very easy to spot when the path is not legal, much harder to spot when the path is legal, but not the current path.

在我的情况下,我必须仔细检查我正在恢复的数据库的备份路径。当我第一次做的时候,我已经从不同的路径恢复了它。我修复了备份路径,以使用我第一次使用的备份路径,它工作!

从错误消息中,它说在验证还原操作的目标(c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DataLabTables.mdf)时出现错误。

这听起来像:

a)该文件已经存在(因为您之前已经恢复了它)并且SQL Server正在使用它

or

B)那个目录根本不存在

在你的问题中,你提到你为那个表创建了备份——这不是SQL Server备份的工作方式。这些备份总是整个数据库(或者至少来自该数据库的一个或多个文件组)。

我的直觉是:您之前已经恢复了该数据库,现在,在第二次恢复时,您没有勾选恢复向导中的“覆盖现有数据库”复选框——因此无法覆盖现有文件,恢复失败。

在远程服务器上运行恢复的用户显然无权访问远程服务器上的该目录。

C: \ program files \…是受保护目录-普通(非管理员)用户无法访问此目录(及其子目录)。

最简单的解决方案:尝试将BAK文件放在其他地方(例如C:\temp),然后从那里恢复它