–查看会话
select user name, sid, serial# from v\(session<br>--根据sid,serial#杀死某个会话<br>alter system kill session '69,11660'<br>通过如下sql你可以查询你的每个应用程序到底在等待什么,从而针对这些信息对数据库的性能进行调整。<br>==============================================================================*/<br>Select s.username,s.program,s.status,se.event,se.total_waits,se.total_timeouts,se.time_waited,se.average_wait from v\)session s, v\(session_event se Where s.sid=se.sid And se.event not like 'SQl*Net%' And s.status ='ACTIVE' And s.username is not null<br>/*==============================================================================<br>2.oracle中查询被锁的表并释放session<br>==============================================================================*/<br>SELECT A.OWNER,<br>A.OBJECT_NAME,<br>B.XIDUSN,<br>B.XIDSLOT,<br>B.XIDSQN,<br>B.SESSION_ID,<br>B.ORACLE_USERNAME,<br>B.OS_USER_NAME,<br>B.PROCESS,<br>B.LOCKED_MODE,<br>C.MACHINE,<br>C.STATUS,<br>C.SERVER,<br>C.SID,<br>C.SERIAL#,<br>C.PROGRAM<br>FROM ALL_OBJECTS A, V\)LOCKEDOBJECT B, SYS.GV\(SESSION C<br>WHERE (A.OBJECT_ID = B.OBJECT_ID)<br>AND (B.PROCESS = C.PROCESS)<br>ORDER BY 1, 2<br><br>--释放session Sql:<br>alter system kill session 'sid, serial#'<br><br>alter system kill session '30, 2412';<br>/*==============================================================================<br>如:<br>alter system kill session '379, 21132'<br>alter system kill session '374, 6938'<br>==============================================================================*/<br><br>/*==============================================================================<br>3.查看占用系统io较大的session<br>==============================================================================*/<br>SELECT se.sid,<br>se.serial#,<br>pr.SPID,<br>se.username,<br>se.status,<br>se.terminal,<br>se.program,<br>se.MODULE,<br>se.sql_address,<br>st.event,<br>st.p1text,<br>si.physical_reads,<br>si.block_changes<br>FROM v\)session se, v\(session_wait st, v\)sess_io si, v\(process pr<br>WHERE st.sid = se.sid AND st.sid = si.sid<br>AND se.PADDR = pr.ADDR<br>AND se.sid > 6 AND st.wait_time = 0<br>AND st.event NOT LIKE '%SQL%'<br>ORDER BY physical_reads DESC<br><br>/*==============================================================================<br>4.找出耗cpu较多的session<br>==============================================================================*/<br>select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value<br>from v\)session a,v\(process b,v\)sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;
/==============================================================================
5.查询session被锁的sql可以用以下语句
==============================================================================/
select sys.v$session.osuser,sys.v\(session.machine,v\)lock.sid,
sys.v_\(session.serial#,<br> decode(v\)lock.type,
’MR’, ‘Media Recovery’,
’RT’,‘Redo Thread’,
’UN’,‘User Name’,
’TX’, ‘Transaction’,
’TM’, ‘DML’,
’UL’, ‘PL/SQL User Lock’,
’DX’, ‘Distributed Xaction’,
’CF’, ‘Control File’,
’IS’, ‘Instance State’,
’FS’, ‘File Set’,
’IR’, ‘Instance Recovery’,
’ST’, ‘Disk Space Transaction’,
’TS’, ‘Temp Segment’,
’IV’, ‘Library Cache Invalida-tion’,
’LS’, ‘Log Start or Switch’,
’RW’, ‘Row Wait’,
’SQ’, ‘Sequence Number’,
’TE’, ‘Extend Table’,
’TT’, ‘Temp Table’,
’Unknown’) LockType,
rtrim(object_type) || ‘ ’ || rtrim(owner) || ‘.’ || object_name object_name,
decode(lmode, 0, ‘None’,
1, ‘Null’,
2, ‘Row-S’,
3, ‘Row-X’,
4, ‘Share’,
5, ’S/Row-X’,
6, ‘Exclusive’, ‘Unknown’) LockMode,
decode(request, 0, ‘None’,
1, ‘Null’,
2, ‘Row-S’,
3, ‘Row-X’,
4, ‘Share’,
5, ’S/Row-X’,
6, ‘Exclusive’, ‘Unknown’) RequestMode,
ctime, block b
from v\(lock, all_objects, sys.v_\)session
where v\(Lock.sid > 6 and sys.v_\)session.sid = v\(lock.sid <br> and v\)lock.id1 = all_objects.object_id;
/==============================================================================
OS一级for kill 处理Oracle中杀不掉的锁
如果利用上面的命令杀死一个进程后,进程状态被置为”killed”,但是锁定的资源很长时间没有被释放,
那么可以在os一级再杀死相应
==============================================================================/
–1 查询session被锁的sql,简要查询,得到SID
select object_name,machine,s.sid,s.serial#
from v\(locked_object l,dba_objects o ,v\)session s
where l.object_id = o.object_id and l.session_id=s.sid;
–2 使用alter system kill session ‘24,111’; (其中24,111分别是上面查询出的sid,serial#)进行释放
alter system kill session ‘30, 2412’
–3 执行下面的语句获得进程(线程)号,sid为第一步查询出的sid号:
select spid, osuser, s.program
from v\(session s,v\)process p
where s.paddr=p.addr and s.sid=30;
/*==============================================================================
4.在OS上杀死这个进程(线程):
1)在unix上,用root身份执行命令:
#kill -9 12345(即第3步查询出的spid)
2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345
参考:https://www.cnblogs.com/tracy/archive/2011/08/04/2127461.html
查看处于被锁状态的表:v\(locked_object dba_objects v\)session all_objects v\(sqlarea v\)lock
转载 2016年12月26日 10:09:45
–1.查看处于被锁状态的表
SELECT a.object_id,
a.session_id,
b.object_name
FROM v\(locked_object a,<br> dba_objects b<br> WHERE a.object_id = b.object_id<br><br>select sess.sid,<br>sess.serial#,<br>lo.oracle_username,<br>lo.os_user_name,<br>ao.object_name,<br>lo.locked_mode<br>from v\)locked_object lo, dba_objects ao, v\(session sess<br>where ao.object_id = lo.object_id<br>and lo.session_id = sess.sid; <br>--2.查出锁定object的session的信息以及被锁定的object名<br>SELECT l.session_id sid,<br> s.serial#,<br> l.locked_mode,<br> l.oracle_username,<br> l.os_user_name,<br> s.machine,<br> s.terminal,<br> o.object_name,<br> s.logon_time<br> FROM v\)locked_object l,
all_objects o,
v\(session s<br> WHERE l.object_id = o.object_id<br> AND l.session_id = s.sid<br> ORDER BY sid,<br> s.serial#;<br>--2.1查出锁定的object的session信息(指定object_name)<br>SELECT l.session_id sid,<br> s.serial#,<br> l.locked_mode,<br> l.oracle_username,<br> l.os_user_name,<br> s.machine,<br> s.terminal,<br> o.object_name,<br> s.logon_time<br> FROM v\)locked_object l, all_objects o, v\(session s<br> WHERE l.object_id = o.object_id<br> AND l.session_id = s.sid<br> and o.object_name = 'ZZOM_SEND_EMAIL'<br> ORDER BY sid, s.serial#;<br>--3.查出锁定表的session的sid, serial#,os_user_name, machine name, terminal和执行的语句<br>--比上面那段多出sql_text和action<br>SELECT l.session_id sid,<br> s.serial#,<br> l.locked_mode,<br> l.oracle_username,<br> s.user#,<br> l.os_user_name,<br> s.machine,<br> s.terminal,<br> a.sql_text,<br> a.action<br> FROM v\)sqlarea a,
v\(session s,<br> v\)locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid,
s.serial#;
–4.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
SELECT s.sid,
s.serial#,
s.username,
s.schemaname,
s.osuser,
s.process,
s.machine,
s.terminal,
s.logon_time,
l.type
FROM v\(session s,<br> v\)lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;
参考博客:http://blog.csdn.net/fenyu8/article/details/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/157936.html