Как получить старый код из замененной процедуры (PL / SQL)? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть процедура, которая работала, пока я по ошибке не заменил другой код.Итак, моя процедура началась с CREATE OR REPLACE PROCEDURE xxx.yyy, и я по ошибке заменил ее на некоторый простой код и сохранил его.

Так как я заменил в своей процедуре, так что его заменили, но теперь он не работает так, как я хочуБольше.Как я могу получить мой старый код, который был в этой процедуре (до замены)?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

При наличии архивных журналов за период поиска.Вы можете использовать утилиту LogMiner.Например:

   CREATE OR REPLACE PACKAGE BODY acs_ss2.rest_of_day is

    /*------------------------------------------------------------------*/
    procedure starting(p_date date) is
      rec_newrest   r_rest%rowtype;
      rec_oldrest   r_rest%rowtype;
      rec_rest      r_rest%rowtype;
      v_station   integer := 8902;
      v_dt1 date;
      v_dt2 date;
    begin
SQL CODE...

Определите нужные файлы журнала по времени инцидента.

select name, first_time,  next_time
  from v$archived_log
where first_time >sysdate -3/24

/oracle/app/oracle/product/11.2/redolog/edcu/1_47429_769799469.dbf  22-ноя-2018 10:56:12    22-ноя-2018 12:13:48
/oracle/app/oracle/product/11.2/redolog/edcu/1_47430_769799469.dbf  22-ноя-2018 12:13:48    22-ноя-2018 13:17:06
/oracle/app/oracle/product/11.2/redolog/edcu/1_47431_769799469.dbf  22-ноя-2018 13:17:06    22-ноя-2018 13:39:38

Запустите утилиту logminer.

EXECUTE DBMS_LOGMNR.add_logfile(LOGFILENAME => '/oracle/app/oracle/product/11.2/redolog/edcu/1_47429_769799469.dbf', OPTIONS => DBMS_LOGMNR.NEW); 
EXECUTE DBMS_LOGMNR.add_logfile(LOGFILENAME => '/oracle/app/oracle/product/11.2/redolog/edcu/1_47430_769799469.dbf', OPTIONS => DBMS_LOGMNR.addfile); 
EXECUTE DBMS_LOGMNR.add_logfile(LOGFILENAME => '/oracle/app/oracle/product/11.2/redolog/edcu/1_47431_769799469.dbf', OPTIONS => DBMS_LOGMNR.addfile); 

EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

Запустите SQL длявосстановите наш КОД, см. столбец sql_undo.

SELECT 
to_char(timestamp,'DD-MM-YYYY HH24:MI:SS'),
operation,  
sql_redo,
sql_undo
 FROM v$logmnr_contents
where 
seg_owner='SYS' and  
seg_name='SOURCE$'
==>
TO_CHAR(TIMESTAMP,'DD-MM-YYYYHH24:MI:SS')       OPERATION                              SQL_REDO                                                                                             SQL_UNDO                                                                                             
----------------------------------------------- -------------------------------------- ---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- 
22-11-2018 13:39:14                             DELETE                                 delete from "SYS"."SOURCE$" where "OBJ#" = '197353' and "LINE" = '1' and "SOURCE" = 'package body re insert into "SYS"."SOURCE$"("OBJ#","LINE","SOURCE") values ('197353','1','package body rest_of_day i 
22-11-2018 13:39:14                             DELETE                                 delete from "SYS"."SOURCE$" where "OBJ#" = '197353' and "LINE" = '2' and "SOURCE" = '
' and ROWID =  insert into "SYS"."SOURCE$"("OBJ#","LINE","SOURCE") values ('197353','2','
');                       
22-11-2018 13:39:14                             DELETE                                 delete from "SYS"."SOURCE$" where "OBJ#" = '197353' and "LINE" = '3' and "SOURCE" = '/*------------- insert into "SYS"."SOURCE$"("OBJ#","LINE","SOURCE") values ('197353','3','/*------------------------ 
22-11-2018 13:39:14                             DELETE                                 delete from "SYS"."SOURCE$" where "OBJ#" = '197353' and "LINE" = '4' and "SOURCE" = 'procedure start insert into "SYS"."SOURCE$"("OBJ#","LINE","SOURCE") values ('197353','4','procedure starting(p_date  
22-11-2018 13:39:14                             DELETE                                 delete from "SYS"."SOURCE$" where "OBJ#" = '197353' and "LINE" = '5' and "SOURCE" = '  rec_newrest r insert into "SYS"."SOURCE$"("OBJ#","LINE","SOURCE") values ('197353','5','  rec_newrest r_rest%rowty 
0 голосов
/ 22 ноября 2018

Когда вы подключены к схеме xxx, попробуйте использовать:

select s.text 
  from user_source 
  as of timestamp systimestamp - interval '1' day s
 where s.name = 'YYY';

, чтобы получить источник вашей процедуры.Это дает вам данные за один день до.Вы можете преобразовать '1' day в '10' hour, '150' minute .. и т. Д. В зависимости от ваших потребностей, в случае, если ваш параметр базы данных db_flashback_retention_target был установлен достаточно большим.

...