Oracle 如何从替换的过程(PL/SQL)中获取旧代码?
我有一个过程一直在工作,直到我错误地被其他代码替换。 因此,我的过程开始于Oracle 如何从替换的过程(PL/SQL)中获取旧代码?,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一个过程一直在工作,直到我错误地被其他代码替换。 因此,我的过程开始于创建或替换过程xxx.yyy,我错误地用一些简单的代码替换并保存了它 因为我在我的程序中更换了,所以它被更换了,但是现在它不再按照我想要的方式工作了。如何获取该过程中的旧代码(替换前)?当您连接到xxxschema时,请尝试使用: select s.text from user_source as of timestamp systimestamp - interval '1' day s where s.n
创建或替换过程xxx.yyy
,我错误地用一些简单的代码替换并保存了它
因为我在我的程序中更换了,所以它被更换了,但是现在它不再按照我想要的方式工作了。如何获取该过程中的旧代码(替换前)?当您连接到
xxx
schema时,请尝试使用:
select s.text
from user_source
as of timestamp systimestamp - interval '1' day s
where s.name = 'YYY';
获取过程的源代码。它为你提供了前一天的数据。您可以将
'1'天
转换为'10'小时
,'150'分钟
。。等等。根据您的需要,如果您的db\u flashback\u retention\u目标
数据库参数已设置为足够大。如果搜索期间有存档日志。您可以使用实用工具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\u 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
备份或从版本控制(Git/SVN)获取代码(如果有的话)。Hi@Lukasz,我没有,但它在我的模式下,不知道是否有其他方法??我猜您没有启用任何DDL审核或系统级触发器来捕获DDL更改。我建议搜索备份,或者尝试在不同的环境(如QA/DEV/)上检查这一点,所以教学内容是:对代码使用源代码控制。