我用更新的代码替换后,是否可以从包体中恢复旧的Oracle pl/sql源代码

VVP*_*VVP 12 oracle replace recover package

我创建了一个带有标题和带有大量代码的正文的Oracle PL/SQL包.

后来,在CREATE OR REPLACE PACKAGE BODY...用不同的源代码重新声明语句之后,我最终意外地从该主体中删除了代码(实际上我打算在不同的包名下保存).

有什么方法可以从包中恢复旧的替换源代码吗?

Ian*_*ter 18

您可以通过在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.
Run Code Online (Sandbox Code Playgroud)

我知道我在今晚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.
Run Code Online (Sandbox Code Playgroud)

有关闪回的更多信息,请点击此处.Tom Kyte还说明了如何在这里使用all_source闪回.


Mar*_*ker 4

除非您启用了 DDL 命令的日志记录/审核,或者备份了数据库,否则答案几乎肯定不是

数据库定义(包括存储过程)应始终像源代码一样对待,并在代码存储库中维护

  • 源代码控制对于任何和所有代码都是必须的,包括数据库内容。小的增量更改和频繁的签入无疑是软件开发顺利进行的关键。 (4认同)