锁定的SQL Server数据文件

时间:2008-09-17 00:10:52

标签: sql-server-2005

我有一个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. 一旦我将外部驱动器移动到另一台机器,数据和日志文件就会被“锁定”,尽管我尝试过的两个工具--Instal Explorer和Unlocker都没有找到附加到文件的锁定句柄。
  4. NB。在分离数据库之后,我尝试在移动外部驱动器之前停止SQL Server服务并关闭源服务器 - 仍然没有成功。

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

10 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

文件上是否有任何属性?

更新:如果您无法复制文件,则必须锁定它们。我会查看Unlocker我没有尝试但听起来像是一个很好的起点。您也可以尝试在文件权限下获取文件的所有权。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

同时检查关联的日志文件(.ldf)..如果该文件丢失或不可用,则无法在不采用紧急旁路模式的情况下将数据库装载到任何合理/一致状态。

答案 5 :(得分:0)

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

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

  1. 右键单击>特性
  2. 安全标签
  3. group or usernames点击修改。
  4. 点击添加>先进
  5. 点击find now列出所有可用权限。
  6. 选择管理员并将其添加到列表中。
  7. 授予其完全许可。

答案 9 :(得分:-2)

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