一、模拟truncate操作:
SQL> conn scott/tigerSQL> select count(*) from t; COUNT(*)---------- 13SQL> truncate table t;二、恢复truncate表的数据1.下载hellodba的恢复工具到数据库服务器linux下使用终端,如下:windows下输入以下网址:http://www.hellodba.com/Download/FY_Recover_Data.zip
2.解压下载下来的FY_Recover_Data.pck[oracle@rac1 ~]$ unzip FY_Recover_Data.zip 解压后得到一个文件FY_Recover_Data.SQL以下3-7步操作均用sys用户执行3.使用sys用户执行解压后的脚本(我这里解压后的文件在/home/oracle/)SQL> @/home/oracle/FY_Recover_Data.SQL这个脚本实际是在sys用户下创建了一个名为FY_Recover_Data的package4.使用sys用户找出存放truncate表的数据文件路径,下一步会用到这个文件路径SQL> select file_name from dba_data_files f, dba_tables t where t.owner='SCOTT' and t.table_name='T' and t.tablespace_name = f.tablespace_name;查得结果是/u01/oracle/oradata/orcl/users01.dbf5.使用sys用户执行以下操作开始恢复:declare tgtowner varchar2(30); tgttable varchar2(30); datapath varchar2(4000); datadir varchar2(30); rects varchar2(30); recfile varchar2(30); rstts varchar2(30); rstfile varchar2(30); blksz number; rectab varchar2(30); rsttab varchar2(30); copyfile varchar2(30);begin tgtowner := 'SCOTT'; --table owner tgttable := 'T'; --table name datapath := '/u01/oracle/oradata/orcl/'; --必须和被truncate表所在的数据文件的目录相同 datadir := 'FY_DATA_DIR'; --oracle中目录的名字,可以修改 Fy_Recover_data.prepare_files(tgtowner, tgttable, datapath, datadir, rects, recfile, rstts, rstfile, blksz); Fy_Recover_data.fill_blocks(tgtowner, tgttable, datadir, rects, recfile, rstts, 8, tgtowner, tgtowner, rectab, rsttab, copyfile); Fy_Recover_data.recover_table(tgtowner, tgttable, tgtowner, rectab, tgtowner, rsttab, datadir, datadir, recfile,datadir, copyfile, blksz);end;/注:执行上的SQL产生2个表空间FY_REC_DATA、FY_RST_DATA,还有1个copy文件。6.使用sys用户把恢复的数据从scott.t$$中插回scott.t表注:scott.t$$中是scott.t表truncate之前的数据SQL> insert into scott.t select * from scott.t$$;13 rows created.SQL> commit;Commit complete.SQL> select count(*) from t; COUNT(*)---------- 13可以看到被truncate的数据已经恢复。7.使用sys用户删除恢复时产生的2个表空间及数据文件SQL> drop tablespace fy_rec_data including contents and datafiles;Tablespace dropped.SQL> drop tablespace fy_rst_data including contents and datafiles;Tablespace dropped.