Oracle

如何辨識 Oracle 中待處理事務中的所有查詢?

  • January 7, 2020

假設我有一個待處理的交易,顯示在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; 

引用自:https://dba.stackexchange.com/questions/149865