在用新代码替换后,我能否从包体中恢复旧的Oracle pl/sql源代码

ne5o7dgx  于 2023-11-17  发布在  Oracle
关注(0)|答案(3)|浏览(167)

我创建了一个Oracle PL/SQL包,它有一个头和一个包含大量代码的主体。
后来,在用不同的源代码重新运行CREATE OR REPLACE PACKAGE BODY...语句(实际上我打算用不同的包名保存)后,我意外地从该主体中删除了代码。
有没有什么方法可以从软件包中恢复旧的替换源代码?

6kkfgxo0

6kkfgxo01#

闪回查询在all_source视图上不起作用,你需要像这样在sys.source$上执行闪回查询:

select source
    from sys.source$
    as of timestamp
    to_timestamp('8-NOV-2023 12:15:00', 'DD-MON-YYYY HH24:MI:SS')
where obj# = 109026;

字符串

kzipqqlq

kzipqqlq2#

您可以通过对all_source使用闪回查询来获取它。
例如,我的包体当前是版本2,以标准用户的身份执行此查询:

SQL> select text
  2  from all_source
  3  where name = 'CARPENTERI_TEST'
  4  and type = 'PACKAGE BODY';

TEXT

package body carpenteri_test
is

procedure do_stuff
is
begin
   dbms_output.put_line('version 2');
end do_stuff;

end carpenteri_test;

10 rows selected.

字符串
我知道我在今晚9:30左右更改了这个,所以在作为SYSDBA用户连接后,我运行了这个查询:

SQL> select text
  2  from all_source
  3  as of timestamp
  4  to_timestamp('04-JUN-2010 21:30:00', 'DD-MON-YYYY HH24:MI:SS')
  5  where name = 'CARPENTERI_TEST'
  6  and type = 'PACKAGE BODY';

TEXT
----------------------------------------------------------------------------

package body carpenteri_test
is

procedure do_stuff
is
begin
   dbms_output.put_line('version 1');
end do_stuff;

end carpenteri_test;

10 rows selected.


更多关于flashback的信息可以在这里找到。Tom Kyte还演示了如何使用flashback与all_source在这里。

t0ybt7op

t0ybt7op3#

除非您启用了SQL命令的日志记录/审核,或者备份了数据库,否则答案几乎肯定是否定的
数据库定义(包括存储过程)应始终像对待源代码一样对待,并在代码存储库中维护

相关问题