檢視當前oracle中正在執行的sql語句
阿新 • • 發佈:2018-12-30
- 問題現象
- 最近一直在做,通過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 |
[email protected] (TNS V1-V3) |
12 |
DECLARE reason_id |
65vuzhm491wk9 |
[email protected] (TNS V1-V3) |
25867 |
SELECT "AKB020" FROM "KB |
09rp36jmgpj5a |
[email protected] (TNS V1-V3) |
25869 |
SELECT "AAC001","BTC102" |
00931052n13uq |
[email protected] (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文字內容