我正在使用基於Web的應用程序,在那裏我必須執行一些自定義操作。但我沒有訪問Java源代碼甚至JSP的。我只能訪問數據庫。在oracle中查找上次執行的查詢
是否有任何方法來找出最後執行的查詢。
簡單地說,表格上有很多觸發器(當我從前端執行某些操作時它們會觸發),我想知道哪個查詢導致觸發器觸發。有沒有辦法找到它們。在觸發器或其他oracle視圖或表中。
我正在使用基於Web的應用程序,在那裏我必須執行一些自定義操作。但我沒有訪問Java源代碼甚至JSP的。我只能訪問數據庫。在oracle中查找上次執行的查詢
是否有任何方法來找出最後執行的查詢。
簡單地說,表格上有很多觸發器(當我從前端執行某些操作時它們會觸發),我想知道哪個查詢導致觸發器觸發。有沒有辦法找到它們。在觸發器或其他oracle視圖或表中。
您可以使用下面的示例中的觸發器找到語句執行
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;
這個例子適用於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
你可以看到查詢和他們最後的執行時間和其他元數據在'V $ SQL'的看法,但你需要的權限從您的DBA查詢它。 – Ollie 2012-04-18 10:37:34
我可以要求這樣的權限 – Maddy 2012-04-18 10:41:33