如何编写脚本来杀死 MSSQL 中的 MS Office 数据库锁

use*_*683 6 locked-objects excel wait-types sql-server-2014

我最近继承了一个 MSSQL 数据库,因为我们的 DBA 已经转向更美好的领域。我不是 DBA,只有中等的 SQL 知识,但不得不承担他的一些职责,并且遇到了一个问题,我在导航时遇到了一些麻烦。

我们遇到了一个问题,即通过 Excel 访问数据库的用户往往会导致数据库操作停止,这会影响我们的 ERP 软件。我们当前的解决方法是查看 SSMS 中的活动监视器并终止有问题的 Microsoft Office 应用程序。

我希望有一个每隔几分钟运行一次的脚本化任务,以保持事情顺利进行,并且当系统出现故障时,用户不会涌向 IT。

我发现以下查询将允许我提取锁定类型和其他有用的数据(例如等待时间),但不能提取活动监视器中找到的特定应用程序。

select * from sys.dm_exec_requests where wait_type = 'LCK_M_S'

理想情况下,此代码将找到 wait_type 为 LCK_M_S 的应用程序 Microsoft Office,并终止等待时间最长的任务,并在一天中根据需要重复。

预先感谢您的回复。

Dav*_*oft 6

你可以看看

select session_id, program_name, host_name
from sys.dm_exec_sessions
Run Code Online (Sandbox Code Playgroud)

但这些程序名称可以由客户端选择,因此不能保证您可以识别 Excel 会话。

更好的解决方案是查看您的 ERP 软件是否支持 READ COMMITTED SNAPSHOT 隔离,并设置数据库选项以防止您的 Excel 用户需要共享锁来运行查询。