1. 程式人生 > >oracle11g 分析sql語句,SQL跟蹤

oracle11g 分析sql語句,SQL跟蹤

背景:公司採購了一個OA系統,資料庫是ORACLE的,沒有原始碼;有一些二次開發的介面

          竟然是資訊中心部門採購的,一群不懂技術的人,都不知道選型,也不考慮後續擴充套件,真是日了狗。

需求:資訊中心要把所有OA流程,與之關聯的查詢設定、應用繫結設定、授權部門/人/組、自定義業務表、排序、自定義計算規則 都查出來,儲存到一個表中,再用一個軟體呈現

瞭解情況如下:無原始碼,反編譯竟然找不到DML語句,以及DML語句與功能的管理(200多個jar包,class都在jar中),看了30多個,已經想日狗了

解決思路:我想找個SQL跟蹤工具,點選頁面某個選單、或功能 檢視sql 解決問題。

苦逼過程:1,首先查找了sqlmonitor,伺服器搭建很麻煩,資料庫竟然沒有安裝。我去,sqlmonitor 我小白了下,瞭解是效能優化的,貌似不能解決問題,就沒有研究【放棄】

                   2,研究LogMiner半天這個,返現都是INSERT 之類的,並且時間設定失敗(小白一個,沒解決),只能全量,我還不想新增OA流程去找SQL關係。【放棄】
 

終極解決方案:

1,查詢最近的sql (假如你預計你什麼時候點選功能,時間就怎麼設定)

SELECT * FROM v$sql  where last_active_time>TO_DATE('2018-11-09 13:17:00','yyyy-mm-dd hh24:mi:ss')
ORDER BY LAST_ACTIVE_TIME DESC;

註釋:發現有sql ,但是裡面:1 ;   :2等等 是什麼鬼。

2,解決上面的鬼東西,看如下

select
s.sql_text,
b.name,b.position,b.dup_position,
b.value_string,s.LAST_ACTIVE_TIME,s.SQL_FULLTEXT
from v$sql s, v$sql_bind_capture b
where  s.last_active_time>TO_DATE('2018-11-09 13:17:00','yyyy-mm-dd hh24:mi:ss') and s.hash_value=b.hash_value
ORDER BY s.LAST_ACTIVE_TIME DESC,b.position;

註釋:大多數執行sql 都需要預編譯的,故很多引數繫結在v$sql_bind_capture 這個表。