现在进入oracle12c时代;普遍用的oracle版本为10g以上。在oracle10g之后提供了一个回收的机制。所以恢复drop表的数据以及表很容易。当然需要打开回收机制以及是归档模式。若表被drop table tablename purge;这个是闪回技术恢复不了的。现如今中国技术达人(laoxiong)提供了odu工具,让这成为现实。大家可以关注他的博客。在此感谢(laoxiong)的贡献。
 
     就在这几天,技术老大认为数据库有几张表没用(其实另外一个平台页面有用);叫平台的兄弟清理掉;(其实那几张表;总共也就100多条数据;清不清真的没关系,没什么影响)。清理还是drop table tablename purge。下午发现一个平台打不开。叫我恢复下数据。虽然有备份;但还是用下odu工具来恢复下。
 
     1. 先将表空间置于offline状态。      
     SQL> alter tablespace zdgame2 offline;
 
     Tablespace altered.

2. 然后需要使用logminer来查找被drop表的data object id:

SQL> select group#,status from v$log;
 
    GROUP# STATUS
---------- ----------------
         1 INACTIVE
         2 CURRENT
         3 INACTIVE
 
 
SQL> select member from v$logfile where group#=2;
 
MEMBER
--------------------------------------------------
/u01/app/oradata/ora11g/redo02.log         
 
 
 
SQL>  exec sys.dbms_logmnr.add_logfile(logfilename=>'/u01/app/oradata/ora11g/redo02.log'); 
 
PL/SQL procedure successfully completed.
 
 
SQL> exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);
 
PL/SQL procedure successfully completed.
 
 
SQL> select scn,to_char(timestamp,'yyyymmddhh24miss'),sql_redo from v$logmnr_contents where operation='DDL' and sql_redo like '%acct_module_role%' order by 2 
--在这里得到drop表的时间结点 --20151125113452
 
SQL> select scn,timestamp,sql_redo from v$logmnr_contents where timestamp=to_date('2015-11-25 11:34:52','yyyy-mm-dd hh24:mi:ss') order by 1;
 
1.0790E+12 25-NOV-15
delete from "SYS"."OBJ$" where "OBJ#" = '68199' and "DATAOBJ#" = '68199' and "OW
 
       SCN TIMESTAMP
---------- ---------
SQL_REDO
--------------------------------------------------------------------------------
NER#" = '62' and "NAME" = 'ACCT_MODULE_ROLE' and "NAMESPACE" = '1' and "SUBNAME"
 IS NULL and "TYPE#" = '2' and "CTIME" = TO_DATE('25-NOV-15', 'DD-MON-RR') and "
MTIME" = TO_DATE('25-NOV-15', 'DD-MON-RR') and "STIME" = TO_DATE('25-NOV-15', 'D
D-MON-RR') and "STATUS" = '1' and "REMOTEOWNER" IS NULL and "LINKNAME" IS NULL a
nd "FLAGS" = '0' and "OID$" IS NULL and "SPARE1" = '6' and "SPARE2" = '1' and "S
PARE3" = '62' and "SPARE4" IS NULL and "SPARE5" IS NULL and "SPARE6" IS NULL and
 ROWID = 'AAAAASAABAAAP25AAI'; 

从最后一个查询语句从可以看到 objectid 为:68199

 
下面用odu工具来恢复数据;上传软件到oracle服务器上。并解压
从oracle获取控制信息
     SQL> select ts#,file#,rfile#,name from v$datafile;
把查询结果贴到control.txt;
执行./odu
[oracle@***** odu]$ ./odu
 
Oracle Data Unloader:Release 3.0.8
 
Copyright (c) 2008,2009 XiongJun. All rights reserved.
 
 
loading default config.......
 
byte_order little
block_size  8192
db_timezone -7
client_timezone 8
data_path   data
charset_name ZHS16GBK
ncharset_name AL16UTF16
output_format text
lob_storage infile
clob_byte_order little
 
 
 
 
load control file 'config.txt' successful
loading default control file ......
 
 
 ts#   fn  rfn bsize   blocks bf offset filename
