请问,我在数据库中建立的存储过程,总是在几天后,莫名其妙的就消失了,不知道是什么原因?这个数据库是我单独做测试用的,再没别人用了,请问,这是什么原因?

解决方案 »

  1.   

    怎么可能自动删除呀?肯定是给你删除了或者你的其他PL/SQL删除了他。
      

  2.   

    没有呀!为什么我建的表和job没事呢?只是存储过程没了?而且这些存储过程也不是同时创建的,有人遇到过这种情况吗?
      

  3.   

    1、可以使用:
         select * from user_source where text like '%drop%procedure%';
    看看有没有存在drop存储过程的代码2、可以用一个系统触发器记录删除存储过程当时的情况,比如IP、登陆用户:
         create or replace trigger Trg_DropDdl 
           after DDL
         begin
           insert into table(user,ip,datetime)
           values(ORA_LOGIN_USER,ORA_CLIENT_IP_ADDRESS,SYSTIMESTAMP)
         END;------------------------
    本人正在找数据库开发方面的工作,对SQL Server比较熟悉,对Oracle的PL/SQL也有些了解.
    [email protected]
      

  4.   

    用sysdba身份或SYS,SYSTEM等DBA用户登陆, 然后做个trigger, 不准删该用户的存储过程~  哈哈~
      

  5.   

    用 myanda99()  的方法看了,没有!
      

  6.   

    我现在用myanda99()  的第二个方法看看,能不能查到.你们说,有什么操作能够删除掉存储过程?
    和我建立存储过程的登陆身份有关吗?
      

  7.   

    建立的存储过程与登陆身份有关。比如有两个用户user1和user2;假设用user1登陆,然后用user1创建了存储过程proc1;再次用user2登陆,那么user2不能直接用call proc1,而是要用call user1.proc1(假设已经授权给了user2);------------------------
    本人正在找数据库开发方面的工作,对SQL Server比较熟悉,对Oracle的PL/SQL也有些了解.
    [email protected]
      

  8.   

    这是我写的:
    create or replace trigger Trg_DropDdl after DDL on database--创建一个系统触发器记录删除存储过程当时的情况,比如IP、登陆用户
         begin
           insert into droppro(user,ip,time)
           values(ORA_LOGIN_USER,ORA_CLIENT_IP_ADDRESS,SYSTIMESTAMP);
         END;
    但是,这以后,我就不能再进行drop动作了,总是抱错!说递归错误