• 真实试验oracle data unloader进行数据恢复。


    oracle的数据恢复方式有很多,但是都比较麻烦,幸好有老熊的ODU的工具,目前这个工具已经不在提供免费的版本,而且听说授权还比较贵,对好的东西的市场化我本人是支持的,但是希望有其他途径可以继续帮助那些像我一样的贫穷的人,毕竟说服老板话费几万银子去买个只能给你用的软件,是很难成功的。幸好还有很多无私的人提供其他的版本,目前可以找到的最新的无限制的版本就是windows下的odu_309,现在网上还有很多下载,itpub上就有,如果大家找不到在联系我。

    下面是以一个真实的例子来演示从环境--删除--恢复的全过程,也许很多老手都已经熟悉了,这里只是给自己和新人一个了解的机会,了解我们中国人自己的牛人编写的软件有多牛叉。

    一、测试环境搭建
        1.建立测试表空间MYTBS
        create tablespace MYTBS datafile '/opt/oracle/oradata/orcl/mytbs01.dbf' size 10M;

        2.建立测试用户:
        create user james identified james_12345 default tablespace MYTBS;

        3.建立测试表:
        conn james/james_12345
        create table temp(id int,name varchar2(10));
        commit;

        4.建立测试数据:
        begin
          for i in 1..10000
             loop
             insert into temp values(i,'testvalue');
             end loop;
             commit;
        end;

    二、模拟truncate 操作:
        1.truncate table temp;
          commit;
        2.触发checkpoint让数据写入数据文件
          alter system checkpoint;

    三、准备工作
        1.脱机表空间,防止数据库块被复用
          alter tablespace MYTBS offline;
        2.安装odu,目前只有windows版本没有限制,许可很贵,建议把数据文件拉到 windows下处理
        3. 这一步很重要,需要把删除表所在的表空间MYTBS和 system表空间文件用ssh下载到本地处理

    四、恢复操作
        1.修改ODU的control文件
          打开control.txt修改表头为#ts #fno   #rfno     filename只需要这四列就可以
        2.从oracle获取控制信息
          sql>select ts#,file#,rfile#,name from v$datafile;
          这里只需要MYTBS和SYStem表空间信息即可,如。
          0 1 1 /opt/oracle/oradata/orcl/system01.dbf
          6 5 5 /opt/oracle/oradata/orcl/mytbs01.dbf
        3.运行odu.exe
          只要不报错就ok。
        4.unload数据字典
          odu>unload dict
        5.获取temp表逻辑结构,注意大写
          odu>desc james.TEMP
          可以看到类似如下的信息
          Storage(OBj#42252 DataObj#=42255 TS#=6 File#=20 Block#=11 Clister=0)
          这里可以得到表空间号为6
        6.扫描表空间的extend
          ODU>scan extent tablespace 6
        7.恢复数据
          ODU>unload table james.TEMP object auto
         
          至此就可以在data文件夹下看到3个文件,一个是txt数据文件,里面存储的temp表的数据。另外两个是sql*loader使用的文件

    ,一个是控制文件,一个是建表脚本文件,可以用sql*loader恢复数据导入。
        8.设置表空间联机进行数据导入
          sql>alter tablespace MYTBS online; 

    五、模拟恢复删除错误
        
      1.模拟删除
            
    insert into temp values(0,'testvalue'); 
             insert into temp values(1,'testvalue');
             insert into temp values(2,'testvalue');
             insert into temp values(3,'testvalue');
             insert into temp values(4,'testvalue');
             delete from temp where id=4;
             commit;
             alter system checkpoint;
             alter tablespace MYTBS offline;
          2.同上的操作,把system和MYTBS表空间的数据文件下载下来
          3.这一步很重要,修改ODU的config.txt增加
             unload_deleted  yes
             如果不增加是无法恢复删除数据的。
          4.ODU下操作:

             unload dict
             desc james.TEMP
             scan extent tablespace 6
             因为temp表还存在直接恢复表数据
             unload table james.TEMP

            这样就可以看到在data下恢复了5条数据。这里有个疑问,加入有个表100万数据,恢复就直接把数据全恢复回来?
            不过好在数据全在,导入测试机器上把数据拿出来就好,毕竟数据在,工作在。

  • 相关阅读:
    三数之和
    盛最多水的容器
    正则表达式匹配
    最长回文子串
    寻找两个有序数组的中位数
    2、二维数组中的查找
    1、找出数组中重复的数字
    mongodb的下载地址
    提取快捷方式的图标资源问题
    一条数据引发的问题
  • 原文地址:https://www.cnblogs.com/tippoint/p/2872810.html
Copyright © 2020-2023  润新知