2012-04-18 32 views
0

我正在使用基於Web的應用程序,在那裏我必須執行一些自定義操作。但我沒有訪問Java源代碼甚至JSP的。我只能訪問數據庫。在oracle中查找上次執行的查詢

是否有任何方法來找出最後執行的查詢。

簡單地說,表格上有很多觸發器(當我從前端執行某些操作時它們會觸發),我想知道哪個查詢導致觸發器觸發。有沒有辦法找到它們。在觸發器或其他oracle視圖或表中。

+1

你可以看到查詢和他們最後的執行時間和其他元數據在'V $ SQL'的看法,但你需要的權限從您的DBA查詢它。 – Ollie 2012-04-18 10:37:34

+0

我可以要求這樣的權限 – Maddy 2012-04-18 10:41:33

回答

2

您可以使用下面的示例中的觸發器找到語句執行

create or replace TRIGGER tbuTAR_TSM 
    BEFORE UPDATE ON TAR_TSM 
    FOR EACH ROW 
declare 
    v_test varchar2(10000); 
    cursor c1 is 
    select ltrim(sq.sql_text) 
     into v_test 
     from v$sql sq, v$session se, v$open_cursor oc 
    where sq.sql_id = oc.sql_id 
     and se.saddr = oc.saddr 
     and se.sid = oc.sid 
     and se.audsid = SYS_CONTEXT('userenv', 'sessionid') 
    order by oc.LAST_SQL_ACTIVE_TIME desc; 
begin 
    open c1; 
    loop 
    fetch c1 
     into v_test; 
    exit when c1%notfound; 
    if substr(upper(v_test), 1, 6) = 'UPDATE' then 
     if instr(upper(v_test), 'TAR_TSM') != 0 then 
    dbms_output.put_line(v_test); 
    exit; 
     end if; 
    end if; 
    end loop; 
    close c1; 
end; 
+0

這個例子適用於oracle 11g,對於oracle 10g V $ open_cursor沒有last_sql_active_time因此oc.LAST_SQL_ACTIVE_TIME desc必須被sq.last_active_time desc替換 – psaraj12 2012-04-19 03:53:27