You need to enable JavaScript to run this app.
导航
建立数据库时遇到 Could not obtain exclusive lock on database 'model' 报错怎么办?
最近更新时间:2024.05.21 16:16:56首次发布时间:2024.05.21 16:16:56

本文介绍在建立数据库遇到 Could not obtain exclusive lock on database 'model' 报错时的解决方案。

说明

您的账号需要被授予 VIEW SERVER STATE 权限或更高权限。

  1. 执行以下命令排查是否有其他会话占用锁。

    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
    
  2. 执行以下命令查看当前 Modle 被哪些会话占用。

    SELECT request_session_id FROM
    sys.dm_tran_locks WHERE resource_database_id =DB_ID('Model');
    
  3. 执行以下命令查询当前会话的相关信息和执行的 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 的值
    
  4. 业务判断是否可以终止对应的会话,或者等待会话执行完再操作。