如何找回被删除的Oracle数据

2022年7月29日 20点热度 0人点赞

Dbseeker for Oracle Database是一款用Java语言开发的Oracle数据库恢复软件。Dbseeker能够绕过Oracle读数据引擎,直接扫描数据文件的数据块, 分析数据块格式,读取数据库中的表记录。因此,在由于各种原因引起的数据库不能打开或者数据库中的表被DROP,TRUNCATE,DELETE后,而且没有备份的情况下,使用Dbseeker能够及时找回数据表记录。

当相关人员由于一些人为错误,不慎DROP,TRUNCATE,DELETE了表数据。首先要保持冷静,在大部分的情况下,数据还在数据文件里,Oracle database只是做了一些删除标记或者清除了表头的一些信息。为了保证数据不会被覆盖,立即Offline表所属的表空间,或关闭相关的应用程序。如果数据没有被覆盖,Dbseeker找回数据的成功率高达99.9%,但是如果数据被覆盖,又没有备份的情况下,神仙也爱莫能助。

本实战场景模拟数据字典完整的情况下,表记录被删除后,如何通过Dbseeker找回删除的表记录写入数据库。

工具/原料

  • Dbseeker for Oracle Database
  • Java 1.6(64 bit)以上

方法/步骤

  1. 1

    ■新建表MYDELETEDTABLE,生成测试记录。

    ■为了能够校验Dbseeker找回的数据的正确性,复制MYDELETEDTABLE到MYDELETEDTABLE2。

    ■DELETE表MYDELETEDTABLE全部记录。

    ■使用Dbseeker找回数据,生成的SQL*loader文件,导入数据库后,和MYDELETEDTABLE2表校验正确性。

    ■使用Dbseeker找回数据,通过Dbseeker直接导入目标数据库后,和MYDELETEDTABLE2表校验正确性。

    SQL> conn dbseeker/password

    Connected.

    SQL> CREATE TABLE MYDELETEDTABLE AS SELECT * FROM SH.CUSTOMERS;

     

    Table created.

     

    SQL> SELECT COUNT(*) FROM MYDELETEDTABLE;

     

      COUNT(*)

    ----------

         55500

     

    SQL> CREATE TABLE MYDELETEDTABLE2 AS SELECT * FROM SH.CUSTOMERS;

     

    Table created.

     

    SQL> SELECT COUNT(*) FROM MYDELETEDTABLE2;

     

      COUNT(*)

    ----------

         55500

     

    SQL> DELETE FROM MYDELETEDTABLE;

     

    55500 rows deleted.

     

    SQL> COMMIT;

     

    SQL> SELECT COUNT(*) FROM MYDELETEDTABLE;

     

      COUNT(*)

    ----------

             0

     

    SQL> ALTER SYSTEM CHECKPOINT;

     

    System altered.

  2. 2

     启动Dbseeker恢复向导界面,点击[Next]按钮。

  3. 3

    如果数据文件为File System格式,选择[File System.],点击[Next]按钮。如果为ASM格式,选择[Automatic Storage Management(ASM).]。在这里我们选择[File System.]。

  4. 4

    选择[Yes,The Oracle data dictionary in the system tablespace is intact.],点击[Next]按钮。

  5. 5

    点击[Choose Files] 按钮。

  6. 6

     选择数据文件。

    如果是数据字典完整的恢复模式,必须选择系统表空间的数据文件和需恢复表所在的数据文件。如果不清楚恢复表具体存储在哪个数据文件,请全部选择所有的数据文件。

  7. 7

    填入数据文件的OFFSET信息(单位Byte),点击[Start]按钮。

    Windows和LINUX环境下的数据文件不用考虑OFFSET,默认设置为0。

  8. 8

    Dbseeker初始化后,开始扫描关键字典表的信息。

  9. 9

    扫描关键字典表完成后,显示Dbseeker的主界面。

       Dbseeker主界面显示以下数据库信息。           

    ·         DBID

    ·         DBNAME

    ·         数据库字符集

    ·         数据库国家字符集

    ·         被选择的数据文件的路径,BLOCK SIZE 和OFFSET

  10. 10

    找到需要恢复的表,点击右键,点击[Desc Table]查看表的字段信息。

    确认列表中是否存在Dbseeker不支持的字段类型(Unknown)。

    如果有Unknown字样的字段类型,恢复数据时有可能会发生问题。

  11. 11

    找到需要恢复的表,点击右键,点击[Seek Table]。

    ●  点击[Deleted Rows]标签,列出前200条被删除取样的记录信息。

  12. 12

     数据恢复方法1:使用SQL*loader 加载数据。

    ●  点击[Export to SQL*loader files]按钮,生成SQL*loader 文件。

    ●  导出数据记录成功后,弹出提示信息。

    ●  拷贝DBSEEKER.MYDELETEDTABLE目录到目标服务器端,通过ORACLE的数据加载工具SQL*loader加载到目标数据库原表MYDELETEDTABLE,并校验数据的正确性。

  13. 13

    ● SQL*loader加载数据

    [oracle@bogon DBSEEKER.MYDELETEDTABLE]$ sqlldr dbseeker/password control=DBSEEKER.MYDELETEDTABLE.trl

     

    SQL*Loader: Release 11.2.0.1.0 - Production on Thu Oct 29 15:34:04 2015

     

    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

     

    Commit point reached - logical record count 64

    Commit point reached - logical record count 128

    …….

    Commit point reached - logical record count 55499

    Commit point reached - logical record count 55500

    ●校验结果

    SQL> SELECT * FROM DBSEEKER.MYDELETEDTABLE MINUS SELECT * FROM MYDELETEDTABLE2;

     

    no rows selected

  14. 14

    数据恢复方法2:通过Dbseeker直接导入目标数据库。

    ●  点击[Export to target database]按钮。

    ●  弹出导入界面窗口。

    ●  填写导入目标数据库连接信息,点击[Connect!]按钮,测试数据库连接信息。

    ●  如果能正常连接到导入目标数据库,出现连接成功信息提示。

    ●  点击[Connect!+Export] 按钮,直接把Dbseeker找到的被删除表记录信息通过JDBC插入目标数据库用户dbseeker下的表MYDELETEDTABLE。

    ●  点击[Connect!+Export]按钮后,出现进度条提示。

    ●  数据导入到目标数据库成功后,弹出提示信息。

    ●  校验数据是否一致(MINUS)。

    SQL> SELECT * FROM DBSEEKER.MYDELETEDTABLE MINUS SELECT * FROM MYDELETEDTABLE2;

    no rows selected

    END

注意事项

  • 在没有充分测试的情况下,不推荐直接用Dbseeker将数据恢复到目标数据库。如果数据不正确,会覆盖目标数据库表空间的表数据,造成表数据永久无法恢复。 因此, 为了保护原来的数据库问题现场,Dbseeker推荐按以下的步骤来恢复数据。 1. 导入数据前,做好导入目标数据库的备份。 2. 将数据导入到新的数据库或者新的表空间的新建表中, 事先确认数据是否正确。 3. 只有在充分测试并确认数据没有问题后,才能将数据导入到目标数据库。 4. 如果选择用Dbseeker将数据直接恢复到目标数据库,被选择的数据文件和导入目标数据库表的数据文件不能在同一位置。(如果是同一位置,会发生一边从被选择的数据文件抽取数据,一边写入被选择的数据文件的严重问题。选择拷贝到不同目录的数据文件恢复数据,不会发生此问题。)
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论