Oracle数据库之Oracle表恢复(truncate)
小标 2018-09-10 来源 : 阅读 2514 评论 0

摘要:本文主要向大家介绍了Oracle数据库之Oracle表恢复(truncate),通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

本文主要向大家介绍了Oracle数据库之Oracle表恢复(truncate),通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

一、模拟truncate操作:
SQL> conn scott/tiger
SQL> select count(*) from t;
  COUNT(*)
----------
        13
SQL> truncate table t;
二、恢复truncate表的数据
1.下载hellodba的恢复工具到数据库服务器
linux下使用终端,如下:
windows下输入以下网址:

//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的package
4.使用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.dbf
5.使用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.

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 1
看完这篇文章有何感觉?已经有1人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程