表被truncate 后的恢复

来源:互联网 发布:尼古丁贴片有用吗 知乎 编辑:程序博客网 时间:2024/05/05 18:41
如下 scott 用户下表t 被truncate 了 

1、在sys用户下创建包 FY_Recover_Data 这个包可以在网上搜索找得到  参考文章出处:http://blog.chinaunix.net/uid-23284114-id-3754559.html


2、查询表所在的数据文件位置,将数据文件复制到其他盘下或目录下即可 如 F:\app\SKY\oradata\orcl

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;


3、执行如下语句恢复 在 command window 中或sql plus 中执行,在sql  window中执行会报错,对表空间无权限的错,这个包我没研究过,也看不太明白,这个纯粹是工具拿来就用吧。


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 := 'F:\app\SKY\oradat\ORCL';    --必须和被truncate表所在的数据文件的目录相同
      datadir := 'EXPDP_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;




执行完后,会在scott 用户下有 t$ 或t$$ 表  将数据 insert 到t 表后 删除目录下(F:\app\SKY\oradata\orcl )产生的文件


alter tablespace FY_REC_DATA8 offline; 
alter tablespace FY_RST_DATA8 offline; 


然后直接到目录下删除 或者 drop tablespace FY_REC_DATA8 including contents and datafiles;



1 0
原创粉丝点击