Skip to content

Instantly share code, notes, and snippets.

@Kelvin-Lei
Created February 29, 2016 01:49
Show Gist options
  • Select an option

  • Save Kelvin-Lei/56f3b0f5a894df8eb29f to your computer and use it in GitHub Desktop.

Select an option

Save Kelvin-Lei/56f3b0f5a894df8eb29f to your computer and use it in GitHub Desktop.
--SID使用数据库的某个用户的当前会话ID
--sid:session的id
--serial#:sid的序列号,因为可能有些会话的sid相同,sid可以重复使用,以后使用已经使用过的sid时,serial#会递增
--附:用于确定锁住数据库对象的锁的SQL
SELECT c.owner
,c.object_name
,c.object_type
,b.sid
,b.serial#
,b.status
,b.osuser
,b.machine   
FROM v$locked_object a
,v$session b
,dba_objects c   
WHERE b.sid = a.session_id   
AND a.object_id = c.object_id;
ALTER system kill session '980,973';
--死锁
SELECT ao.object_name
,s.sql_text
,s2.sql_text next_sql_text
,d.sid
,d.serial#
,c.spid
,d.action
,c.spid
,d.module
,d.program
,d.username
,d.client_identifier
, /*(SELECT ra.request_id FROM fnd_concurrent_requests ra, v$session rb, v$process rc WHERE ra.oracle_session_id = rb.audsid AND rb.paddr = rc.addr(+) AND rb.sid = d.sid) request_id,*/vo.*
,ao.*
FROM v$locked_object vo
,all_objects ao
,v$process c
,v$session d
,v$sqlarea s
,v$sqlarea s2
WHERE vo.object_id = ao.object_id
AND c.addr(+) = d.paddr
AND d.sid(+) = vo.session_id
AND s.address = d.prev_sql_addr
AND s2.sql_id = d.sql_id
ORDER BY ao.last_ddl_time DESC;
--根据请求号查找session
SELECT a.process_status_code
,a.oracle_process_id
,a.os_process_id
,process_start_date
,a.*
,b.*
FROM fnd_concurrent_processes a
,fnd_concurrent_requests b
WHERE b.controlling_manager = a.concurrent_process_id
AND b.request_id = 49580183;
--杀ORACLE进程:
ALTER system kill session '查出的SID,查出的SERIAL#';
ALTER system kill session '355,15455';
--查看数据库等待事件(编译时包被锁住--常用)
SELECT b.saddr
,fcr.request_id
,pt.user_concurrent_program_name --数据库等待事件
,a.sid
,b.serial#
,c.spid
,b.machine
,b.module
,b.action
,a.seconds_in_wait
,b.logon_time
,a.event
,a.p1text
,a.p1
,a.p1raw
,a.p2text
,a.p2
,a.p2raw
,a.p3text
,a.p3
,a.p3raw
,b.username
,a.wait_time
FROM v$session_wait a
,v$session b
,v$process c
,fnd_concurrent_requests fcr
,fnd_concurrent_programs_tl pt
,fnd_concurrent_programs pb
WHERE 1 = 1
AND a.wait_class <> 'Idle' -- for 10g^11g db
AND c.addr(+) = b.paddr
AND a.event NOT LIKE 'SQL*Net%'
AND a.event NOT LIKE 'rdbms%'
AND a.event NOT LIKE 'jobq slave wait'
AND a.event NOT LIKE '%mon timer'
AND a.event NOT LIKE 'ASM%'
AND a.event NOT LIKE '%idle wait%'
AND a.event NOT LIKE 'DIAG idle wait'
AND a.event NOT LIKE 'wakeup time manager'
AND a.event NOT LIKE 'queue m%'
AND a.event <> 'PL/SQL lock timer'
AND a.event <> 'pipe get'
--AND a.event LIKE 'enq:%'
--and a.event = 'library cache lock'
--AND a.INST_ID = b.INST_ID
-- AND b.MODULE='01@<oracle/gmdbappl/xbd/11.5.10/sql/XBDLHDZD.sql'
--AND b.MODULE like '%XBDARPAY1%'
--and b.action<>'Concurrent Request'
AND fcr.oracle_session_id = b.audsid
AND pb.application_id = fcr.program_application_id
AND pb.concurrent_program_id = fcr.concurrent_program_id
AND pb.application_id = pt.application_id
AND pb.concurrent_program_id = pt.concurrent_program_id
AND pt.language = 'ZHS'
AND b.sid = a.sid
--AND b.sid =1714
-- AND b.USERNAME = 'PERFSTAT'
--AND a.P2 = 245562
ORDER BY a.event
,a.p1;
--杀ORACLE进程:
ALTER system kill session '查出的SID,查出的SERIAL#';
ALTER system kill session '1151,65151';
ALTER system kill session '29,1323';
如何杀死oracle死锁进程 方法一:
--1.查哪个过程被锁:查V$DB_OBJECT_CACHE视图:
SELECT *
FROM v$db_object_cache
WHERE owner = '过程的所属用户'
AND locks != '0';
--2. 查是哪一个SID,通过SID可知道是哪个SESSION:查V$ACCESS视图:
SELECT *
FROM v$access
WHERE owner = '过程的所属用户'
AND NAME = '刚才查到的过程名';
--3. 查出SID和SERIAL#:查V$SESSION视图:
SELECT sid
,serial#
,paddr
FROM v$session
WHERE sid = '刚才查到的SID'
--查V$PROCESS视图:
SELECT spid FROM v$process WHERE addr = '刚才查到的PADDR';
--4. 杀进程
--(1).先杀ORACLE进程:
ALTER system kill session '查出的SID,查出的SERIAL#';
--(2).再杀操作系统进程:
kill - 9 刚才查出的spid
--或ORAKILL 刚才查出的SID 刚才查出的SPID
--方法二:
--1)查找死锁的进程:
sqlplus "/as sysdba"
SELECT s.username
,l.object_id
,l.session_id
,s.serial#
,l.oracle_username
,l.os_user_name
,l.process
FROM v$locked_object l
,v$session s
WHERE l.session_id = s.sid;
--2)kill掉这个死锁的进程:
ALTER system kill session ‘sid, serial#’;
(其中sid = l.session_id) 3)
--如果还不能解决,
SELECT pro.spid
FROM v$session ses
,v$process pro
WHERE ses.sid = xx
AND ses.paddr = pro.addr;
--其中sid用死锁的sid替换。
--EXIT ps - ef | grep spid
--其中spid是这个进程的进程号,kill掉这个oracle进程。
--被锁住包
SELECT b.sid
,b.serial#
,a.name
,a.owner
,a.type
FROM dba_ddl_locks a
,v$session b
WHERE a.session_id = b.sid
AND a.name LIKE 'AFA_AR_FINA%'
AND owner = 'APPS';
SELECT * FROM all_objects o WHERE o.object_name LIKE 'AFA_AR_UTL%';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment