查看当前oracle中正在执行的sql语句。
问题现象
最近一直在做,通过java后台,如何知道Oracle正在执行sql。因为不能与客户进行有效的沟通,也没有到现场了解,数据是如何进行的导入,所以这方面一直没有得到有效的突破;
原因分析
在查找资料的时候,发现了一条Sql语句。通过这条语句,可以知道当前连接的数据库正在执行的sql语句是什么。是一种比较有效的获取当前数据库动态的方式;通过获取当前执行的sql语句,来判断当前数据库是否oracle账号有在执行;
处理步骤
先执行以下查询语句select a.program, b.spid, c.sql_text,c.SQL_ID
from v$session a, v$process b, v$sqlarea c
where a.paddr = b.addr
and a.sql_hash_value = c.hash_value
and a.username is not null;
效果PROGRAMSPIDSQL_TEXTSQL_ID
racgimon@cdcj1 (TNS V1-V3)12DECLARE reason_id65vuzhm491wk9
oracleRLZY@rx6600-2 (TNS V1-V3)25867SELECT "AKB020" FROM "KB09rp36jmgpj5a
oracleRLZY@rx6600-2 (TNS V1-V3)25869SELECT "AAC001","BTC102"00931052n13uq
oracleRLZY@rx6600-2 (TNS V1-V3)3018SELECT "AAC001","BTC102"00931052n13uq
plsqldev.exe26531select a.program, b.spid5qq47bz3tzfws
JDBC Thin Client21074select * from ( select r686nqabc8sgs2
如上表中的program列中的jdbc thin client代表的是通过jdbc连接执行的sql语句由于sql_text列没有显示完整的sql语句,所以可以利用sql_id字段686nqabc8sgs2再查询v$sql
Sql语句如下:
selecta.* from v$sql a where a.SQL_ID='686nqabc8sgs2'
可以查看完整的sql文本内容