我创建了一个 Oracle PL/SQL 包,其中包含一个标题和一个包含大量代码的正文。
CREATE OR REPLACE PACKAGE BODY...
后来,在使用不同的源代码(实际上我打算以不同的包名称保存)重新运行语句后,我最终意外地从该正文中删除了代码。
有什么办法可以从包中恢复旧的替换源代码?
您可以通过对 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.
除非您启用了 DDL 命令的日志记录/审计或数据库备份,否则答案几乎肯定不是
数据库定义(包括存储过程)应始终被视为源代码,并在代码存储库中维护