查看那些表被锁住:
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
查看引起死锁的会话:
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
查看被阻塞的会话:
select * from dba_waiters;
可以提交或回滚阻塞的话,释放锁或者杀掉ORACLE进程:
alter system kill sessin 'sid,serial#';
杀oracle无用进程
select 'kill -9 '||spid
from v$process
where addr in (select p.addr
from v$process p
where pid <> 1
minus
select s.paddr
from v$session s);
查看连接关闭,但是会话还在的sid
select sid, program, machine
from v$session
where paddr in
(SELECT s.paddr
FROM x$kglpn p, v$session s
WHERE p.kglpnuse = s.saddr(+)
AND p.kglpnmod <> 0
and kglpnhdl in
(select p1raw
from v$session_wait
where event in ('library cache pin',
'library cache lock',
'library cache load lock')));
查看等待的对象
select l.session_id,o.owner,o.object_name from v$locked_object l,dba_objects o where l.object_id=o.object_id;
查看造成等待的会话
select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time;
结束指定会话
alter system kill session '14972,29501';
alter system kill session '29,35377';
查看锁表
select * from dba_blockers;
select * from v$lock;
查看是否被锁表
select a.object_name,
b.session_id,
c.serial#,
c.program,
c.username,
c.command,
c.machine,
c.lockwait
from all_objects a, v$locked_object b, v$session c
where a.object_id = b.object_id
and c.sid = b.session_id;
Select sid,
serial#,
username,
SCHEMANAME,
osuser,
MACHINE,
terminal,
PROGRAM,
owner,
object_name,
object_type,
o.object_id,
s.sql_id,
s.event
from dba_objects o, v$locked_object l, v$session s
where o.object_id = l.object_id
and s.sid = l.session_id and object_name=upper('SDI_BOND_YIELD_CURVE') and s.username='IR_INDICATOR';
select * from dba_ddl_locks where name=upper('qx_broadband_rent_sum0');
阻塞会话查看
select blocksession.sid as blk_sess_sid,
blocksession.serial# as blk_sess_serial#,
blocksession.username as blk_sess_username,
blocksession.program as blk_sess_program,
blocksession.osuser as blk_sess_osuser,
blocksession.logon_time as blk_sess_logon_time,
blocksession.machine as blk_sess_machine,
blocksession.status as blk_sess_status,
blockobject.object_name as blk_table,
waitsession.sid as wait_sess_sid,
waitsession.serial# as wait_sess_serial#,
waitsession.username as wait_sess_username,
waitsession.program as wait_sess_program,
waitsession.osuser as wait_sess_osuser,
waitsession.logon_time as wait_sess_logon_time,
waitsession.machine as wait_sess_machine,
waitsession.status as wait_sess_status,
bsqlarea.SQL_TEXT as blk_ses_sql,
sqlarea.SQL_TEXT as wait_ses_sql
from v$lock blocklock,
v$lock waitlock,
v$session blocksession,
v$session waitsession,
v$locked_object lockedobject,
dba_objects blockobject,
v$sqlarea sqlarea,
v$sqlarea bsqlarea
where blocklock.block = 1 and blocklock.sid != waitlock.sid and
blocklock.id1 = waitlock.id1 and blocklock.id2 = waitlock.id2 and
blocklock.sid = blocksession.sid and waitlock.sid = waitsession.sid and
lockedobject.session_id = blocksession.sid and
lockedobject.object_id = blockobject.object_id and
waitsession.SQL_ADDRESS = sqlarea.ADDRESS(+) and
waitsession.SQL_HASH_VALUE = sqlarea.HASH_VALUE(+) and
nvl(blocksession.sql_id,blocksession.PREV_SQL_ID) = bsqlarea.sql_id(+);
set echo off
set feedback off
set heading off
set verify off
set linesize 180
set pagesize 999
column username format a16
column event format a40
column sql_child_number format 9999 heading 'SQL Child|Number'
column blocking_instance format 9999 heading 'Blocker|Instance'
column blocking_session format 99999 heading 'Blocker|Session'
column FINAL_BLOCKING_INSTANCE format 9999 heading 'F_Blocker|Instance'
column FINAL_BLOCKING_SESSION format 99999 heading 'F_Blocker|Session'
column "Lock" format a6
column "Mode" format a6
spool 1.log
Select a.sid,
a.username,
a.PROCESS,
a.MACHINE,
a.PROGRAM,
a.logon_time,
a.sql_id,
sysdate,
to_char(b.SQL_FULLTEXT),
a.seq#,
a.event,
a.sql_child_number,
chr(to_char(bitand(p1, -16777216)) / 16777215) ||
chr(to_char(bitand(p1, 16711680)) / 65535) "Lock",
to_char(bitand(p1, 65535)) "Mode",
a.blocking_instance,
a.blocking_session,
a.final_blocking_instance,
a.final_blocking_session,
a.last_call_et
From v$session a,v$sql b
Where a.sql_id=b.sql_id and a.event = 'enq: TX - row lock contention';
查看锁表的原因
select l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action
from v$sqlarea a, v$session s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#;
查看被锁的表
select p.spid,
c.object_name,
b.session_id,
b.oracle_username,
b.os_user_name
from v$process p, v$session a, v$locked_object b, all_objects c
where p.addr = a.paddr
and a.process = b.process
and c.object_id = b.object_id;
杀会话
Select 'alter system kill session ''' || sid || ',' || serial# || ''';'
from dba_objects o, v$locked_object l, v$session s
where o.object_id = l.object_id
and s.sid = l.session_id
and s.username = 'ABP_INT'
AND object_name = 'INF_INC_DATA_INF';
select 'alter system disconnect session '''||sid||','||serial#||''''||' immediate;' from v$session where status = 'INACTIVE';
alter system disconnect session '12834,30510' immediate;
查看会话连接总数
SELECT sid,serial#,username,osuser,machine,program,status,event,BLOCKING_SESSION,sql_id FROM gV$SESSION where command=2 order by event;
SELECT sid,serial#,username,osuser,machine,program,status,event,BLOCKING_SESSION,sql_id FROM gV$SESSION where blocking_session is not null order by event;
select event,count(*) from v$session where username='ASSET' group by event order by 2;
select username,sid,event,BLOCKING_INSTANCE,BLOCKING_SESSION,program from v$session where sid='239';
select username,machine,program,count(*) from v$session group by username,machine,program order by 4 desc;
SELECT sid,serial#,username,osuser,machine,program,status FROM V$SESSION where username='ICC_REMIND'/*WHERE status='INACTIVE'*/ order by username;
select * from v$process where addr in (select paddr from v$session where program='JDBC Thin Client');
SELECT sid,serial#,username,osuser,machine,program,status FROM V$SESSION where machine='WORKGROUP\OAS-UMAP-07';
SELECT sid,serial#,username,osuser,machine,program,status FROM V$SESSION where osuser like '%w_tydk_%';
SELECT sid,serial#,username,osuser,machine,program,status FROM V$SESSION /*WHERE status='INACTIVE'*/ order by username;
select * FROM V$PROCESS WHERE ADDR IN(SELECT paddr FROM V$SESSION WHERE machine like 'ducc_dca%' and status='INACTIVE');
select spid from v$process where addr not in (select paddr from v$session);
select * from v$sqltext a where a.address in(select addr from v$process b where b.pid='2703');
select a.pid,a.spid,b.sql_text,b.sql_id from v$process a,v$sqltext b where a.addr=b.address and a.pid='1324';
select * from v$session where username='IAM';
select count(*) from v$session;
select count(*) from v$process;
检查正在回滚
select usn,
state,
undoblockstotal "Total",
undoblocksdone "Done",
undoblockstotal - undoblocksdone "ToDo",
undoblocksdone / undoblockstotal "percent",
decode(cputime,
0,
'unknown',
to_char(sysdate + (((undoblockstotal - undoblocksdone) /
(undoblocksdone / cputime)) / 86400),
'yyyy-mm-dd hh24:mi')) "Estimated time to complete"
from gv$fast_start_transactions
WHERE state <> 'RECOVERED';
show parameter fast_start
alter system set fast_start_parallel_rollback=HIGH;
根据sid查看spid及sql_id
SELECT a.username,
a.OSUSER,
a.machine,
a.program,
a.sid,
a.serial#,
b.spid,
a.process,
a.status,
c.piece,
c.sql_text,
c.sql_id
FROM v$session a, v$process b, v$sqltext c
WHERE b.spid ='103603'
AND b.addr = a.paddr
AND a.sql_address = c.address(+)
ORDER BY c.piece;
SELECT a.username,
a.OSUSER,
a.machine,
a.program,
a.sid,
a.serial#,
b.spid,
a.process,
a.status,
c.piece,
c.sql_text,
c.sql_id
FROM v$session a, v$process b, v$sqltext c
WHERE b.spid ='16829'
AND b.addr = a.paddr
AND a.sql_address = c.address(+)
ORDER BY c.piece;
SELECT sid,serial#,username,osuser,machine,program,status,event,sql_id FROM gV$SESSION where sid in(1926,1981,1651,2038,2093,2258,2423,2478,2973);
select spid,osuser,s.sql_id,s.program,s.sid,s.machine from v$session s, v$process p where s.paddr = p.addr and p.spid in (1483,1485,1488,1490);
killed会话没关闭处理
select spid, username, terminal, program, background
from v$process
where addr in (select p.addr
from v$process p
where pid <> 1
minus
select s.paddr
from v$session s); --11550 11552
SELECT * FROM V$PROCESS WHERE ADDR IN(SELECT paddr FROM V$SESSION WHERE machine like 'ducc_dca%' and status='INACTIVE');
根据数据库sid找出spid(系统进程)
select spid, osuser, s.program from v$session s, v$process p where s.paddr = p.addr and s.sid ='2559';
查看阻塞
select sid,block from v$lock where block=1;
select sid,type,lmode,id1,id2,request,block from v$lock where type in('TX','TM') order by 1,2;
select sid,event from v$session_wait where sid in(69,101);
查看谁阻塞了谁
select object_id,session_id from v$locked_object where object_id in(select object_id from v$locked_object where session_id=11287);
查看等待事件
select event,count(*) from v$session_wait group by event order by 2 desc;
select event,sid,p1,p2,p3 from v$session_wait where event not like 'SQL*%' and event not like 'rdbms%';
select to_char(sample_time, 'yyyymmdd hh24:mi:ss'), event, p1, p2, count(1)
from gv$active_session_history
where sql_id = 'b7y00v7k7zv2n'
and event in ('gc buffer busy acquire', 'gc cr request')
and inst_id = 2
group by to_char(sample_time, 'yyyymmdd hh24:mi:ss'), event, p1, p2;
根据等待事件查看sql_id
select sw.p1,
s.sql_id,
s.username,
count(*),
(ratio_to_report(count(*)) over()) * 100 pct
from v$session s, v$session_wait sw
where s.event like '%db file sequential read%'
and s.sid = sw.sid
group by sw.p1, s.sql_id,s.username
order by count(*) desc;
根据sql_id查看sql
select * from v$session ss where ss.USERNAME='NOSS_OP' AND ss.STATUS!='INACTIVE' AND ss.PROGRAM='sqlplus@abp-app-007 (TNS V1-V3)';
select to_char(t.SQL_FULLTEXT) from v$sql t where sql_id='d49gm4w1rnj47';
select * from v$sql_plan where sql_id='d49gm4w1rnj47';
查看死锁操作系统进程
select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;
查询引起死锁的语句
select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object));