原文地址:http://blog.csdn.net/qq_33301113/article/details/54766751
- 问题现象
- 最近一直在做,通过java后台,如何知道Oracle正在执行sql。因为不能与客户进行有效的沟通,也没有到现场了解,数据是如何进行的导入,所以这方面一直没有得到有效的突破;
- 原因分析
- 在查找资料的时候,发现了一条Sql语句。通过这条语句,可以知道当前连接的数据库正在执行的sql语句是什么。是一种比较有效的获取当前数据库动态的方式;
- 通过获取当前执行的sql语句,来判断当前数据库是否有在执行;
- 处理步骤
- 先执行以下查询语句
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; |
- 效果
PROGRAM | SPID | SQL_TEXT | SQL_ID |
racgimon@cdcj1 (TNS V1-V3) | 12 | DECLARE reason_id | 65vuzhm491wk9 |
oracleRLZY@rx6600-2 (TNS V1-V3) | 25867 | SELECT "AKB020" FROM "KB | 09rp36jmgpj5a |
oracleRLZY@rx6600-2 (TNS V1-V3) | 25869 | SELECT "AAC001","BTC102" | 00931052n13uq |
oracleRLZY@rx6600-2 (TNS V1-V3) | 3018 | SELECT "AAC001","BTC102" | 00931052n13uq |
plsqldev.exe | 26531 | select a.program, b.spid | 5qq47bz3tzfws |
JDBC Thin Client | 21074 | select * from ( select r | 686nqabc8sgs2 |
- 如上表中的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文本内容