一个存储过程比较重要,有时可能遭到不明用户的修改,调用.怎样监督这种情况?
考虑到资源消耗的问题,不可能启用审计和SQL跟踪,倾向于使用动态视图,如v$session,dba_objects等.

解决方案 »

  1.   

    select * from all_objects where owner = '你的用户ID' and objectname = '你的存储过程名'
    如果你的存储过程被别人修改过,其中的last_ddl_time和timestamp两个字段的值会发生变化。
      

  2.   

    select * from all_objects where owner = '你的用户ID' and objectname = '你的存储过程'
    其中用户ID和存储过程名字都必须大写
      

  3.   

    楼上的搞笑,我要监督它的调用情况,哪台机器,哪个程序调用了它,看all_objects有什么意义?
      

  4.   

    我本想从v$session获得调用的机器名和程序,把找不到与dba_objects中对象id对应的列值
      

  5.   

    大意了,谢谢 AlexLJM 老师指正。
    还有 kerisyml(魂之利刃) 老师说的用户名需要大写的问题也是要注意的!
      

  6.   

    使用Oracle的审计功能,最简单。
    1.将pfile 中的audit_trail参数设置为DB, audit_trail = DB
    2.发出审计命令如下(使用system数据库用户进行):
    audit execute on procedure <schema_name>.<procedure_name>;
    3.查询以下数据字典获得被监视的存储过程信息:
    DBA_AUDIT_OBJECT、DBA_AUDIT_TRAIL