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

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

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

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


当前回答

我最终为数据和日志制作了新的文件夹,它工作正常,一定是文件夹/文件权限问题。

其他回答

然后尝试将其移动到C:下的子文件夹,但要验证用户对您使用的文件夹具有完全权限。

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

这听起来像:

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

or

B)那个目录根本不存在

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

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

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

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

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

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

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

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.

我也有同样的问题。原来我的SQL Server和SQL Server代理服务登录时在网络服务帐户下运行,该帐户没有执行备份恢复的写访问权。

我将这两个服务都更改为以本地系统帐户登录,这就解决了问题。