某用户用command跑了个procedure,如何查询?

解决方案 »

  1.   

    v$sqlareaselect sql_text from v$sqlarea
    where upper(sql_text) like '%PROCEDURE_NAME%'
      

  2.   

    前提是还在内存里,不在了,么办法。
    可以考虑下oracle审计功能。
      

  3.   

    你是想要查询什么呢?SQL_TEXT
    ------------------------------
    begin pro('000001'); end;
    是上面的这种sql语句吗?
      

  4.   

    一,审计功能:详细的用法不是一两句话可以描述的,但可以google到;
    二,在procedure中加个记录日志的方法,比如将当前执行用户的一些信息写到某个日志表中。
      

  5.   

       v$sqlarea 
      审计:
     审计告知一切 Oracle 数据库 10g 审计以一种非常详细的级别捕获用户行为,它可以消除手动的、基于触发器的审计 假定用户 Joe 具有更新那张表的权限,并按如下所示的方式更新了表中的一行数据。 
    update SCOTT.EMP set salary = 12000 where empno = 123456;
    您如何在数据库中跟踪这种行为呢?在 Oracle 9i 数据库及其较低版本中,审计只能捕获“谁”执行此操作,而不能捕获执行了“什么”内容。例如,它让您知道 Joe 更新了 SCOTT 所有的表 EMP,但它不会显示他更新了该表中员工号为 123456 的薪水列。它不会显示更改前的薪水列的值—要捕获如此详细的更改,您将不得不编写您自己的触发器来捕获更改前的值,或使用 Log Miner 将它们从存档日志中检索出来。 这两种方法都能让您跟踪更改的内容并记录更改前的值,但其成本非常高。使用触发器编写审计数据可能会对性能产生主要的影响;鉴于此,在某些情况下(如在第三方应用中)禁止使用用户定义的触发器。Log Miner 不会影响性能,但它是依赖于存档日志的可用性来跟踪更改的。 细粒度审计 (FGA),是在 Oracle 9i 中引入的,能够记录 SCN 号和行级的更改以重建旧的数据,但是它们只能用于 select 语句,而不能用于 DML,如 update、insert 和 delete 语句。因此,对于 Oracle 数据库 10g 之前的版本,使用触发器虽然对于以行级跟踪用户初始的更改是没有吸引力的选择,但它也是唯一可靠的方法。 随着 Oracle 10g 的到来,由于审计能力的两个重大的改变,这些限制也随之而去。由于两种审计类型涉及到—标准审计(在所有版本中均可用)和细粒度审计(在 Oracle 9i 及其以上版本中可用)—我们将分别对它们进行处理,然后看看它们是如何相互补充以提供一个单一的、强大的跟踪功能。
      

  6.   

    我想查:
    exec user   exec time  procedure name
    usera        2010-2-24    procecureA
    谢谢!
      

  7.   

    procedure在此存储过程里做记录就好了.....做个日志记录表
      

  8.   

    审计存储过程执行,如下步骤就可以了,例如要审计myproc存储过程的执行1、打开系统审计参数
    alter system set audit_trail=db scope=spfile;2、重启数据库
    c:\>sqlplus "/ as sysdba"
    shutdown immediate;
    startup;3、打开对myproc执行的审计
    audit execute on myproc by access;4、执行一下存储过程myproc(测试)
    execute myproc5、查看审计日志
    select * from dba_audit_trail;6、如果要关闭审计
    noaudit execute on myproc;