本文主要是介绍表被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中执行会报错,对表空间无权限的错,这个包我没研究过,也看不太明白,这个纯粹是工具拿来就用吧。
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;
这篇关于表被truncate 后的恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!