本文介绍在建立数据库遇到 Could not obtain exclusive lock on database 'model'
报错时的解决方案。
说明
您的账号需要被授予 VIEW SERVER STATE
权限或更高权限。
执行以下命令排查是否有其他会话占用锁。
IF EXISTS(SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID('Model')) PRINT 'Model Database being used by some other session' ELSE PRINT 'Model Database not used by other session'
如果输出如下,则表示被其他会话占用了锁。
Model Database being used by some other session 完成时间:2024-04-07T7:24:54.6358865+08:00
执行以下命令查看当前 Modle 被哪些会话占用。
SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_database_id =DB_ID('Model');
执行以下命令查询当前会话的相关信息和执行的 SQL 语句。
说明
只能查看当前会话的信息,当前会话有可能是空闲的。
如果 session_id
对应的进程已不再活跃,可能无法通过这种方法找到具体的 SQL 语句。
SELECT r.session_id, r.start_time, r.status, r.command, r.wait_type, r.wait_time, r.blocking_session_id, r.cpu_time, r.total_elapsed_time, ST.text AS sql_text FROM sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS ST WHERE r.session_id = <your_session_id>; //<your_session_id>替换为从 sys.dm_tran_locks 视图找到的 request_session_id 的值
业务判断是否可以终止对应的会话,或者等待会话执行完再操作。