误删数据或表恢复案例--仅适用Oracle数据库原创
金蝶云社区-杨银芳_KD508
杨银芳_KD508
9人赞赏了该文章 327次浏览 未经作者许可,禁止转载编辑于2020年04月12日 16:26:36

 

一、误删数据恢复案例--仅适用Oracle数据库

        一般能恢复在15分钟内误删除的数据,超过15分钟,数据在内存中已被覆盖不能用这种方式恢复,只能用物理RMAN、逻辑IMPDP等方式恢复,不过前提是误删数据前数据库有做物理RMAN备份或逻辑EXPDP备份。

以下介绍的是闪回查询方式恢复误数据步骤:

1、通过flashback query查询某历史时点的数据量,找到删除时点的前1s。

select * from t_ssc_jobhis as of timestamp to_timestamp('2018-01-02 13:39:47','yyyy-mm-dd hh24:mi:ss’);

# 查询6万多条数据,如果查询48s的数据,则减少到1万多,说明数据是在47s时删除的。

2、创建临时表,从删除之前的那一刻恢复所有数据。

create table t_ssc_jobhis_0102

as select * from t_ssc_jobhis as of timestamp to_timestamp('2018-01-02 13:39:47','yyyy-mm-dd hh24:mi:ss’);

3、从恢复的表中把当前表中不存在的记录恢复。

insert into t_ssc_jobhis select * from t_ssc_jobhis_0102 where fid not in (select fid from t_ssc_jobhis);

4、数据恢复完成。

# 让现场验证数据无误,并确定没问题时删除临时创建的表。

 

 

二、误删表恢复案例--仅适用Oracle数据库

1. 用sqlplus登录到数据库SQL>下,c:\>sqlplus D0023_C/eas;

2.停止eas应用服务器实例,备份生产数据库中的数据(用expdp备份),由于是恢复整张表不是删除数据,备份数据这步可选择性处理,非必需的。

3. 通过sql> select * from user_recyclebin where can_undrop='YES' and original_name like  'T_%';   --查询需要恢复的业务表。

4.将要恢复的表先进行更名,如  sql> alter table T_AP_OTHERBILLENTRY  rename   TO T_AP_OTHERBILLENTRY_BAK;

5.对删除的表进行闪回,如: sql> flashback  table T_AP_OTHERBILLENTRY to before drop;

6.如更名后的表中有数据,则校验后将更名后中的数据插入到已闪回的表中。

7.重复第三与第五步,闪回第二点中的所有表。

8.闪回表后,对应的表索引的名称为系统里编制的一个名称,如BIN$FHndJWi6Se6Kso8K9tFEVg==$0,不是以前的名称。为了与eas系统原有的索引与主键名一样,便于日后维护,需要删除已有索引或主键约束后,对表中的索引与主键重建。 或将索引名称改为以前表中

  的索引(在pl/sql developer中通过edit某个表的表结构,可以进行更名)。 以后凡是系统自动生成的名称,引用时都得加上引号,否则会无法引用。

  说明: 更改索引名称与主键约束名称不是必需要做的步骤。

  在做此步之前,由于要跟闪回前的表的索引名称与主键约束一样,先在测试库上恢复最近表未drop前备份的数据,以便进行索引名称的核对与查看重建时索引名与主键约束名取相同的名称。

   --更改索引名称为eas系统标准的名称:其实就是先删除以前的索引,然后重建新的索引:

   例:

   --先将闪回前T_BD_ACCOUNTVIEW表进行rename更名后的对应索引

   --T_BD_ACCOUNTVIEW表更名后的表名是T_BD_ACCOUNTVIEW_BAK,删除索引IX_ACCTVIEW_CNH

   drop index IX_ACCTVIEW_CNH

  

   --删除闪回表后T_BD_ACCOUNTVIEW里的BIN$FHndJWi6Se6Kso8K9tFEVg==$0索引,跟原表的IX_ACCTVIEW_CNH索引名称相同的索引列:

   -- Drop indexes

   drop index "BIN$FHndJWi6Se6Kso8K9tFEVg==$0";     --一定要加上双引号

 

   --重新对T_BD_ACCOUNTVIEW表创建IX_ACCTVIEW_CNH索引:

   -- Create/Recreate indexes

   create index IX_ACCTVIEW_CNH on T_BD_ACCOUNTVIEW (FCOMPANYID, FNUMBER, FHELPCODE)

   tablespace EAS_D_D0023_C_STANDARD

   pctfree 10

   initrans 2

   maxtrans 255;

   

  --删除与添加主键:

  例:

  --先将闪回前T_BD_ACCOUNTVIEW表进行rename更名后的对应主键约束

   --T_BD_ACCOUNTVIEW表更名后的表名是T_BD_ACCOUNTVIEW_BAK,删除主键约束PK_BD_ACCOUNTVIEW

   alter table T_BD_ACCOUNTVIEW_BAK

   drop constraint PK_BD_ACCOUNTVIEW cascade;

 

  --删除闪回的表对应的主键约束

  -- Drop primary, unique and foreign key constraints

   alter table T_BD_ACCOUNTVIEW

   drop constraint "BIN$L4smqVx3Q8W71fbg60ouPg==$0" cascade;       --一定要加上双引号

 

  --对闪回的表添加主键约束

  -- Create/Recreate primary, unique and foreign key constraints

   alter table T_BD_ACCOUNTVIEW

   add constraint PK_BD_ACCOUNTVIEW primary key (FID)

   using index

   tablespace EAS_D_D0023_C_STANDARD

   pctfree 10

   initrans 2

   maxtrans 255;   

     

 9.建议对闪回的表与索引做一次统计分析操作(通过OEM中调度统计分析,或通过脚本进行执行)。   

 

 附:

 --根据表名查看表对应的索引名称

 select * from user_indexes where table_name='T_BD_ACCOUNTVIEW';

 --根据表名查看表对应索引的列名称

 select * from user_ind_columns where table_name='T_BD_ACCOUNTVIEW' order by index_name, column_position;

 --要看表的主键约束名称

 select * from user_constraints where table_name='T_BD_ACCOUNTVIEW' AND CONSTRAINT_TYPE='P';


图标赞 9
9人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0