巧用dba_hist_active_sess_history跟蹤某個時間段內SQL

hd_system發表於2016-11-08

昨日由於應用資料更改有誤,開發商也不知道是那條sql導致的資料出現偏差,於是要我協助查詢和該表相關的update語句,幾經周折下,找到了dba_hist_active_sess_history檢視,該檢視資料來自於V$ACTIVE_SESSION_HISTORY。其中dba_hist_active_sess_history檢視的記錄了記憶體中活動會話的歷史資訊,而動態效能檢視V$ACTIVE_SESSION_HISTORY則記錄了當前活動會話資訊。

透過dba_hist_active_sess_history檢視關聯v$sqlarea和DBA_HIST_SNAPSHOT可以跟蹤到某個時間段內的sql。當然能跟蹤到的sql多少取決於v$sqlarea,畢竟只有還保留在v$sqlarea中的sql才能跟蹤到。
下面是根據客戶需求寫的查詢,查詢2011-12-28日對dj_sz表的update語句

select to_char(b.begin_interval_time,'yyyy-mm-dd hh24:mi:ss') update_time,c.sql_text sql_text
from dba_hist_active_sess_history a,DBA_HIST_SNAPSHOT b,v$sqlarea c
where a.snap_id=b.snap_id
and a.sql_id=c.sql_id
and b.begin_interval_time>=to_date('2011-12-28','yyyy-mm-dd') and b.begin_interval_time < to_date('2011-12-29','yyyy-mm-dd')
and lower(c.sql_text) like '%update%dj_sz%'
order by update_time;








來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29209863/viewspace-2128010/,如需轉載,請註明出處,否則將追究法律責任。

相關文章