Oracle 表数据恢复 truncate

发布时间 2023-12-12 14:35:59作者: 七娃子

Oracle 恢复truncate


1.解压下载下来的FY_Recover_Data.pck
from :https://hellodba.com/reader.php?ID=217&lang=CN

2.使用sys用户执行解压后的脚本

SQL> @E:\huifu\FY_Recover_Data.SQL

这个脚本实际是在sys用户下创建了一个名为FY_Recover_Data的package

3.查找表的磁盘位置

SQL> select file_name from dba_data_files f, dba_tables t where t.owner='用户名' and t.table_name='表名' and t.tablespace_name = f.tablespace_name;

--/usr/oracle/oradata/pbcpcr/users01.dbf;

4.用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 := '用户名'; --table owner
      tgttable := '表名';  --table name
      datapath := 'F:\oradata';    --必须和被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;

4.使用sys用户把恢复的数据从pbcpcr.a$$中插回pbcpcr.a表

SQL> insert into 表名.a select * from 表名.a$$;
13 rows created.

 5.使用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.