Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

999

积分

1

好友

942

主题
1#
发表于 2017-4-17 15:59:55 | 查看: 3633| 回复: 4
本帖最后由 ALLSTARS_ORACLE 于 2017-4-27 13:20 编辑


ORACLE数据误删除delete后的恢复

我在导数据的时候反了一个很大的错误,不小心删除了所有的数据,当时我并没有COMMIT而是想着把它断开后在继续,于是我就按了CONN这串字副,结果我几个月的数据就这样丢了,真是让我叫天天不应,叫地地不灵啊@我想问哪位高人知道我还能把以前的数据找回来吗?该怎么找呢!!!!着急啊!!!谢谢大家帮忙了!
下载专业ORACLE数据库恢复工具PRM-DUL  For Oracle http://www.parnassusdata.com/

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638  QQ: 47079569     邮箱:service@parnassusdata.com
2#
发表于 2017-4-27 13:22:52
oracle 中被delete的数据只是在row piece 级别被标记为deleted,但可能没有实际被删除。
可以使用prm-dul的undelete功能恢复delete的数据:
prm-dul恢复被删除的记录:http://www.tudou.com/programs/view/2eS30XTgZ6A/
也可以联系我们诗檀软件恢复

诗檀软件专业数据库修复团队

服务热线 : 13764045638  QQ: 47079569   

回复 只看该作者 道具 举报

3#
发表于 2017-8-1 11:20:41
如果是短时间内的误操作,可以尝试使用flashback query来找回表数据:
  1. SELECT * FROM employees
  2. AS OF TIMESTAMP
  3. TO_TIMESTAMP('2004-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')
  4. WHERE last_name = 'Chung';
复制代码

回复 只看该作者 道具 举报

4#
发表于 2017-8-1 17:06:44
本帖最后由 biotwang 于 2017-8-1 17:33 编辑

使用Flashback特性进行表恢复

Flashback Table语句使得用户可以将表恢复到之前的某个时间点上。对于用户或应用偶发性误删除,它提供了一个快速地在线解决方案,它比其它恢复机制速(如时间点恢复等)速度更快。
在进行指定表的所有数据恢复到之前某个时间点或SCN时,这个表上会持有一个DML排它锁,以在线进行恢复作业。

注意:你必须使用automatic undo management来使用flashback表特性。因此此特性的恢复基于存储在undo表空间中的undo信息。

flashback table表特性在恢复表的同时,也会自动恢复相应表的属性如index, trigger等相关对象。
当然闪回表的时间会检查相应的完整性约束,如果被闪回表和另一张表具有引用关系,而另一张表并未被闪回,则闪回失败。

即便你已经进行了一次flashback,数据在闪回之前的状态也不会丢失。你也可以之后转回原先的状态。

在使用Flashback Table语句前,你需要授权你的登陆用户有FLASH ANY TABLE的权限,或者至少对于你要闪回的对象的闪回权限。此外,你必须对你要闪回的表具有SELECT, INSERT, DELETE和UPDATE操作权限。需要被闪回的表必须启用row movement。

