問題描述:
錯誤信息
執行 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操作即可!