zoukankan      html  css  js  c++  java
  • Oracle表恢复(truncate)

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

    http://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.

  • 相关阅读:
    Android服务器——TomCat服务器的搭建
    Ubuntu16.04 Liunx下同时安装Anaconda2与Anaconda3
    android中代码操作外部SD卡出错:W/System.err(1595): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
    查准率与查全率(precision and recall) 的个人理解
    Python游戏-实现键盘控制功能
    UGUI世界坐标转换为UI本地坐标(游戏Hud的实现)
    LoadRunner中遭遇交互数据加密的处理方案
    [Java]链表的打印,反转与删除
    优化程序性能(3)——提高并行性
    基本排序算法的python实现
  • 原文地址:https://www.cnblogs.com/Struggles/p/5851708.html
Copyright © 2011-2022 走看看