误删数据或表恢复案例--仅适用Oracle数据库
金蝶云社区-Romantic
Romantic
0人赞赏了该文章 608次浏览 未经作者许可,禁止转载编辑于2020年04月12日 16:23:11
一、误删数据恢复案例--仅适用Oracle数据库一般能恢复在15分钟内误删除的数据,超过15分钟,数据在内存中已被覆盖不能用这种方式恢复,只能用物理RMAN、逻辑IMPDP等方式恢复,不过前提是误删数据前数据库有做物理RMAN备份或逻辑EXPDP备份。以下介绍的是闪回查询方式恢复误数据步骤:1、通过flashbackquery查询某历史时点的数据量,找到删除时点的前1s。select * fromt_ssc_jobhis as of timestamp to_timestamp('2018-01-02 13:39:47','yyyy-mm-ddhh24:mi:ss’);# 查询6万多条数据,如果查询48s的数据,则减少到1万多,说明数据是在47s时删除的。2、创建临时表,从删除之前的那一刻恢复所有数据。create tablet_ssc_jobhis_0102 as select * fromt_ssc_jobhis as of timestamp to_timestamp('2018-01-02 13:39:47','yyyy-mm-ddhh24:mi:ss’);3、从恢复的表中把当前表中不存在的记录恢复。insert intot_ssc_jobhis select * from t_ssc_jobhis_0102 where fid not in (select fid fromt_ssc_jobhis);4、数据恢复完成。# 让现场验证数据无误,并确定没问题时删除临时创建的表。 二、误删表恢复案例--仅适用Oracle数据库1. 用sqlplus登录到数据库SQL>下,c:\>sqlplusD0023_C/eas;2.停止eas应用服务器实例,备份生产数据库中的数据(用expdp备份),由于是恢复整张表不是删除数据,备份数据这步可选择性处理,非必需的。3. 通过sql>select * from user_recyclebin where can_undrop='YES' and original_namelike 'T_%'; --查询需要恢复的业务表。4.将要恢复的表先进行更名,如 sql> alter table T_AP_OTHERBILLENTRY rename TO T_AP_OTHERBILLENTRY_BAK;5.对删除的表进行闪回,如:sql> flashback tableT_AP_OTHERBILLENTRY to before drop;6.如更名后的表中有数据,则校验后将更名后中的数据插入到已闪回的表中。7.重复第三与第五步,闪回第二点中的所有表。8.闪回表后,对应的表索引的名称为系统里编制的一个名称,如BIN$FHndJWi6Se6Kso8K9tFEVg==$0,不是以前的名称。为了与eas系统原有的索引与主键名一样,便于日后维护,需要删除已有索引或主键约束后,对表中的索引与主键重建。或将索引名称改为以前表中 的索引(在pl/sqldeveloper中通过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 onT_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 keyconstraints alter table T_BD_ACCOUNTVIEW drop constraint "BIN$L4smqVx3Q8W71fbg60ouPg==$0"cascade; --一定要加上双引号 --对闪回的表添加主键约束 -- Create/Recreate primary, unique andforeign 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 wheretable_name='T_BD_ACCOUNTVIEW'; --根据表名查看表对应索引的列名称 select * from user_ind_columns wheretable_name='T_BD_ACCOUNTVIEW' order by index_name, column_position; --要看表的主键约束名称 select * from user_constraints wheretable_name='T_BD_ACCOUNTVIEW' AND CONSTRAINT_TYPE='P';