-- 在排查事务执行慢的原因时非常有用, 可以看到当前执行的sql处于何种等待事件 SELECT s.sid, s.serial#, s.event, a.sql_text, a.sql_fulltext, s.username, s.status, s.machine, s.terminal, s.program, a.executions, s.sql_id, p.spid, a.direct_writes FROM (SELECT*FROM v$session WHERE status ='ACTIVE') s LEFTJOIN v$sqlarea a ON s.sql_id = a.sql_id INNERJOIN v$process p ON s.paddr = p.addr
-- 正在执行的SQL SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value
干掉一个死锁的SQL会话
1 2 3 4 5
-- alter ssytem kill session 'sid,serial#'; -- 这个比较常用, 解决掉某个被锁住的会话, 下面这句话可以查询死锁会话 SELECT'alter system kill session '''|| sid ||','|| serial# ||''';' "Deadlock" FROM v$session WHERE sid IN (SELECT sid FROM v$lock WHERE block =1);
侦查一下有哪些人在删数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
-- 使用Hist视图查询最近三天执行过哪些删除语句 -- dba_hist_sqltext的command_type字段有以下常见的几种类型 -- 2 insert; 3 select; 6 update; 7 delete; -- 42 alter session; 44 commit; 47 begin...end; 48 SET TRANSACTION; -- 49 alter system; 85 truncate table; SELECT c.username, a.program, b.sql_text, b.command_type, a.sample_time FROM dba_hist_active_sess_history a JOIN dba_hist_sqltext b ON a.sql_id = b.sql_id JOIN dba_users c ON a.user_id = c.user_id WHERE a.sample_time BETWEEN SYSDATE -3AND SYSDATE AND b.command_type IN (7, 85) ORDERBY a.sample_time DESC;