<p>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, <br /> dba_objects ao, <br /> v$session sess <br /> where ao.object_id = lo.object_id and lo.session_id = sess.sid; </p>
讯享网
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode ,
‘alter system kill session ’ || chr(39) || sess.sid || ‘,’ || sess.serial# || chr(39) || ‘;’
from v\(locked_object lo, <br /> dba_objects ao, <br /> v\)session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
查看历史SQL语句:
select * from v\(active_session_history</p> <p>查询Session中的SQL语句</p> <p><br /> SELECT VS.SQL_TEXT<br /> FROM V\)SQL VS, V\(SESSION SN<br /> WHERE VS.SQL_ID = SN.SQL_ID</p> <p> AND SN.SID = &SESSION_ID;</p> <p>查询锁表、阻塞的SQL语句:</p> <p><br /> select s.MACHINE, s.PROGRAM, s.event, s.STATUS, q.sql_text<br /> from gv\)session s, gv\(sql q<br /> where sid in (select distinct sid<br /> from gv\)lock
where type in (‘TX’, ‘TM’)
and inst_id = s.inst_id)
and nvl(s.sql_id, s.prev_sql_id) = q.sql_id
and s.inst_id = q.inst_id;
SELECT ‘alter system kill session ’ || chr(39) || SID || ‘,’ || SERIAL# || chr(39) || ‘;’SID, SERIAL# FROM GV\(SESSION V <br /> WHERE SID IN (SELECT SID FROM GV\)LOCK L, DBA_OBJECTS O
WHERE L.ID1 = O.OBJECT_ID AND O.OBJECT_NAME =UPPER(‘INTE_FIN_SUB’) ); —ALTER SYSTEM KILL SESSION ‘20,2661’;
–查询使用某个表的进程:
SELECT SID, SERIAL# FROM GV\(SESSION V <br /> WHERE SID IN (SELECT SID FROM GV\)LOCK L, DBA_OBJECTS O
WHERE L.ID1 = O.OBJECT_ID AND O.OBJECT_NAME =UPPER(‘TEMP_FSF_GJXX’) );
kill rac模式上的实例进程
select * from DBA_OBJECTS O WHERE O.OBJECT_NAME =UPPER(‘INTE_FIN_SUB’);
select * from GV\(LOCK L where L.ID1 in <br /> (select O.OBJECT_ID from DBA_OBJECTS O WHERE O.OBJECT_NAME =UPPER('INTE_FIN_SUB'));<br /> <br /> select * from GV\)SESSION V where V.SID in (‘2138’,‘1496’,‘365’);
alter system kill session ‘365,58073,@2’ immediate;
alter system kill session ‘1496,133,@2’ immediate;
alter system kill session ‘2138,4769,@2’ immediate;
select * from v\(asm_diskgroup</p> <p>SELECT OBJECT_NAME, MACHINE, S.SID, S.SERIAL# <br /> FROM GV\)LOCKED_OBJECT L, DBA_OBJECTS O, GV\(SESSION S <br /> WHERE L.OBJECT_ID = O.OBJECT_ID AND L.SESSION_ID = S.SID; </p> <p><br /> 1.查询数据库中的锁</p> <p><br /> select * from v\)lock;
select * from v\(lock where block=1;</p> <p><br /> 2.查询被锁的对象</p> <p><br /> select * from v\)locked_object;
查被阻塞的会话
select * from v\(lock where lmode=0 and type in ('TM','TX');</p> <p><br /> 查阻塞别的会话锁<br /> select * from v\)lock where lmode>0 and type in (‘TM’,‘TX’);
select * from v\(session where lockwait is not null;</p> <p><br /> 5.查询会话之间锁等待的关系</p> <p><br /> select a.sid holdsid,b.sid waitsid,a.type,a.id1,a.id2,a.ctime from v\)lock a,v\(lock b<br /> where a.id1=b.id1 and a.id2=b.id2 and a.block=1 and b.block=0;</p> <p><br /> 6.查询锁等待事件<br /> select * from v\)session_wait where event=‘enqueue’;
7.查找锁住的表和解锁
select b.owner TABLEOWNER, b.object_name TABLENAME, c.OSUSER LOCKBY, c.USERNAME LOGINID, c.sid SID, c.SERIAL# SERIAL
from v\(locked_object a,dba_objects b, v\)session c
where b.object_id = a.object_id AND a.SESSION_ID =c.sid;
–通过SID, SERIAL解锁
–alter system kill session ‘SID, SERIAL’;
查看锁表进程SQL语句2:
select * from v\(session t1, v\)locked_object t2 where t1.sid = t2.SESSION_ID;
杀掉锁表进程:
如有記錄則表示有lock,記錄下SID和serial# ,將記錄的ID替換下面的738,1429,即可解除LOCK
alter system kill session ‘738,1429’;
步骤1:用以下SQL查看进程列表,判断出被锁定的表
SELECT dob.OBJECT_NAME Table_Name,lo.SESSION_ID||‘, ’||vss.SERIAL# 删除号,
lo.locked_mode,lo.SESSION_ID, vss.SERIAL#,vss.action Action,vss.osuser OSUSER, vss.LOGON_TIME,
vss.process AP_PID, VPS.SPID DB_PID ,vss.*
From v\(locked_object lo, dba_objects dob, v\)session vss, V\(PROCESS VPS<br /> Where lo.OBJECT_ID = dob.OBJECT_ID<br /> and lo.SESSION_ID = vss.SID<br /> AND VSS.paddr = VPS.addr<br /> order by 2,3,DOB.object_name<br /> --查找被锁表<br /> <br /> 步骤2 删除进程,如之前的“删除号”查找出的结果为“286, 2184”,则运行以下SQL<br /> <br /> ALTER system kill session '286, 2184'</p> <p><br /> --Oracle中删除正在连接的用户 <br /> select s.username,s.osuser,s.program,s.MACHINE, s.sid, s.serial#, p.spid, <br /> 'alter system kill session '||''''||trim(s.sid)||','||trim(s.serial#)||''';'<br /> from v\)session s,v\(process p<br /> where s.paddr = p.addr and s.username is not null; </p> <p><br /> 今天在导一个临时表的数据,导出完成后准备清空数据,执行truncate命令时,遇到如下问题:</p> <p><br /> ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效</p> <p><br /> 解决方法如下:</p> <p><br /> =========================================================</p> <p><br /> SQL> select session_id from v\)locked_object;
SESSION_ID
———-
56
SID SERIAL# USERNAME OSUSER
———- ———- —————————— ——————————
56 2088 ghb fy
执行完上述命令后,提示会话断开。重新连接数据库,然后执行truncate操作,成功!
————————————————
版权声明:本文为CSDN博主「baiwuzhilian2008」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baiwuzhilian2008/article/details/

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