【Oracle专栏】Package 被误替换,恢复找回

 Oracle相关文档,希望互相学习,共同进步

风123456789~-优快云博客


1.项目背景

        最近看同事工作移交的package,发现只有包体(Package Bodies),没有包(Package),看到是包体是正确的,于是准备把包体建一下。没想到复制过去了,忘记改最上面的 PACKAGE BODY, 编译时报错,定睛一看,是把包体给覆盖了。。。

          需要还原.....

          因为是第一时间恢复的,所以很快就弄好了。原理是修改前的内容存放在undo中,可以根据这一点来进行闪回,所以第一时间可以闪回,时长越长闪回的可能性越小。

           本文主要进行实验模拟还原。

2. 实验

2.1准备表、包体

创建表:

create table test_feng  as select * from tab  ;

创建包体:

CREATE OR REPLACE PACKAGE BODY pg_feng is

  /*--------------------------
     创建时间 : 2025.1.18
     创建人   : feng
     目标表   : check_feng 
     源表     : tab 
     说明     : xxx 信息
  ---------------------------*/
  function get_check_feng(pDataIssue in varchar2) return varchar2 is
    vResult       varchar2(10);
    vMsg          varchar2(1000);
  begin
    vResult       := '0';
  
    BEGIN
      --删除本期数据
      DELETE FROM test_feng ;
      COMMIT;
      --插入
      INSERT INTO TEST_FENG
       SELECT *  FROM tab;
      COMMIT;
    
    EXCEPTION
      WHEN OTHERS THEN
        vMsg := '报错位置:' || dbms_utility.format_error_backtrace || '报错信息:' ||
                substr(SQLERRM, 1, 200);
        vResult := '1';
    END;
    return vResult;
  end;

end pg_feng;

2.2 模拟还原

1) 模拟错误替换

CREATE OR REPLACE PACKAGE BODY pg_feng is

  /*--------------------------
     创建时间 : 2025.1.18
     创建人   : feng
     目标表   : check_feng
     源表     : tab
     说明     : xxx 信息
  ---------------------------*/
  function get_check_feng(pDataIssue in varchar2) return varchar2;
  
  
end pg_feng;

编译执行后:


 

2) 模拟还原

A.查找包对象id

登录sysdba用户,执行以下语句可查询id.

SELECT *
FROM source$ AS OF TIMESTAMP TO_TIMESTAMP('2025-02-10 21:25:00','YYYY-MM-DD HH24:MI:SS')
where source like '%pg_feng%';

或者

SELECT obj#
FROM obj$ AS OF TIMESTAMP TO_TIMESTAMP('2025-02-10 21:35:00', 'YYYY-MM-DD HH24:MI:SS')
WHERE NAME = 'PG_FENG';

结果截图:

         以下结果为包体的开始及结尾行,可以看到OBJ的id 为1224599

b.通过OBJ 的ID反查
create table feng_tmp as
SELECT source
FROM source$ AS OF TIMESTAMP TO_TIMESTAMP('2025-02-10 21:35:00', 'YYYY-MM-DD HH24:MI:SS')
where obj# = 1224599
;

      结果截图:

发现以上内容就是被覆盖前的内容,复制出来简要处理一下 双引号、第一行增加“create or replace ”。

 查看结果:  发现包体恢复

C.修改package 

 修改package正确后,重新编译:  ok

CREATE OR REPLACE PACKAGE  pg_feng is

  /*--------------------------
     创建时间 : 2025.1.18
     创建人   : feng
     目标表   : check_feng
     源表     : tab
     说明     : xxx 信息
  ---------------------------*/
  function get_check_feng(pDataIssue in varchar2) return varchar2;
  
  
end pg_feng;
D.编译后重新查看:  ok

 

实验验证:编译成功,ok 

 


项目管理--相关知识   

项目管理-项目绩效域1/2-优快云博客

项目管理-项目绩效域1/2_八大绩效域和十大管理有什么联系-优快云博客

项目管理-项目绩效域2/2_绩效域 团不策划-优快云博客

高项-案例分析万能答案(作业分享)-优快云博客

项目管理-计算题公式【复习】_项目管理进度计算题公式:乐观-优快云博客

项目管理-配置管理与变更-优快云博客

项目管理-项目管理科学基础-优快云博客

项目管理-高级项目管理-优快云博客

项目管理-相关知识(组织通用治理、组织通用管理、法律法规与标准规范)-优快云博客


Oracle其他文档,希望互相学习,共同进步

Oracle-找回误删的表数据(LogMiner 挖掘日志)_oracle日志挖掘恢复数据-优快云博客

oracle 跟踪文件--审计日志_oracle审计日志-优快云博客

ORA-12899报错,遇到数据表某字段长度奇怪现象:“Oracle字符型,长度50”但length查却没有50_varchar(50) oracle 超出截断-优快云博客

EXP-00091: Exporting questionable statistics.解决方案-优快云博客

Oracle 更换监听端口-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值