Oracle
如何辨識 Oracle 中待處理事務中的所有查詢?
假設我有一個待處理的交易,顯示在
select * from v$transaction
. 有沒有辦法辨識到目前為止在待處理事務中執行的所有查詢?
我很確定您只能查看事務的最新SQL。Oracle 在塊級別而不是 SQL 級別記錄事務,因此不會保留此資訊。
要查看最新的 SQL,請加入 v 的 SES_ADDR 列 $ transaction with the SADDR column of v $ 會議。例如
SELECT a.sid, a.username, b.xidusn, b.used_urec, b.used_ublk, b.status FROM v$session a, v$transaction b WHERE a.saddr = b.ses_addr order by b.used_urec;
然後您可以從 v 加入 sql_id $ session with v $ sql 查看會話的最新 SQL。例如
select sql_id,sql_text from v$sql where sql_id in (select sql_id from v$session where sid=&sid);
您需要將 sessionid 與 dba_hist_active_sess_history 表加入,以查看會話執行的更多 SQL。即使這樣,它也不一定是完整的列表,因為此視圖通過定期輪詢起作用。
如果您想要特定會話的所有 SQL 列表,則可以使用跟踪或審計,但同樣不會在事務級別記錄。也許您可以將此結果與 v$transaction 中的 start_date 或 start_scn 進行比較,以找出哪些 SQL 屬於哪個事務。
您可以使用閃回資訊來獲取有關給定事務的以前 DML 活動的資訊。預期的詳細資訊取決於是否啟動了補充日誌記錄。
SELECT * FROM Flashback_Transaction_Query WHERE XID = :transaction_id;