Sql server 2005 锁定的SQL Server数据文件

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

我有一个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日更新

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

  • 只有当外部驱动器连接到数据库副本还原到的服务器(实际上是“创建”数据库的服务器)时,我才能成功地分离和重新连接数据库。让我们称之为“源服务器”
  • 在分离数据库后,当外部驱动器仍连接到源服务器时,我可以移动、复制或重命名数据和日志文件
  • 一旦我将外部驱动器移动到另一台机器上,数据和日志文件就会被“锁定”,尽管我尝试过的两个工具——Process Explorer和Unlocker都没有找到附加到文件的锁定手柄 注意。分离数据库后,我尝试在移动外部驱动器之前停止SQL Server服务并关闭源服务器,但仍然没有成功


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

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

    可以复制文件吗?我很想知道你是否能把这些文件复制到你的笔记本电脑上,然后把它们放在那里。我猜这也是某种权限错误,但听起来你已经做了修复工作

    文件上有任何属性吗


    更新:如果你不能复制文件,那么一定是有什么东西锁定了它们。我会看看哪些我没有尝试过,但听起来是一个很好的起点。您还可以尝试在文件权限下获取文件的所有权。

    我将尝试在桌面上备份数据库,然后查看它是否能在笔记本电脑上成功还原。没有解释您的问题,但至少您可以继续。

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


    还要检查关联的日志文件(.ldf)。。如果该文件丢失或不可用,您将无法在不诉诸紧急旁路模式的情况下将数据库装载到任何正常/一致的状态。

    听起来很疯狂,您是否尝试通过右键单击/properties/security手动授予自己文件的perms?我认为SQLServer2005将专门为进行分离的主体(可能是您的帐户,也可能是运行SQLServer服务的帐户)设置对分离文件的权限,其他人无法操作该文件。为了解决这个问题,我必须在移动或删除MDF和LDF文件之前手动授予自己文件权限。另请参阅onupdatecascade.com上的博文

    我也遇到了类似的问题。似乎没有什么能解决这个问题-甚至尝试完全重新启动机器,重新启动SQL服务等。ProcMon和ProcessExplorer没有显示任何内容,所以我想,“锁定”是由操作系统完成的

    我通过删除该文件并将其从另一个驱动器号下安装的驱动器中恢复,解决了此问题。


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

    在SQL Server Configuration Manager中,请查看SQL Server服务。对于所有SQL Server实例,请查看在“登录”选项卡中选择的帐户-登录身份:。例如,我发现,将其更改为本地系统帐户可以解决您遇到的问题。这是唯一一件对我有效的事情——当然,也有不少人遇到过同样的问题。

    这是文件级安全的一个安全问题——您使用不同的凭据分离了数据库,并将其附加到其他凭据上——只需浏览本文即可