例如:
  1. SQL> alter tablespace UNDOTBS1 retention gurantee;
  2. SQL> select tablespace_name, retention from dba_tablespaces;
  3. TABLESPACE_NAME                RETENTION
  4. ------------------------------ -----------
  5. SYSTEM                         NOT APPLY
  6. UNDOTBS1                       GUARANTEE
  7. SYSAUX                         NOT APPLY
  8. TEMP                           NOT APPLY
  9. EXAMPLE                        NOT APPLY
  10. USERS                          NOT APPLY
  11. HISTORY                        NOT APPLY
  12. 7 rows selected.

  13. SQL> select * from flash_test_table;

  14.      EMPNO EMPNAME
  15. ---------- ------------------------------
  16.          1 Kiran
  17.          2 Scott
  18.          3 Tiger
  19.          4 Jeff

  20. SQL> select current_scn from v$database;
  21. CURRENT_SCN
  22. ----------------
  23. 332348

  24. SQL> connect scott/tiger
  25. Connected.

  26. SQL> insert into flash_test_table values(5,'Jane');
  27. SQL> insert into flash_test_table values(6,'John');
  28. SQL> commit;
  29. Commit complete.

  30. SQL> connect / as sysdba
  31. Connected.

  32. SQL> select current_scn from v$database;
  33. CURRENT_SCN
  34. ----------------
  35. 332376

  36. SQL> connect scott/tiger
  37. Connected.

  38. SQL> select * from flash_test_table;
  39.      EMPNO EMPNAME
  40. ---------- ------------------------------
  41.          1 Kiran
  42.          2 Scott
  43.          3 Tiger
  44.          4 Jeff
  45.          5 Jane
  46.          6 John
  47. 6 rows selected.

  48. -- 必须启动row movement
  49. SQL> alter table flash_test_table enable row movement;
  50. Table altered.

  51. -- 闪回至scn 332348
  52. SQL> flashback table flash_test_table to scn 332348;
  53. Flashback complete.

  54. SQL> select * from flash_test_table;
  55.      EMPNO EMPNAME
  56. ---------- ------------------------------
  57.          1 Kiran
  58.          2 Scott
  59.          3 Tiger
  60.          4 Jeff

  61. -- 闪回回插入新数据时候的scn 332376
  62. SQL> flashback table flash_test_table to scn 332376;
  63. Flashback complete.

  64. SQL> select * from flash_test_table;
  65.      EMPNO EMPNAME
  66. ---------- ------------------------------
  67.          1 Kiran
  68.          2 Scott
  69.          3 Tiger
  70.          4 Jeff
  71.          5 Jane
  72.          6 John
  73. 6 rows selected.
复制代码
若使用timestamp进行flashback table,举例:
  1. SQL> flashback table xxx to timestamp to_timestamp('2012-09-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS') ;
复制代码

回复 只看该作者 道具 举报

5#
发表于 2017-8-1 18:04:44
本帖最后由 biotwang 于 2017-8-1 18:12 编辑

使用PRM恢复:
  1. SQL> select * from sh.flash_test_table;
  2.      EMPNO EMPNAME
  3. ---------- ------------------------------
  4.          1 Kiran
  5.          2 Scott
  6.          3 Tiger
  7.          4 Jeff
  8.          5 Jane
  9.          6 John
  10. 6 rows selected.

  11. SQL> delete from sh.flash_test_table where empno>2;
  12. 4 rows deleted.

  13. SQL> commit;
  14. Commit complete.

  15. SQL> shutdown immediate;
  16. Database closed.
  17. Database dismounted.
  18. ORACLE instance shut down.
  19. SQL>
复制代码
启动PRM
  1. $ sh prm.sh
复制代码
Tools >> Recovery Wizard >> Dictionary Mode >> Choose Files >> Load

p1.png
p2.png
p3.png

  1. [oracle@m1 parnassus_dbinfo_DB_20170801174132]$ cd deleted/
  2. [oracle@m1 deleted]$ ls
  3. sh.flash_test_table.dat  sh.flash_test_table.dat.ctl
  4. [oracle@m1 deleted]$ cat sh.flash_test_table.dat
  5. "3" "Tiger"
  6. "4" "Jeff"
  7. "5" "Jane"
  8. "6" "John"
  9. [oracle@m1 deleted]$
复制代码
Tip:如果你多次使用Unload deleted data,prm会将抓取出的数据都放入sh.flash_test_table.dat文件中,这会让你看到重复行(PRM不主张删除数据),所以请每次使用后查看被抓出的结果:P

注意:被删除的行,可能由于数据量过少或块被重用而导致被新行覆盖,那么在这种情况,PRM也仅能尽可能地找到那些还未被覆盖的被删除行,因此会有所残缺,完整恢复取决于救援时间的早晚,越早当然越好。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-23 19:32 , Processed in 0.057515 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569