java sqlserver 死锁_sqlserver数据库发生死锁处理
SQLSERVER數(shù)據(jù)庫(kù)鎖表
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?--鎖表進(jìn)程
declare?@sql?varchar(1000)
set?@sql='kill?'+cast(@spid??as?varchar)
exec(@sql)
3.?查詢數(shù)據(jù)庫(kù)死鎖的信息
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?'引起數(shù)據(jù)庫(kù)死鎖的是:?'+?CAST(@spid?AS?VARCHAR(10))?+?'進(jìn)程號(hào),其執(zhí)行的SQL語(yǔ)法如下'
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))+?'進(jìn)程號(hào),其執(zhí)行的SQL語(yǔ)法如下'
else
select?'進(jìn)程號(hào)SPID:'+?CAST(@spid?AS?VARCHAR(10))+?'被'?+?'進(jìn)程號(hào)SPID:'+?CAST(@blk?AS?VARCHAR(10))?+'阻塞,其當(dāng)前進(jìn)程執(zhí)行的SQL語(yǔ)法如下'
dbcc?inputbuffer(@spid)
dbcc?inputbuffer(@blk)
set?@index=@index+1
end
end
drop?table?#temp_who_lock
return?0
end
GO
4.??設(shè)置數(shù)據(jù)庫(kù)鎖的級(jí)別
READ_COMMITTED_SNAPSHOT??ON
使用基于行版本控制的隔離級(jí)別?(SQL?Server?2005?支持?)?:開啟下面的選項(xiàng)后,?SELECT?不會(huì)對(duì)請(qǐng)求的資源加?S?鎖,不加鎖或者加?Sch-S?鎖,
從而將讀與寫操作之間發(fā)生的死鎖幾率降至最低;而且不會(huì)發(fā)生臟讀
ALTER?DATABASE?EBCMKS?SET?ALLOW_SNAPSHOT_ISOLATION?ON
ALTER?DATABASE?EBCMKS?SET?READ_COMMITTED_SNAPSHOT?ON
總結(jié)
以上是生活随笔為你收集整理的java sqlserver 死锁_sqlserver数据库发生死锁处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java中对象别名使用_JAVA中的别名
- 下一篇: oracle数据库升级失败,Oracle