我已经创建了一个具有标题和身体的Oracle PL / sql包,其中包含了大量的代码.之后,我重新使用不同的源代码(实际上我打算以不同的包名保存)的CREATE OR REPLACE PACKAGE BODY …语句之后,我不小心擦去了该机构的代码.有没有办法我可以从packege恢复我更旧的替换源代码?
您可以通过在all_source上使用闪回查询来获取它.
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.
有关闪回的更多信息可以在here中找到.Tom Kyte还演示了如何使用flashback with all_source here.