查找oracle中最后执行的查询

查找oracle中最后执行的查询,oracle,triggers,Oracle,Triggers,我正在使用一个基于web的应用程序,在那里我必须进行一些自定义。但是我没有访问Java源代码甚至JSP的权限。我只能访问数据库 有没有办法找出最后执行的查询 简单地说,表上有许多触发器(当我从前端执行某些操作时,它们会触发),我想知道是哪个查询导致触发。有办法找到他们吗。在触发器或其他oracle视图或表中。您可以在触发器中使用以下示例来查找执行的语句 create or replace TRIGGER tbuTAR_TSM BEFORE UPDATE ON TAR_TSM FOR EA

我正在使用一个基于web的应用程序,在那里我必须进行一些自定义。但是我没有访问Java源代码甚至JSP的权限。我只能访问数据库

有没有办法找出最后执行的查询


简单地说,表上有许多触发器(当我从前端执行某些操作时,它们会触发),我想知道是哪个查询导致触发。有办法找到他们吗。在触发器或其他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;

您可以在
V$SQL
视图中查看查询及其上次执行时间和其他元数据,但您需要从DBA处获得查询权限。是的,我可以要求这样的权限此示例适用于oracle 11g,对于oracle 10g V$open\u游标没有上次sql\u活动时间,因此oc.last\u sql\u活动时间描述必须替换为sq.last\u活动时间描述