【问题标题】:SQL Server Express unable to attach or delete mdf fileSQL Server Express 无法附加或删除 mdf 文件
【发布时间】:2015-08-05 17:33:25
【问题描述】:

我的数据库文件Whist.mdf 通过 Management Studio 附加到 SQL Server Express,但它停止工作,因为我的 asp.net 解决方案中的 NHibernate 引发了一些连接异常。我刚刚将它从 Management Studio 中分离出来,因为我也无法在其中打开数据库。

但是当我尝试重新连接它时,我得到了这个错误:

为服务器“MyPCName\SQLECPRESS”附加数据库失败。 (Microsoft.SqlServer.Smo) 无法打开物理文件“C:\Program 文件\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\Whist.mdf”。 操作系统错误 32:“32(进程无法访问该文件,因为 它正被另一个进程使用)”。(Microsoft SQL Server,错误: 第5120章

我用谷歌搜索了它,但找不到适合我的解决方案。例如:

有一些关于用户实例的东西,但我不知道它是否与此有关:

我曾尝试在 windows 中删除 mdf 文件,但我也不能这样做:

该操作无法完成,因为文件在系统中打开

我已尝试停止 SQL Server 进程,关闭探索并从 cmd 删除并重新启动...

希望有人可以提供帮助 - 我想这只是一件简单的事情..

【问题讨论】:

    标签: sql-server-express ssms


    【解决方案1】:

    我认为你是在正确的轨道上。您收到的错误消息表明某些 SQL Server 进程使数据库文件保持打开状态。 SQL Server 被设计为一次只允许一个 SQL Server 进程打开数据库文件。

    您也可能正确地怀疑 SQL Server Express 的用户实例是这里的有罪进程。用户实例是一个特殊的 SQL Server 进程,它不作为服务运行,而是由尝试连接它的应用程序启动和拥有。在您的情况下,有两个用户实例可能是问题,一个由您提到的 ASP.NET 应用程序拥有,一个由您拥有并由 Visual Studio 启动。如果您使用的是 IIS Express,或者您为 ASP.NET 应用程序配置了 IIS 应用程序池以作为您的帐户运行,那么我们只需要担心一个用户实例。

    我的建议是不要使用用户实例,也不要尝试直接连接到数据库文件。检查您的连接字符串并从所有字符串中删除User Instance=true。您还想删除 AttachDBFilename=... 属性。

    如果将数据库文件添加到您的任何 Visual Studio 解决方案中,请将其删除(注意不要删除文件本身)。最后一步是从服务器资源管理器中的数据连接节点中删除与数据库文件的任何连接。

    然后重新启动机器以确保在后台运行的所有用户实例都已关闭。机器再次启动后,您应该能够使用 SQL Server Management Studio 将数据库文件附加回您的主 SQL Server Express。我们将数据库命名为Whist

    要连接到您的数据库,请使用以下连接字符串:

    Data Source=.\SQLExpress;Integrated Security=true;Initial Catalog=Whist
    

    当您从 ASP.NET 应用程序连接时,请确保您已在 SQL Server Express 中为该应用程序创建了一个帐户。

    【讨论】:

    • 我已尝试遵循您的建议 - 这就是我所做的:无法弄清楚在我的情况下 ASP.NET 应用程序应该如何保存一个实例,因为我只是使用 VS internal服务器来运行我的应用程序(问题出在我的开发环境中)。 De mdf 文件不包含在任何解决方案中,或者没有任何从 VS 到数据库的数据连接。 ConnectionString 匹配你的。我已经在管理工作室中禁用了用户实例:sp_configure 'user instances enabled', '0' 我已经多次重新启动并尝试停止/启动 sql server - 没有变化..我遗漏了什么?
    • 您可以尝试的一件事是将 SQL Server 服务设置为 Disabled 状态并重新启动。这应该可以防止它被启动或启动任何用户实例。此时您应该能够移动/重命名数据库文件(不要忘记 *.ldf 文件)。如果不是,那么真的会发生一些奇怪的事情,也许是像杀毒软件阻止文件一样愚蠢的事情?再次启用 SQL Server 后,您应该能够再次附加数据库,可能一开始使用不同的名称并从 SSMS 中进行一些清理。
    • 这也不起作用...我不知道..我正在考虑重新安装 SQL Server - 您还有其他想法吗?
    • 不知道,只要你确定这是这台机器上唯一的 SQL Server 实例。
    • 删除 Sql server 后它仍然没有变化......直到我不小心双击了 mdf 文件并将它堆到了守护程序工具上(不知何故 mdf 文件与它相关联)并且不难想象我已经正确地做了类似的事情来启动问题..我把它卸载了,没有问题..并且守护程序工具关联将被删除!谢谢你的帮助..
    【解决方案2】:

    对我来说是守护进程工具以及将 .mdf 文件关联为图像的问题。

    【讨论】:

      【解决方案3】:

      如果您想从数据库中复制 .mdf 和 .ldf 文件,您可以先将数据库文件设置为“离线”。请按照以下步骤操作:

      Open your SQL Server 2008(suppose you are using SQL Server 2008 ).
      Select your Database that you want to copy then left click.
      Go to Tasks -> Take Offline.
      Right click. 
      

      然后您可以将此数据库文件复制到任何文件夹。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 2014-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多