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

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

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

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


当前回答

我也遇到过类似的问题。我试图恢复一个2005年的。bak文件,我收到了完全相同的错误。我也选择了覆盖选项,但无济于事。

我的解决方案是通过转到文件夹并通过属性屏幕编辑访问权限,授予SQL用户对所讨论的目录的访问权限。

其他回答

Frnds……我在恢复数据库时遇到了同样的问题,并尝试了所有解决方案,但无法解决。然后我尝试重新安装SQL 2005,问题解决了。实际上,上次我在安装SQL时忘记检查自定义选项..它来两次安装和我检查它只有一个..

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

这听起来像:

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

or

B)那个目录根本不存在

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

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

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

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

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

抱歉,因为我不能评论…

我也有同样的问题。在我的情况下,问题与试图恢复在一个旧的sql server文件夹(存在于服务器上)有关。这是由于旧的sql server备份(即sql server 2012备份)在新的sql server (sql server 2014)中恢复。真正的问题与@marc_s的回答没有太大的不同。无论如何,我只是将目标文件夹更改为新的SQL Server DATA文件夹。

然后尝试将其移动到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.