oracle死锁的处理剖析.docx
- 文档编号:1874013
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:8
- 大小:18.23KB
oracle死锁的处理剖析.docx
《oracle死锁的处理剖析.docx》由会员分享,可在线阅读,更多相关《oracle死锁的处理剖析.docx(8页珍藏版)》请在冰豆网上搜索。
oracle死锁的处理剖析
查看有哪些表被锁住
selectb.owner,b.object_name,a.session_id,a.locked_mode
fromv$locked_objecta,dba_objectsb
whereb.object_id=a.object_id
selectb.username,b.sid,b.serial#,logon_time
fromv$locked_objecta,v$sessionb
wherea.session_id=b.sidorderbyb.logon_time
杀进程中的会话
altersystemkillsession'sid,serial#';
e.g
altersystemkillsession'29,5497';
如果有ora-00031错误,则在后面加immediate;altersystemkillsession'29,5497'immediate;
如何杀死oracle死锁进程
1.查哪个过程被锁:
查V$DB_OBJECT_CACHE视图:
SELECT*FROMV$DB_OBJECT_CACHEWHEREOWNER='过程的所属用户'ANDCLOCKS!
='0';
2.查是哪一个SID,通过SID可知道是哪个SESSION:
查V$ACCESS视图:
SELECT*FROMV$ACCESSWHEREOWNER='过程的所属用户'ANDNAME='刚才查到的过程名';
3.查出SID和SERIAL#:
查V$SESSION视图:
SELECTSID,SERIAL#,PADDRFROMV$SESSIONWHERESID='刚才查到的SID';
查V$PROCESS视图:
SELECTSPIDFROMV$PROCESSWHEREADDR='刚才查到的PADDR';
4.杀进程:
(1)先杀ORACLE进程:
ALTERSYSTEMKILLSESSION'查出的SID,查出的SERIAL#';
(2)再杀操作系统进程:
KILL-9刚才查出的SPID或ORAKILL刚才查出的SID刚才查出的SPID。
Oracle的死锁
查询数据库死锁:
selectt2.username||' '||t2.sid||'
'||t2.serial#||' '||t2.logon_time||'
'||t3.sql_text
fromv$locked_objectt1,v$sessiont2,v$sqltextt3
wheret1.session_id=t2.sid
andt2.sql_address=t3.address
orderbyt2.logon_time;
查询出来的结果就是有死锁的session了,下面就是杀掉,拿到上面查询出来的SID和SERIAL#,填入到下面的语句中:
altersystemkillsession'sid,serial#';
一般情况可以解决数据库存在的死锁了,或通过sessionid查到对应的操作系统进程,在Unix中杀掉操作系统的进程。
SELECTa.username,c.spidASos_process_id,c.pid
ASoracle_process_idFROMv$sessiona,v$processc
WHEREc.addr=a.paddranda.sid=anda.serial#=;
然后采用kill(unix)或orakill(windows)。
在Unix中:
ps-ef|grepos_process_id
kill-9os_process_id
ps-ef|grepos_process_id
经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。
1)查找死锁的进程:
sqlplus"/assysdba" (sys/change_on_install)
SELECTs.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROMV$LOCKED_OBJECTl,V$SESSIONSWHEREl.SESSION_ID=S.SID;
2)kill掉这个死锁的进程:
altersystemkillsession‘sid,serial#’;(其中sid=l.session_id)
3)如果还不能解决:
selectpro.spidfromv$sessionses,
v$processprowhereses.sid=XXand
ses.paddr=pro.addr;
其中sid用死锁的sid替换:
exit
ps-ef|grepspid
其中spid是这个进程的进程号,kill掉这个Oracle进程。
kill-910720 (spid)
本篇文章来源于:
开发学院原文链接:
查找锁定对象的会话信息
SELECTdob.OBJECT_NAMETable_Name,lo.SESSION_ID||','||vss.SERIAL#删除号,
lo.locked_mode,lo.SESSION_ID,vss.SERIAL#,vss.actionAction,vss.osuserOSUSER,vss.LOGON_TIME,
vss.processAP_PID,VPS.SPIDDB_PID,vss.*
Fromv$locked_objectlo,dba_objectsdob,v$sessionvss,V$PROCESSVPS
Wherelo.OBJECT_ID=dob.OBJECT_ID
andlo.SESSION_ID=vss.SID
ANDVSS.paddr=VPS.addr
orderby2,3,DOB.object_name;
如有需要删除会话:
ALTERsystemkillsession‘删除号’;
如:
ALTERsystemkillsession'294,1747';
另一个查找死锁的脚本:
SELECTbs.username"BlockingUser",bs.username"DBUser",
ws.username"WaitingUser",bs.SID"SID",ws.SID"WSID",
bs.serial#"Serial#",bs.sql_address"address",
bs.sql_hash_value"Sqlhash",bs.program"BlockingApp",
ws.program"WaitingApp",bs.machine"BlockingMachine",
ws.machine"WaitingMachine",bs.osuser"BlockingOSUser",
ws.osuser"WaitingOSUser",bs.serial#"Serial#",
ws.serial#"WSerial#",
DECODE(wk.TYPE,
'MR','MediaRecovery',
'RT','RedoThread',
'UN','USERName',
'TX','Transaction',
'TM','DML',
'UL','PL/SQLUSERLOCK',
'DX','DistributedXaction',
'CF','ControlFILE',
'IS','InstanceState',
'FS','FILESET',
'IR','InstanceRecovery',
'ST','DiskSPACETransaction',
'TS','TempSegment',
'IV','LibraryCacheInvalidation',
'LS','LOGSTARTORSwitch',
'RW','ROWWait',
'SQ','SequenceNumber',
'TE','ExtendTABLE',
'TT','TempTABLE',
wk.TYPE
)lock_type,
DECODE(hk.lmode,
0,'None',
1,'NULL',
2,'ROW-S(SS)',
3,'ROW-X(SX)',
4,'SHARE',
5,'S/ROW-X(SSX)',
6,'EXCLUSIVE',
TO_CHAR(hk.lmode)
)mode_held,
DECODE(wk.request,
0,'None',
1,'NULL',
2,'ROW-S(SS)',
3,'ROW-X(SX)',
4,'SHARE',
5,'S/ROW-X(SSX)',
6,'EXCLUSIVE',
TO_CHAR(wk.request)
)mode_requested,
TO_CHAR(hk.id1)lock_id1,TO_CHAR(hk.id2)lock_id2,
DECODE
(hk.BLOCK,
0,'NOTBlocking',/**//*Notblockinganyotherprocesses*/
1,'Blocking',/**//*Thislockblocksotherprocesses*/
2,'Global',/**//*Thislockisglobal,sowecan'ttell*/
TO_CHAR(hk.BLOCK)
)blocking_others
FROMv$lockhk,v$sessionbs,v$lockwk,v$sessionws
WHEREhk.BLOCK=1
ANDhk.lmode!
=0
ANDhk.lmode!
=1
ANDwk.request!
=0
ANDwk.TYPE(+)=hk.TYPE
ANDwk.id1(+)=hk.id1
ANDwk.id2(+)=hk.id2
ANDhk.SID=bs.SID(+)
ANDwk.SID=ws.SID(+)
AND(bs.usernameISNOTNULL)
AND(bs.username<>'SYSTEM')
AND(bs.username<>'SYS')
ORDERBY1;
查询锁等待的内容:
wait_lock.sql
select
(selectusernamefromv$sessionwheresid=a.sid)username,
a.sid,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 死锁 处理 剖析