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

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

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

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


当前回答

这可能不是最好的解决方案,但我试图在SQL Server 2005做恢复,但我改为SQL Server 2008,它工作。

其他回答

备份创建者安装了MSSql版本10,因此当他进行备份时,它还存储了原始文件路径(以便能够在相同的位置恢复它),但我使用的是版本11,因此它无法找到目标目录。 所以我把输出文件的目录改为C:\Program Files\Microsoft SQL Server\MSSQL11。MSSQLSERVER\MSSQL\DATA\,它能够成功地恢复数据库。

从错误消息中,它说在验证还原操作的目标(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 2005做恢复,但我改为SQL Server 2008,它工作。

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

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

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

在这个问题上也浪费了几个小时。尽管如此:

“拒绝访问”在我的情况下确实意味着“拒绝访问”。我的windows设备上的mssqlstudio用户帐户没有错误消息中指定的文件夹的完全控制权。我完全控制了它。访问不再被拒绝,恢复成功。

为什么档案室把文件夹锁起来了?谁知道呢?我已经有足够多的问题要解决了,不用再回答了。