我有一个 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 日更新
迄今为止,我已经尝试了所有建议的答案,但都没有成功。然而,尝试这些建议有助于澄清情况。我可以验证以下内容:
- 只有当外部驱动器连接到数据库副本恢复到的服务器时,我才能成功分离和重新连接数据库 - 实际上是“创建”数据库的服务器 - 让我们称之为“源服务器”。
- 在分离数据库后,我可以移动、复制或重命名数据和日志文件,而外部驱动器仍连接到源服务器。
- 一旦我将外部驱动器移动到另一台机器上,数据和日志文件就会被“锁定”,尽管我尝试过的 2 个工具 - Process Explorer 和 Unlocker,都没有找到附加到文件的锁定句柄。
注意。分离数据库后,我尝试在移动外部驱动器之前停止 SQL Server 服务并关闭源服务器 - 仍然没有成功。
所以在这个阶段,我在台式机和笔记本电脑之间移动数据所能做的就是将数据备份到外部驱动器上,移动外部驱动器,从备份中恢复数据。工作正常,但需要更多时间,因为数据库大小合理(1gb)。无论如何,这是我现阶段唯一的选择,即使我试图避免走这条路。