3

我有一个 SQL Server 数据库,其中数据和日志文件存储在外部 USB 驱动器上。当我不在办公室时,我在办公室的主要开发机器和笔记本电脑之间切换外部驱动器。在台式机和笔记本电脑之间移动时,我正在尝试使用 sp_detach_db 和 sp_attach_db。我发现这在桌面上可以正常工作 - 我可以毫无问题地分离和重新连接数据库。但是在笔记本电脑上我无法重新附加数据库(数据库实际上最初是在笔记本电脑上创建的,并且第一次分离发生在那里)。当我尝试重新连接笔记本电脑时,出现以下错误:

无法打开物理文件“p:\SQLData\AppManager.mdf”。操作系统错误 5:“5(未找到错误)”

我发现很多对这个错误的引用都表明这是一个权限问题。所以我沿着这条路走,并确保 SQL Server 服务帐户具有适当的权限。我还在同一路径上创建了一个新数据库,并且能够成功地分离和重新连接它。所以我相信权限不是问题。

进一步调查显示,我无法重命名、复制或移动数据文件,因为 Windows 认为它​​们已锁定 - 即使 SQL Server 服务已停止。Process Explorer 不会显示任何锁定文件的进程。

如何找出锁定文件的原因并解锁它们。

我已经验证数据库没有出现在 SSMS 中 - 所以 SQL Server 仍然认为它们不存在。

2008 年 9 月 18 日更新

迄今为止,我已经尝试了所有建议的答案,但都没有成功。然而,尝试这些建议有助于澄清情况。我可以验证以下内容:

  1. 只有当外部驱动器连接到数据库副本恢复到的服务器时,我才能成功分离和重新连接数据库 - 实际上是“创建”数据库的服务器 - 让我们称之为“源服务器”。
  2. 在分离数据库后,我可以移动、复制或重命名数据和日志文件,而外部驱动器仍连接到源服务器。
  3. 一旦我将外部驱动器移动到另一台机器上,数据和日志文件就会被“锁定”,尽管我尝试过的 2 个工具 - Process Explorer 和 Unlocker,都没有找到附加到文件的锁定句柄。

注意。分离数据库后,我尝试在移动外部驱动器之前停止 SQL Server 服务并关闭源服务器 - 仍然没有成功。

所以在这个阶段,我在台式机和笔记本电脑之间移动数据所能做的就是将数据备份到外部驱动器上,移动外部驱动器,从备份中恢复数据。工作正常,但需要更多时间,因为数据库大小合理(1gb)。无论如何,这是我现阶段唯一的选择,即使我试图避免走这条路。

4

10 回答 10

4

听起来很疯狂,您是否尝试通过右键单击/属性/安全性手动授予文件权限?我认为 SQL Server 2005 会将分离文件的权限专门设置给进行分离的主体(可能是您的帐户,也可能是运行 SQL Server 服务的帐户),并且没有其他人可以操作该文件。为了解决这个问题,我必须在移动或删除它们之前手动授予自己对 MDF 和 LDF 文件的文件权限。另请参阅 onupdatecascade.com 上的博客文章

于 2009-07-17T05:48:23.533 回答
1

可以复制文件吗?我很想知道您是否可以将文件复制到您的笔记本电脑,然后将它们附加到那里。我猜这也是某种权限错误,但听起来您已经完成了解决此问题的工作。

文件上是否有任何属性?

更新:如果您无法复制文件,那么一定是某些东西锁定了它们。我会检查Unlocker,我没有尝试过,但听起来是一个很好的起点。您也可以尝试在文件权限下取得文件的所有权。

于 2008-09-17T00:22:11.393 回答
0

当您在 Enterprise Manager 或 SSMS 中时,您能看到您正在谈论的数据库的名称吗?可能有一个处于时髦状态的剩余数据库。我会确保您在安全的地方有一份 mdf 的备份或副本。如果是这种情况,也许尝试删除数据库然后重新附加它。

于 2008-09-17T00:15:36.823 回答
0

我会尝试在桌面上备份数据库,然后看看它是否会在笔记本电脑上成功恢​​复。没有解释你的问题,但至少你可以继续前进。

于 2008-09-17T00:22:15.543 回答
0

使用 /c 开关在调试模式下运行 sqlservr.exe,看看启动时会发生什么。任何锁定或权限问题都可以通过制作文件副本并将副本传输到原始文件来解决。

还要检查相关的日志文件 (.ldf) .. 如果该文件丢失或不可用,您将无法在不求助于紧急绕过模式的情况下将数据库挂载到任何健全/一致的状态。

于 2008-09-17T00:25:44.257 回答
0

我有一个类似的问题。似乎没有什么可以解决它 - 甚至试图完全重新启动机器,重新启动 SQL 服务等。ProcMon 和 ProcessExplorer 没有显示任何内容,所以我认为 - “锁定”是由操作系统完成的。

我通过删除文件并从安装在另一个驱动器号下的驱动器恢复它来解决它。

PS。我的数据库文件不在 USB 驱动器上,而是在 TrueCrypt 驱动器上(在某些情况下,您也可以说它是“可移动驱动器”)

于 2011-04-03T09:52:19.447 回答
0

这是文件级别安全性的安全问题-您已使用不同的凭据分离数据库并将其与其他凭据附加-只需浏览文章http://www.sqlservermanagementstudio.net/2013/12/troubleshooting-with-attaching-and。 html 并尝试将其复制粘贴到不同的位置。

于 2013-12-26T06:40:49.493 回答
0

在 SQL Server 配置管理器中,查看 SQL Server 服务。对于所有 SQL Server 实例,查看在“登录”选项卡 - 登录为:中选择了哪个帐户。例如,我发现将其更改为本地系统帐户可以解决您遇到的问题。这是唯一对我有用的东西——当然,不乏有同样问题的人。

于 2013-01-29T22:49:19.627 回答
0

我通过授予系统管理员所有权限解决了类似的问题:

  1. 右键单击>属性
  2. 安全选项卡
  3. group or usernames点击编辑。
  4. 单击添加>高级
  5. 单击find now以列出所有可用权限。
  6. 选择管理员并将其添加到列表中。
  7. 授予它具有完全权限。
于 2017-11-10T09:32:19.687 回答
-2

我遇到过同样的问题。有人分离了文件并离开了,我们无法将其移动到另一个驱动器。但是在获得文件的所有权(安全-->高级-->获得您的登录 ID 的所有权)之后,然后将您的登录 ID 添加到安全选项卡并授予对文件的访问权限,就可以移动了。

于 2018-08-11T18:25:39.063 回答