相关疑难解决方法(0)

你如何停止Sql Server的用户实例?(即使在停止Sql Express服务后,Sql Express用户实例数据库文件也被锁定)

使用SQL Server Express 2005的用户实例功能时,连接字符串如下所示:

<add name="Default" connectionString="Data Source=.\SQLExpress;
  AttachDbFilename=C:\My App\Data\MyApp.mdf;
  Initial Catalog=MyApp;
  User Instance=True;
  MultipleActiveResultSets=true;
  Trusted_Connection=Yes;" />
Run Code Online (Sandbox Code Playgroud)

我们发现即使在停止SqlExpress服务之后我们也无法复制数据库文件MyApp.mdf和MyApp_Log.ldf(因为它们已被锁定),并且不得不求助于将SqlExpress服务从自动启动模式设置为手动启动模式,然后重新启动机器,然后我们才能复制文件.

我的理解是,停止SqlExpress服务也应该停止所有用户实例,这应该释放这些文件的锁.但事实似乎并非如此 - 是否有人可以了解如何停止用户实例,以至于它的数据库文件不再被锁定?


更新

好吧,我不再懒惰并启动Process Explorer.锁是由sqlserver.exe保存的 - 但是有两个sql server实例:

sqlserver.exe  PID: 4680  User Name: DefaultAppPool
sqlserver.exe  PID: 4644  User Name: NETWORK SERVICE
Run Code Online (Sandbox Code Playgroud)

该文件由sqlserver.exe实例打开,PID为:4680

停止"SQL Server(SQLEXPRESS)"服务,使用PID:4644终止进程,但仅剩下PID:4680.

看到剩下的进程的所有者是DefaultAppPool,我尝试的下一件事就是停止IIS(这个数据库是从ASP.Net应用程序中使用的).不幸的是,这并没有扼杀这个过程.

手动删除剩余的sql server进程会删除数据库文件上的打开文件句柄,允许复制/移动它们.

不幸的是,我希望在WiX安装程序的一些安装前/后安装任务中复制/恢复这些文件 - 因此我希望有一种方法可以通过停止Windows服务来实现这一点,而不是必须弹出来杀死所有实例sqlserver.exe因为这会带来一些问题:

  1. 杀死所有sqlserver.exe实例可能会对其计算机上具有其他Sql Server实例的用户产生不良后果.
  2. 我无法轻松重启这些实例.
  3. 在安装程序中引入了额外的复杂性.

有没有人对如何关闭与特定用户实例关联的sql server实例有任何进一步的想法?

sql locking wix file sql-server-express

6
推荐指数
1
解决办法
7874
查看次数

标签 统计

file ×1

locking ×1

sql ×1

sql-server-express ×1

wix ×1