记一次SQL Server创建数据库失败

在执行create database test后,报错Could not obtain exclusive lock on database 'model'. Retry the operation later.
通过在查看SQL Server的官方说明,显示引起该问题的原因是:
SQL Server在创建数据库时,会使用model数据库的副本来初始化数据库和元数据,此时必须以独占方式锁定model数据库防止从model数据库复制更改的数据,否则无法保证从数据一致性。
因此可以检查下,该model是否被其他会话占用:

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

当model被其他会话占用时,可使用下面的语句查询是哪些会话占用

SELECT request_session_id FROM
sys.dm_tran_locks WHERE resource_database_id =DB_ID('Model');
DBCC INPUTBUFFER(spid)

结果显示有51,53, 56占用,这时只需要移除掉即可创建数据库

kill 51
kill 53
kill 56

版权声明:本文为Loiterer_Y原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。