无法获得数据库“模型”的排他锁 - 谁在使用它?

Mar*_*lli 5 sql-server locking system-databases sql-server-2016

尝试运行以下查询以创建新数据库时:

    CREATE DATABASE [Lunch]
     CONTAINMENT = NONE
     ON  PRIMARY 
    ( NAME = N'Lunch', 
FILENAME = N'E:\Data Files\Lunch.mdf' , 
SIZE = 110592KB , FILEGROWTH = 1048576KB ), 
     FILEGROUP [DATA] 
    ( NAME = N'Lunch_Data', 
FILENAME = N'E:\Data Files\Lunch_Data.ndf' , 
SIZE = 110592KB , FILEGROWTH = 1048576KB ), 
     FILEGROUP [NONCLUSTERED_INDEXES] 
    ( NAME = N'Lunch_nonclusteredindexes', 
FILENAME = N'E:\Data Files\Lunch_nonclusteredindexes.ndf' , 
SIZE = 110592KB , FILEGROWTH = 1048576KB )
     LOG ON 
    ( NAME = N'Lunch_log', 
FILENAME = N'F:\logFiles\Lunch_log.ldf' , 
SIZE = 524288KB , 
FILEGROWTH = 524288KB )
    GO
Run Code Online (Sandbox Code Playgroud)

收到以下错误消息:

消息 1807,级别 16,状态 3,第 1 行

无法获得数据库 'model' 的排他锁。

稍后重试该操作。

消息 1802,级别 16,状态 4,第 1 行

创建数据库失败。

无法创建列出的某些文件名。检查相关错误。

什么在使用模型数据库并且不允许我获得排他锁?

sep*_*pic 8

您的model数据库现在已锁定,因此您应该做的是找出锁定它的会话,这可以使用sys.dm_tran_locks

select request_session_id
from sys.dm_tran_locks
where resource_type = 'database' and
      resource_database_id = 3 and
      request_type = 'LOCK' and
      request_status = 'GRANT';
Run Code Online (Sandbox Code Playgroud)

您可以让一个用户刚刚打开一个带有model数据库上下文的 SSMS 查询窗口并且从未在那里执行任何查询,但该会话仍然S锁定数据库资源。

找到锁定会话后,只需将其终止即可。