我已经创建了一个包含头文件和一个包含大量代码的正文的Oracle PL/SQL包。我可以使用较新的代码替换旧版本的Oracle pl/sql源代码
后来,我用不同的源代码(实际上我打算保存在不同的包名下)重新编写CREATE OR REPLACE PACKAGE BODY...
声明后意外删除了该代码。
有没有什么办法可以从包中恢复旧的替换源代码?
我已经创建了一个包含头文件和一个包含大量代码的正文的Oracle PL/SQL包。我可以使用较新的代码替换旧版本的Oracle pl/sql源代码
后来,我用不同的源代码(实际上我打算保存在不同的包名下)重新编写CREATE OR REPLACE PACKAGE BODY...
声明后意外删除了该代码。
有没有什么办法可以从包中恢复旧的替换源代码?
除非您已经启用日志记录/ DDL命令的审计或数据库的备份,那么答案是几乎可以肯定不是
数据库定义,包括存储过程,应该始终像对待源代码,并维持在代码库中
源代码管理是任何和所有代码必须的,包括数据库的东西。小增量更改和频繁签入是确保顺利进行软件开发的关键。 – 2010-06-04 21:10:32
感谢您的意见 - 不幸的是,我很难学会这一点。实际上,当我完成之后,我几乎可以使用SQL Developer中的“Export DDL”选项保存一份代码的硬拷贝 - 但是出现了一些问题,我失去了它的踪迹。无论如何 - 这一集确保我不会再次忘记它。 – VVP 2010-06-04 23:14:57
它发生在我们所有人身上。只有两种类型的人:那些做备份/使用源代码管理的人,以及从未有过数据丢失的人 – 2010-06-05 07:54:47
您可能可以通过在all_source上使用闪回查询来将其恢复。
例如我的包体目前是2.0版本,执行这个查询作为标准用户:
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.
我知道我这样的连接作为SYSDBA用户后改变了这一9:30左右今天晚上我跑这个查询:
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.
CVS/etc怎么样? – 2010-06-04 18:20:35