【问题标题】:Find out last executed query in oracle在 oracle 中找出最后执行的查询
【发布时间】:2012-04-18 09:36:01
【问题描述】:

我正在使用基于 Web 的应用程序,我必须在其中进行一些自定义。但我无权访问 Java 源代码甚至 JSP。我只能访问数据库。

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

表上有很多触发器(当我从前端执行某些操作时它们会触发),我想知道哪个查询导致触发器触发。有没有办法找到它们。在触发器或其他一些 oracle 视图或表中。

【问题讨论】:

  • 您可以在V$SQL 视图中查看查询及其最后执行时间和其他元数据,但您需要获得权限才能从您的 DBA 中查询。
  • 是的,我可以请求这样的许可

标签: oracle triggers


【解决方案1】:

您可以在触发器中使用以下示例来查找执行的语句

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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多