2014-03-07 57 views
0

今天,我係統中有人更新了意外的語句。所以這讓我的系統運行不正確。 現在,我想看看日誌誰(或哪個會話)做到了。我可以在AWR報告中找到它嗎?如果我能在AWR報告中找到它,那麼它特別在哪裏? 非常感謝!oracle - 會話執行指定的查詢

+0

如果啓用此功能,以'v $ active_session_history'開頭 – haki

回答

1

這種變化可能有很多來源,取決於它是如何製造的。只有最後一個選項Log Miner纔會給你所有你想要的東西。但它也需要最大的努力。有些來源不會告訴你會話,但也許只是看到相關的SQL將足以找出誰做的。

  1. V $ SQL - 所有SQL語句去那裏,但是他們老化的共享池,所以你需要快速搜索。如果他們使用了獨特的查詢,您可能可以通過類似select * from v$sql where lower(sql_text) like '%table_name%';的方式找到它。
  2. AWR - 您可能能夠在select * from dba_hist_sqltext where lower(sql_text) like '%table_name%';中找到SQL,如果幸運的話,您可以從select * from dba_hist_active_sess_history where sql_id = '<sql id>';中找到一些會話信息。只有活動會話歷史記錄樣本活動,如果查詢運行速度非常快,那麼很可能不會存在。
  3. 閃回查詢 - 如果幸運的話UNDO仍在,您可以從閃回查詢中看到它是如何改變的。這可能會給你準確的時間,以及改變了什麼。 select VERSIONS_STARTSCN, VERSIONS_STARTTIME, VERSIONS_ENDSCN, VERSIONS_ENDTIME, VERSIONS_XID, VERSIONS_OPERATION, your_table.* from your_table versions between scn minvalue and maxvalue;
  4. 登錄礦工 - 我沒有使用過這個,但據說它是這項工作的完美工具。在the documentation閱讀更多關於它的信息。
+0

我發現V $ SQL是最適合我的情況。但是,我無法找到誰或哪個會話執行查詢。也許是服務欄? –

+0

該信息未存儲在V $ SQL中。當它執行時,你可以在V $ SESSION中找到SQL_ID。但通常這類信息只存儲在REDO日誌中,這是Log Miner讀取的內容。它*可能*在其他一些來源中,但只有運氣。 Oracle不能將所有這些信息記錄兩次。 –