oracle中不小心删除了包体,如何恢复?谢谢,在线等,急呀

解决方案 »

  1.   

    如果是oracle 10g的话,可以使用recycle的东西.如果不是的话,比较麻烦
      

  2.   

    9i 不行吗??
    recycle,那具体怎么用呀?
      

  3.   

    9i 及以上使用 flashback query, 从 dba_source 中得到包体的内容.
      

  4.   

    挖下坟
    以sysdba权限登录,执行
    SELECT * FROM dba_source AS
    OF TIMESTAMP to_timestamp('所在时间点', 'yyyy-mm-dd hh24:mi:ss') WHERE owner = '所在用户' and name = '需要回复的包名';
    在dba_source的字段text中就是该包的ddl语句
    自己写个存储过程循环连接text完成
      

  5.   

    -- 用闪回查询试试:15:54:02 SYS@tdwora > drop procedure scott.update_salary;过程已删除。15:54:53 SYS@tdwora > select line, text
    15:55:12   2  from dba_source AS OF TIMESTAMP TO_TIMESTAMP('2012-07-20 15:51:00','YYYY-MM-DD HH24:MI:SS')
    15:55:12   3  where owner='SCOTT'
    15:55:12   4    and name=upper('update_salary')
    15:55:12   5    and type='PROCEDURE'
    15:55:12   6  order by line;      LINE TEXT
    ---------- ----------------------------------------------------------------------------------------
             1 PROCEDURE update_salary (dept_in IN NUMBER)
             2 IS
             3   PRAGMA AUTONOMOUS_TRANSACTION;
             4   CURSOR myemps IS
             5     SELECT empno FROM emp
             6     WHERE deptno = dept_in
             7       FOR UPDATE NOWAIT;
             8 BEGIN
             9   FOR rec IN myemps
            10   LOOP
            11     UPDATE emp SET sal = sal * 2.8 + 999
            12      WHERE empno = rec.empno;
            13   END LOOP;
            14   COMMIT;
            15 END;已选择15行。15:55:13 SYS@tdwora >