java sqlserver 死锁_sqlserver数据库发生死锁处理
SQLSERVER數據庫鎖表
1.?查看被鎖的表
select?request_session_id???spid,OBJECT_NAME(resource_associated_entity_id)?tableName
from?sys.dm_tran_locks?where?resource_type='OBJECT'
2.?解除表的鎖定
declare?@spid??int
Set?@spid??=?57?--鎖表進程
declare?@sql?varchar(1000)
set?@sql='kill?'+cast(@spid??as?varchar)
exec(@sql)
3.?查詢數據庫死鎖的信息
CREATE?procedure?sp_who_lock
as
begin
declare?@spid?int
declare?@blk?int
declare?@count?int
declare?@index?int
declare?@lock?tinyint
set?@lock=0
create?table?#temp_who_lock
(
id?int?identity(1,1),
spid?int,
blk?int
)
if?@@error<>0?return?@@error
insert?into?#temp_who_lock(spid,blk)
select?0?,blocked
from?(select?*?from?master..sysprocesses?where?blocked>0)a
where?not?exists(select?*?from??master..sysprocesses?where?a.blocked?=spid?and?blocked>0)
union?select?spid,blocked?from??master..sysprocesses?where?blocked>0
if?@@error<>0?return?@@error
select?@count=count(*),@index=1?from?#temp_who_lock
if?@@error<>0?return?@@error
if?@count=0
begin
select?'沒有阻塞和死鎖信息'
return?0
end
while?@index<=@count
begin
if?exists(select?1?from?#temp_who_lock?a?where?id>@index?and?exists(select?1?from?#temp_who_lock?where?id<=@index?and?a.blk=spid))
begin
set?@lock=1
select?@spid=spid,@blk=blk?from?#temp_who_lock?where?id=@index
select?'引起數據庫死鎖的是:?'+?CAST(@spid?AS?VARCHAR(10))?+?'進程號,其執行的SQL語法如下'
select??@spid,?@blk
dbcc?inputbuffer(@spid)
dbcc?inputbuffer(@blk)
end
set?@index=@index+1
end
if?@lock=0
begin
set?@index=1
while?@index<=@count
begin
select?@spid=spid,@blk=blk?from?#temp_who_lock?where?id=@index
if?@spid=0
select?'引起阻塞的是:'+cast(@blk?as?varchar(10))+?'進程號,其執行的SQL語法如下'
else
select?'進程號SPID:'+?CAST(@spid?AS?VARCHAR(10))+?'被'?+?'進程號SPID:'+?CAST(@blk?AS?VARCHAR(10))?+'阻塞,其當前進程執行的SQL語法如下'
dbcc?inputbuffer(@spid)
dbcc?inputbuffer(@blk)
set?@index=@index+1
end
end
drop?table?#temp_who_lock
return?0
end
GO
4.??設置數據庫鎖的級別
READ_COMMITTED_SNAPSHOT??ON
使用基于行版本控制的隔離級別?(SQL?Server?2005?支持?)?:開啟下面的選項后,?SELECT?不會對請求的資源加?S?鎖,不加鎖或者加?Sch-S?鎖,
從而將讀與寫操作之間發生的死鎖幾率降至最低;而且不會發生臟讀
ALTER?DATABASE?EBCMKS?SET?ALLOW_SNAPSHOT_ISOLATION?ON
ALTER?DATABASE?EBCMKS?SET?READ_COMMITTED_SNAPSHOT?ON
總結
以上是生活随笔為你收集整理的java sqlserver 死锁_sqlserver数据库发生死锁处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中对象别名使用_JAVA中的别名
- 下一篇: php7 对象转数组,php7中为对象/