表被truncate 后的恢复

如下 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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值