2010-06-04 15 views
10

我已经创建了一个包含头文件和一个包含大量代码的正文的Oracle PL/SQL包。我可以使用较新的代码替换旧版本的Oracle pl/sql源代码

后来,我用不同的源代码(实际上我打算保存在不同的包名下)重新编写CREATE OR REPLACE PACKAGE BODY...声明后意外删除了该代码。

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

+4

CVS/etc怎么样? – 2010-06-04 18:20:35

回答

4

除非您已经启用日志记录/ DDL命令的审计或数据库的备份,那么答案是几乎可以肯定不是

数据库定义,包括存储过程,应该始终像对待源代码,并维持在代码库中

+3

源代码管理是任何和所有代码必须的,包括数据库的东西。小增量更改和频繁签入是确保顺利进行软件开发的关键。 – 2010-06-04 21:10:32

+0

感谢您的意见 - 不幸的是,我很难学会这一点。实际上,当我完成之后,我几乎可以使用SQL Developer中的“Export DDL”选项保存一份代码的硬拷贝 - 但是出现了一些问题,我失去了它的踪迹。无论如何 - 这一集确保我不会再次忘记它。 – VVP 2010-06-04 23:14:57

+0

它发生在我们所有人身上。只有两种类型的人:那些做备份/使用源代码管理的人,以及从未有过数据丢失的人 – 2010-06-05 07:54:47

15

您可能可以通过在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. 

关于闪回的更多信息可以参考here。 Tom Kyte也演示了如何使用闪回与all_source here

+0

谢谢 - 我尝试了第一种一个(没有时间戳),它给了我最新的代码。然后我添加了时间戳,并得到“权限不足”的错误。将它转发给可能为我做的dba。 – VVP 2010-06-04 23:13:06

+0

DBA说“all_source不能用于闪回”。 – VVP 2010-06-07 18:39:14

+0

将您的DBA从Tom Kyte链接到此链接: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6135698985750#13932884772332 – 2010-06-07 18:51:12

相关问题