有沒有一種方法調用OCIStmtExecute()
後得到SQL_ID /兒童數/計劃哈希?我在OCIAttrGet()
看不到它。如何獲得SQL_ID在OCI
注:由於誰也看不出v$session
一個普通用戶 - 如果我可以這麼簡單,作爲執行select prev_sql_id, prev_child_number from v$session where sid=sys_context('USERENV', 'SID')
謝謝!
有沒有一種方法調用OCIStmtExecute()
後得到SQL_ID /兒童數/計劃哈希?我在OCIAttrGet()
看不到它。如何獲得SQL_ID在OCI
注:由於誰也看不出v$session
一個普通用戶 - 如果我可以這麼簡單,作爲執行select prev_sql_id, prev_child_number from v$session where sid=sys_context('USERENV', 'SID')
謝謝!
沒有辦法拿到SQL_ID或OCI或SYS_CONTEXT的plan_hash_value。不過,用oracle支持來提交增強請求以添加該功能可能是一個好主意。
有跟蹤會話的所有SQL語句與下面的語句的可能性:
alter session set events '10046 trace name context forever, level 12'
根據或多或少的痕跡產生的跟蹤級別(級別4和8產生較少的信息)。要關閉跟蹤執行
alter session set events '10046 trace name context off'
另一種選擇是創建一個函數來計算SQL_ID自己
當然,這是錯誤的傾向,因爲甲骨文可能會改變機制來計算sql_id in未來。
下面的查詢應該工作,但只有當它是下列您要找出一個第二天語句的執行。
select prev_sql_id, prev_child_number
from v$session
where sid = sys_context('userenv','sid')
它的確行得通......大部分時間。我的客戶爲Oracle 12c編寫了一個PL/SQL應用程序,並將上述查詢放在執行應用程序查詢的代碼部分。他向我展示了輸出,表明它有時會爲prev_child_number返回錯誤的值。我看了,它確實沒有總是返回正確的數據。超過99個不同的語句執行,它返回錯誤的prev_child_number 6次。
我在尋找導致此查詢返回錯誤的數據,並沒有發現任何尚未存在的缺陷的過程。我可能不得不用Oracle支持登錄一個新的SR。
爲什麼你需要sql_id?你究竟在努力實現什麼? – steve
我想添加我的應用程序的調試日誌,執行sql_id xxx與plan_hash yyy,以便將我的應用程序日誌綁定到ASH – Gaius