SQL Server还原错误-访问被拒绝


167

我在本地计算机上创建了一个数据库,然后进行了名为tables.baktable 的备份DataLabTables

我将该备份移到了没有该表的远程计算机上,并试图进行还原,但是出现以下错误:

System.Data.SqlClient.SqlError:尝试在c:\ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DataLabTables上尝试“ RestoreContainer :: ValidateTargetForCreation”时,操作系统返回错误“ 5(访问被拒绝。)” .mdf”。

如果那是问题,我应如何解决我的权利?

Answers:


539

我刚在SQL Server 2012中遇到此问题。

事实证明,我要做的就是勾选“文件”部分中标记为“将所有文件重定位到文件夹”的框:

在此处输入图片说明

(点击查看原图)

当然,这假定您已安装了正确版本的SQL Server。


13
也为我工作。谁能解释为什么
magnattic

3
您还可以分享如何通过脚本而不是UI来完成此操作吗?
FMFF

9
我在2014年遇到这个问题,修复方法相同。
DaneEdw

3
从SQL Express备份并还原到完整的SQL Server时,这也是我的解决方案
tarrball

10
我需要给你一个拥抱。现在说真的,我要对客户说不,您的回答保存了我的项目。
Marco Scabbiolo,2017年

30

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

听起来像:

a)该文件已经存在(因为您之前已经将其还原)并且已被SQL Server使用

要么

b)该目录根本不存在

在您的问题中,您提到您为该表创建了备份-这不是SQL Server备份的工作方式。这些备份始终是整个数据库(或该数据库中的至少一个或几个文件组)。

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

在远程服务器上运行还原的用户显然无法访问远程服务器上的该目录。

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

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


我在C:\ temp下尝试,但错误仍然与上面相同,与我第一次提到的路径相同,这很奇怪
cdub 2011年

我右键单击SQL Management Studio中的“数据库”,然后单击“任务”->“还原”
cdub

1
@marc_s thx,我忘了编辑选项,因为该文件没有目录...不是... MSSQL \ DataLabTables.mdf,而是... MSSQL \ Data \ DataLabTables.mdf
cdub,2011年

2
@marc_s:对上面列出的选项A的“和正在由SQL Server使用”部分进行少量注释:RESTORE即使文件存在,即使没有被SQL Server使用(例如MDF / LDF文件在先前的分离后仍保留在原位)。我在一个基于T-SQL的自定义日志传送实现中遇到了这个问题,该实现在过去几周内主要迁移了数百个DB。我不确定错误消息是否为“访问被拒绝”,可能不是很具体。

2
我必须手动重命名现有的MDF / LDF文件,然后才能通过备份进行还原-检查“覆盖”是不够的。
Jamie Keeling

26

我遇到了同样的问题。原来,我SQL ServerSQL Server Agent服务logon as都在Network Services没有写访问权限帐户,无法执行备份的还原。

我将这两个服务都更改为以as身份登录Local System Account,这解决了该问题。


这不是一个好主意。它掩盖了真正的问题,即您要还原到的文件位置不是您想要的文件位置。
2016年

2
我的SQL Server服务在“ NT Service \ MSSQLSERVER”上运行,向该用户添加了对此用户的权限,并为其使用了data和log文件夹。
牛顿

很好,这对我有所帮助
Aliaksei Zhukau

9

最近,我在SQL 2008 R2中遇到了这个问题,以下解决方案为我工作:

1)创建一个与要还原的数据库名称相同的新数据库。2)还原时,使用上面使用的名称,并在选项中单击覆盖选项

如果其他解决方案无效,则可以尝试一下。


6

备份创建者安装了MSSql版本10,因此当他进行备份时,它还存储了原始文件路径(以便能够在同一位置还原它),但是我安装了版本11,因此找不到目标目录。

因此,我将输出文件目录更改为C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \,它能够成功还原数据库。

资源


6

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

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


2

由于这个问题也损失了几个小时。做到了:

在我看来,“拒绝访问”确实意味着“拒绝访问”。Windows设备上的mssqlstudio用户帐户无法完全控制错误消息中指定的文件夹。我完全控制了它。访问不再被拒绝,还原成功。

为什么文件夹被锁定在studio中?谁知道 ?我有足够的问题可以解决,而无需尝试回答更多。


1

我遇到了这个问题,我以管理员身份登录,它解决了该问题。


同样为我工作的SSMS
v17

0

另一种情况可能是存在多个数据库路径。首先,记下当前正在存储新数据库的路径。因此,如果先创建一个新的空数据库,然后执行do Tasks/Restore,请确保还原尝试使用的路径与创建该空数据库的路径相同。即使还原路径合法,您仍然会拒绝访问如果不是您正在使用的当前路径,则返回错误。在路径不合法时非常容易发现,在路径合法时很难发现,但是在当前路径下很难发现。


0

抱歉,我无法发表评论...

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


0

这可能不是最好的解决方案,但是我试图在SQL Server 2005上进行还原,但是我改用了SQL Server 2008,它可以正常工作。



0

Frnds ...我在恢复数据库时遇到了相同的问题,并尝试了每种解决方案,但都无法解决。然后,我尝试重新安装SQL 2005,问题解决了。上次确实是我忘了在安装SQL时检查了custom选项。安装时出现了两次,我只检查了一次。


0

就我而言-我必须仔细检查要还原的数据库的备份路径。第一次做时,我以前是从其他路径恢复过的。我修复了备份路径,以使用我第一次使用的备份路径,并且可以正常工作!


0

我最终为数据和日志创建了新文件夹,并且它可以正常工作,必须是文件夹/文件权限问题。


0

如果路径正确,但服务帐户不是数据文件的所有者,也会发生这种情况(但它仍然具有足够的权限进行读/写访问)。如果将文件的权限重置为与文件夹的权限相匹配(当然,服务已停止),则会发生这种情况。

在这种情况下,最简单的解决方案是分离每个数据库,然后再次附加它(因为附加所有者时已更改为服务帐户)。


-1

试试这个:

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


-1

我遇到了同样的问题,但是我使用的是sql server 2008 r2,您必须检入选项并验证sql要保存文件.mdf和.ldf的路径,您必须选择sql server安装的路径。我已经解决了这个问题,希望对您有所帮助。


-2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.