数据库:oracle 12.1.0.2
系统:oel 6.8
实验目标:查找正在执行的select以及dml语句的相关信息.
适应场景:select语句或者dml语句占用大量资源,导致系统缓慢,此时就需要查找出该语句的相关信息,然后进行处理.
1、查找执行中的sql
col username for a15
col program for a30
col sql_text for a70
set line 200
col machine for a20
select username, lockwait, status, machine, program, sql_text
from v$session
INNER JOIN v$sql hv
ON sql_hash_value = hv.hash_value
where sid in (select session_id from v$locked_object)
AND status = 'ACTIVE';
USERNAME LOCKWAIT STATUS MACHINE PROGRAM SQL_TEXT
--------------- ---------------- -------- -------------------- ------------------------------ ---------------------------------------
SYS ACTIVE leo sqlplus@leo (TNS V1-V3) insert into t1 select * from t1
2、查看进程
col object_name for a20
set line 200
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode,
SESS.machine
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;
SID SERIAL# ORACLE_USERNAME OS_USER_NAME OBJECT_NAME LOCKED_MODE MACHINE
---------- ---------- ------------------------------ ------------------------------ -------------------- ----------- -----------------
124 27139 SYS oracle T1 3 leo
说明:以上语句测试出虽然insert语句执行完后,却依然能查找出那个sid.
3、结束进程
alter system kill session 'sid,serial#' immediate;
说明:经测试以上只能查找出dml语句.select语句查找不出来.
那么怎么查找出select语句的进程呢?通过以下语句查询出来.
set linesize 400;
set pagesize 400;
col sql_text format a100;
col machine format a25;
col username format a15;
SELECT a.username, a.machine, a.sid, a.serial#, b.sql_id, b.SQL_FULLTEXT
FROM v$session a, v$sqlarea b
WHERE a.sql_address = b.address
AND a.SQL_HASH_VALUE = b.HASH_VALUE;
USERNAME MACHINE SID SERIAL# SQL_ID SQL_FULLTEXT
--------------- ------------------------- ---------- ---------- ------------- -------------------------------------------------------
SYS leo 132 40396 aj72dk1umgn0s SELECT a.username, a.machine, a.sid, a.serial#, b.sql_id, b.SQL_FULLTEXT
FROM v$session a, v$sqlarea b
WHERE a.sql_address = b.address
AND a.SQL_HASH_VALUE = b.HASH_VALUE
SYS WorkGroup\NEWMACHINE 357 51634 2z5kqzmsngdpd select * from t1
Elapsed: 00:00:00.00
终止该条select语句的执行.
SQL> alter system kill session '357,51634' immediate;
System altered.
Elapsed: 00:00:00.06