如何找回被create or replace覆盖的PL/SQL对象

如题所述

  方案1: 利用Flashback Query 闪回特性,该方案并不要求数据库已启用flashback database,唯一和最关键的要求是create or replace时递归SQL删除source$数据字典基础表相关的undo data,不要因为时间过久而被重用:


  如果无法找出准备的scn作为flashback query闪回原点,那么可以尝试使用as of timestamp多次指定不同的时间点,一般只要PL/SQL对象被覆盖的时间不要太久且实例对undo的并发事务需求较低时,都可以通过以上方法找回被replace/drop 覆盖或删除的PL/SQL对象。


  方案2 利用logminer找出replace/drop PL/SQL对象的递归SQL主要是DELETE语句,利用logminer的UNDO SQL来找回PL/SQL对象的定义。


  该方案的前提是启用了归档且相关的archivelog未被删除,数据库最好是启用了最小追加日志 minimal supplemental logging,否则可能出现挖掘出的Unsupported SQLREDO的情况:


  create or replace替换 一个 procedure存储过程的递归SQL包括以下这些, 主要是删除原procedure在数据字典中的记录并插入新的记录, source$字典基表是找回存储过程的重点:

  可以利用 logminer获得的UNDO SQL替换其中的表名source$为临时表,将DELETE的数据插入到这张临时表中,之后查询SOURCE字段就可以获得被覆盖前的PL/SQL对象的DDL定义。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-22
没法找回,已经替换掉了。有备份找备份。
相似回答