恢复truncate表

标签:
王显伟恢复truncate数据恢复truncate表oracle数据恢复drop表恢复 |
分类: ORACLE常见问题处理 |
恢复原理:
http://s2/mw690/001N2SGigy6F0KKuhB7f1&690
跟据原理可以创建一个恢复包Recover_Truncate_Data,然后我们可以做个实验进行验证恢复效果如何:
第一步:创建表
create table truntab1 as select * from dba_objects;
第二步:查询表中记录数
select count(*) from
truntab1;
--72622
第三步:truncate表中业务数据
truncate table truntab1;
第四步:确认表中记录数为零
select count(*) from truntab1;
-- 0
第五步:设置恢复前环境变量
set serveroutput on size 10000000
--//设置大点,默认为2000 bytes
exec dbms_output.enable(999999999999999999999); --//默认为2000
bytes
注意:如果不不进行设置,为报PLSQL ORA-20000: ORU-10027: buffer overflow, limit of 10000
第六步:实施truncate表中数据恢复
declare
第七步:查看输出内容和构造表名:
15:32:44: Directory Name: FY_DATA_DIR4
15:32:45: Recover Tablespace: FY_REC_DATA4; Data File:
FY_REC_DATA4.DAT
15:32:46: Restore Tablespace: FY_RST_DATA4; Data File:
FY_RST_DATA4.DAT
15:32:48: Recover Table: SYS.TRUNTAB1$2
15:32:48: Restore Table: SYS.TRUNTAB1$$2
15:33:04: [fill_blocks] Data Blocks formatted.
15:33:05: [copy_file] begin copy file:
FY_DATA_DIR4\FY_REC_DATA4.DAT =>
FY_DATA_DIR4\FY_REC_DATA_COPY.DAT
15:33:05: [copy_file] completed.
15:33:05: Copy file of Recover Tablespace:
FY_REC_DATA_COPY.DAT
15:33:05: begin to recover table SYS.TRUNTAB1
15:33:19: [restore_table] Trying to restore data to
SYS.TRUNTAB1$$2
15:33:20: [restore_table] Expected Records in this round: 411
15:33:20: [restore_table] 411 records recovered
此处省略N行输出............................................
15:33:44: [restore_table] Expected Records in this round:
0
15:33:44: [restore_table] 0 records recovered
15:33:44: 1033 truncated data blocks found.
15:33:44: 72622
records recovered in backup table SYS.TRUNTAB1$$2
15:33:44:
Recovery completed.
PL/SQL procedure successfully completed
从红色字体可以看出,恢复72622条,刚好是truncate前业务表中记录数,恢复临时表为:SYS.TRUNTAB1$$2
第七步:查看输出内容和构造表名:
insert into truntab1 select * from SYS.TRUNTAB1$$2
第八步:验证数据是否完全恢复
select count(*) from
truntab1;
--72622
至此,truncate掉的数据成功恢复,并且此方法也可以恢复drop table tablename purge删除的数据,
第九步:清理恢复产生的表空间和数据文件
特别提醒:恢复完成后,该方法会在数据库中产生一个表空间:FY_RST_DATA*,恢复一次产生一个,记得及时清理!否则会导致服务器RMAN备份失败ORA-19566 超出损坏块限制(切记)
因恢复包Recover_Truncate_data中代码太长,新浪博客无法上传附件,有需要的朋友可以联系我!