執行SQL語句時報錯 無法獲得數據庫 model 上的排他鎖

問題描述:

錯誤信息

執行 Transact-SQL 語句或批處理時發生了異常。無法獲得數據庫 'model' 上的排他鎖。請稍後重試該操作。

原因分析

兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。

此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。

如:如果線程A鎖住了記錄1並等待記錄2,而線程B鎖住了記錄2並等待記錄1,這樣兩個線程就發生了死鎖現象。

解決思路: 

  • 首先我們要找出是哪個進程在佔用model數據庫,執行查詢
select  spid  from master.sys.sysprocesses where dbid = db_id('model')

如果是Sqlserver2000的服務器,數據表替換成master.dbo.sysprocesses

  • 然後根據找到的進程 id 使用kill命令殺掉進程,解除佔用

解決方法:

執行以下查詢:

declare @sql varchar(100) 
while 1=1 
begin 
select top 1 @sql = 'kill '+ cast(spid as varchar(3)) 
from master.sys.sysprocesses 
where spid > 50 and spid <> @@spid 
if @@rowcount = 0 
break 
exec(@sql) 
end

命令執行完成後,斷掉數據庫連接,重新登陸數據庫,再次執行sql操作即可!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章