---- ---- ---- ----- -------- -- ------ --------------------------------------------
   0    1    1  8192    89600 N       0 /u01/app/oradata/ora11g/system01.dbf
   1    2    2  8192    76800 N       0 /u01/app/oradata/ora11g/sysaux01.dbf
   2    3    3  8192    76160 N       0 /u01/app/oradata/ora11g/undotbs01.dbf
   4    4    4  8192    14560 N       0 /u01/app/oradata/ora11g/users01.dbf
   5    5    5  8192  2621440 N       0 /data/oradata/ora11g/******.dbf
   6    6    6  8192  1310720 N       0 /data/oradata/ora11g/******.dbf
load control file 'control.txt' successful
loading dictionary data......
 
ODU> scan extent tablespace 5;
 
scan extent start: 2015-11-25 11:52:21
scanning extent...
scanning extent finished.
scan extent completed: 2015-11-25 11:52:27
 
ODU> unload object 68199 sample                       --68199是上面查出来的结果
 
Unloading Object,object ID: 68199,  Cluster: 0
output data is in file :  'data/ODU_0000068199.txt' 
 
Sample result:
  object id: 68199
  tablespace no: 5
  sampled 56 rows
  column count: 6
  column    1  type: NUMBER
  column    2  type: VARCHAR2
  column    3  type: VARCHAR2
  column    4  type: VARCHAR2
  column    5  type: NUMBER
  column    6  type: NUMBER
 
COMMAND: 
unload object 68199 tablespace 5 column NUMBER VARCHAR2 VARCHAR2 VARCHAR2 NUMBER NUMBER 
 
ODU> unload object 68199 tablespace 5 column NUMBER VARCHAR2 VARCHAR2 VARCHAR2 NUMBER NUMBER
 
Unloading Object,object ID: 68199,  Cluster: 0
56 rows unloaded
到data目录下看下是否恢复;数据都在。
[oracle@×××××× data]$ ll
total 20
-rw-r--r-- 1 oracle dba  366 Nov 25 11:54 ODU_0000068199.ctl           
-rw-r--r-- 1 oracle dba  184 Nov 25 11:54 ODU_0000068199.sql           --为建表语句       
-rw-r--r-- 1 oracle dba 7264 Nov 25 11:54 ODU_0000068199.txt           --恢复的数据
-rw-r--r-- 1 oracle dba  773 Nov 25 11:53 sample.txt
先建表,在用sqlldr恢复数据即可。最后把先将表空间置于online状态。alter tablespace zdgame2 online;

oracle-odu小试牛刀--恢复drop表的数据的更多相关文章

  1. Oracle 备份、恢复单表或多表数据步骤

    Oracle 备份.恢复单表或多表数据步骤,适用于 Oracle 8.9.10.        *备份单表或多表数据: exp user/password@server file=filefullpa ...

  2. oracle 批量更新之将一个表的数据批量更新至另一个表

      oracle 批量更新之将一个表的数据批量更新至另一个表 CreationTime--2018年7月3日17点38分 Author:Marydon Oracle 将一个表的指定字段的值更新至另一个 ...

  3. Oracle使用fy_recover_data恢复truncate删除的数据

    (一)truncate操作概述 在生产中,truncate是使用的多的命令,在使用不当的情况下,往往会造成表的数据全部丢失,恢复较为困难.对于truncate恢复,常见的有以下几种方法可以进行恢复: ...

  4. oracle RAC 11g sqlload 生产表导入数据(ORA-12899)

    背景:由于即将来临的双十一,业务部门(我司是做京东,天猫的短信服务),短信入库慢,需要DBA把数据库sqlload进数据库. 表结构如下: MRS VARCHAR2(100), STATUS VARC ...

  5. oracle批量修改多个表的数据

    方法一 写PL/SQL,开cursor declare  l_varID varchar2(20);  l_varSubName varchar2(30);  cursor mycur is sele ...

  6. mysql InnoDB通过.frm和.ibd恢复表和数据

    ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据.撤销记录.修改buffer和双写buffer.如果file-per-table选项打开的话,该文件则不一 ...

  7. 两种方法将oracle数据库中的一张表的数据导入到另外一个oracle数据库中

    oracle数据库实现一张表的数据导入到另外一个数据库的表中的方法有很多,在这介绍两个. 第一种,把oracle查询的数据导出为sql文件,执行sql文件里的insert语句,如下: 第一步,导出sq ...

  8. Oracle中恢复drop掉的表中的数据

    今天同事不小心把生产上的一张表直接drop掉了,没有做备份,哥们慌的一匹,来找我这个小白来帮忙解决,于是心血来潮简单总结一下. 其实在oralce中,用drop删掉一张表,其实不会真正的删除,只是把表 ...

  9. Oracle恢复drop误删除的表和建用户操作

    一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: 1.从flash back里查询被删除的表 select * from r ...

随机推荐

  1. XiaoShi657的留言板

    大家好,很荣幸能够借助此平台和大家分享.讨论编程技术! 有什么想对我说的请在这里留言吧

  2. bootstrap实战经验

    凡是基本的布局需要float实现的,都可以考虑利用网格布局. 1,.jumbotron可以形成一个青灰色的背景,并自动调节对应边距 2,.panel的应用十分广泛,可以自动设置合适的padding.甚 ...

  3. Perl Print Win32 Console Windows 控制台 print Unicode 问题

    参考资料: https://stackoverflow.com/questions/15224400/perl-on-windows-problems-with-encoding https://te ...

  4. UIPageControl

    UIPageControl 1.    numberOfPages // 设置有多少页默认为0 // 2) 设置页数 [pageControl setNumberOfPages:kImageCount ...

  5. PLSQL 的简单命令之四

    -- 子查询 -- in 等于表中的任意一个 select * from Stu where id in (select id from scores) -- 和子查询返回结果中的某一个值比较成立即可 ...

  6. 解决download.msdn.microsoft.com无法正确解析而无法下载的问题

    不知何时,微软 MSDN 订阅软件下载服务IP解析有问题,总是在点击“下载”按钮之后无法打开. 想必又跟“国情”有关,我是使用联通宽带,没测试过电信的. 我是可以通过指定hosts entry来解决: ...

  7. C++Primer 第十章

    //1.标准库算法不仅可以应用于容器,还可以应用于内置数组,指针. //2.大多数算法都定义在头文件algorithm中.标准库还在头文件numeric中定义了一组数值泛型算法. //3.算法本身不会 ...

  8. Swift游戏实战-跑酷熊猫 09 移除场景之外的平台

    上一节,我们写出了一个疯狂产生平台的东西.所谓上帝欲使其灭亡,必先使其疯狂.所以太疯狂都不是什么好事,所以我们要采取一些措施,例如移除场景之外的平台.btw如果哪天你觉得自己的老板行为乖张,难以理喻. ...

  9. PostgreSQL与RPM

    如何查看使用PostgreSQL的RPM包安装后的文件目录及相关路径(PostgreSQLRPM的spec文件已经帮我们创建好了postgres用户及postgres组). 查看RPM文档信息:/us ...

  10. 事件监听addEventListener()和removeEventListener() ---------1

    一直想写一个原生事件监听的记录,方便以后看,不愿意写主要是事件监听的单词太长,记起来好难记每次都要查,这次把知道的写完了,来这里查好了,以后要是理解的更透彻了,就再补全好了 首先,DOM0级事件和DO ...