oracle死锁的处理剖析.docx

上传人:b****2 文档编号:1874013 上传时间:2022-10-24 格式:DOCX 页数:8 大小:18.23KB
下载 相关 举报
oracle死锁的处理剖析.docx_第1页
第1页 / 共8页
oracle死锁的处理剖析.docx_第2页
第2页 / 共8页
oracle死锁的处理剖析.docx_第3页
第3页 / 共8页
oracle死锁的处理剖析.docx_第4页
第4页 / 共8页
oracle死锁的处理剖析.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

oracle死锁的处理剖析.docx

《oracle死锁的处理剖析.docx》由会员分享,可在线阅读,更多相关《oracle死锁的处理剖析.docx(8页珍藏版)》请在冰豆网上搜索。

oracle死锁的处理剖析.docx

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,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1