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

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

999

积分

1

好友

942

主题
1#
发表于 2017-4-17 15:23:01 | 查看: 3573| 回复: 4
本帖最后由 ALLSTARS_ORACLE 于 2017-5-3 16:57 编辑

昨晚,不小心删除了一个表,请问如何恢复,
我的环境:
HP-UNIX,ORACLE9I,归档模式
急!急!急!


我试了一下,好象不行呀 flashback 只使用在DML语句中,并有日志记录,我是用DROP 来做的,请问还有别的方法吗?
急用呀!!!
有RMAN备份的昨天的数据,不知道如何恢复我DROP的那个表,有没有人给个操作过程在另一个机器上进行不安全恢复,需要那些文件
下载专业ORACLE数据库恢复工具PRM-DUL  For Oracle http://www.parnassusdata.com/

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

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

服务热线 : 13764045638  QQ: 47079569     邮箱:service@parnassusdata.com
5#
发表于 2017-7-10 15:19:40
本帖最后由 biotwang 于 2017-7-10 15:23 编辑

通过PRM DUL找到被Drop的表:

  1. ===============================================================
  2. > sqlplus hr/oracle
  3. ===============================================================
  4. SQL> select table_name from all_tables;

  5. TABLE_NAME
  6. ------------------------------
  7. DUAL
  8. SYSTEM_PRIVILEGE_MAP
  9. TABLE_PRIVILEGE_MAP
  10. STMT_AUDIT_OPTION_MAP
  11. AUDIT_ACTIONS
  12. WRR$_REPLAY_CALL_FILTER
  13. HS_BULKLOAD_VIEW_OBJ
  14. HS$_PARALLEL_METADATA
  15. HS_PARTITION_COL_NAME
  16. HS_PARTITION_COL_TYPE
  17. REGIONS
  18. LOCATIONS
  19. DEPARTMENTS
  20. ...
  21. ===============================================================
  22. SQL> create table emp_status(emp_no number, status varchar2(20));

  23. Table created.

  24. SQL> insert into emp_status values(100, 'ACTIVE');

  25. 1 row created.

  26. SQL>  insert into emp_status values(101,'IN-ACTIVE');

  27. 1 row created.

  28. SQL>  insert into emp_status values(102,'ACTIVE');

  29. 1 row created.

  30. SQL>  insert into emp_status values(103,'ACTIVE');

  31. 1 row created.

  32. SQL>  insert into emp_status values(104,'ACTIVE');

  33. 1 row created.

  34. SQL> commit;

  35. Commit complete.
  36. ===============================================================
  37. SQL> select * from emp_status;

  38.     EMP_NO STATUS
  39. ---------- --------------------
  40.        100 ACTIVE
  41.        101 IN-ACTIVE
  42.        102 ACTIVE
  43.        103 ACTIVE
  44.        104 ACTIVE
  45. ===============================================================
  46. SQL> drop table emp_status;

  47. Table dropped.
  48. ===============================================================
  49. SQL> select * from sys.props$ where name in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');

  50. NAME                           VALUE$               COMMENT$
  51. ------------------------------ -------------------- --------------------
  52. NLS_CHARACTERSET               AL32UTF8             Character set
  53. NLS_NCHAR_CHARACTERSET         AL16UTF16            NCHAR Character set

  54. ===============================================================
  55. SQL> select file_name from dba_data_files;

  56. FILE_NAME
  57. ---------------------------------------------------------------
  58. /u01/app/oracle/oradata/PROD1/data/system01.dbf
  59. /u01/app/oracle/oradata/PROD1/data/sysaux01.dbf
  60. /u01/app/oracle/oradata/PROD1/data/undotbs01.dbf
  61. /u01/app/oracle/oradata/PROD1/data/users01.dbf
  62. /u01/app/oracle/oradata/PROD1/data/example01.dbf
  63. /u01/app/oracle/oradata/PROD1/data/indx01.dbf
  64. /u01/app/oracle/oradata/PROD1/data/tools01.dbf
  65. /u01/app/oracle/oradata/PROD1/data/test01.dbf

  66. 8 rows selected.

  67. ===============================================================

  68. SQL> select username, default_tablespace from dba_users where username='HR';

  69. USERNAME                       DEFAULT_TABLESPACE
  70. ------------------------------ ------------------------------
  71. HR                             EXAMPLE
  72. ===============================================================
  73. SQL> select min(object_id), max(object_id) from dba_objects where owner='HR';

  74. MIN(OBJECT_ID) MAX(OBJECT_ID)
  75. -------------- --------------
  76.          13627          14228
  77. ===============================================================
复制代码
因为当时测试的表是最后建立的,所以被drop的表的object_id一定大于数据字典中最大的那个id,即14228。
通过非字典模式查找,并Scan Segment,我们就可以找到id为obj14231的emp_status表了。

emp_status.png
                 

回复 只看该作者 道具 举报

4#
发表于 2017-7-10 10:57:37
From MOS - Note: 223543.1
==========================
对于Oracle 10g及更高版本,你可以使用recyclebin来进行drop表的恢复,前提是这个功能没有被禁用。
如果recyclebin被禁用或数据库为9i版本,以下有几种方式可供恢复参考:
方法1. 使用RMAN duplicate建立一个数据库克隆,其克隆数据为删除表前的状态。克隆出来的辅助库可以仅含有需要恢复用的表空间子集。一旦RMAN建立了克隆并被打开了。那么就可以从这个辅助库里导出表并导回主库。
这种方式对主库影响小,为Oracle官方推荐方法。
方法2. 直接将主库恢复到表删除前的状态。这是一种极端方法,因为整个库都会被回退。
方法3. 将表空间恢复到删除前的时间点。虽然比整个库回退好,但是它仍然对相对应的表空间进行了回退。
方法4. 将数据库恢复到一个DUMMY库中,这样就可以导出这张被删除的表然后在导入到目标库中。当然,这个方法仅是对RMAN duplicate命令不可用情况下的尝试。Oracle还是推荐使用RMAN duplicate命令来进行恢复操作。

对于Oracle 12c RMAN现在有了一个'recover table'命令,相关新特性可以查看MOS Note: 1521524.1

回复 只看该作者 道具 举报

3#
发表于 2017-7-7 15:26:17
对DROP表进行恢复:
============================
1) 如果你有这个表的EXPORT备份的话,直接使用IMPORT恢复即可。

2) 如果你没有EXPORT备份的话,那么这张表平时是通过SQL*Loader批量导入的么?
如果仅是批量导入后进行事务更新的表。那么重新批量导入手工更新下即可。

3) 如果前两种情况都不可行,那么考虑从备份进行恢复:
- 是否数据库存在良好备份
- 数据库是否在archivelog模式下:
a)如果不是的话那么表只能从最近的冷备中进行恢复了。
b)如果数据库在archivelog模式下,检查是否存在含有这张表的最近的表空间备份。

如果b)情况具备,那么就可以进行基于时间点的恢复(TSPITR: Tablespace Point-In-Time Recovery),
不过对应表空间下的所有数据将会被恢复到指定当时的状态。

进行操作时,如果,你并不介意恢复时间的话,你可以
1) 先将其表空间下的所有对象进行EXPORT(确保在导出时没有warning发生)。然后再开始进行表空间的时间点恢复。
2) drop所有表空间下除了此恢复表外的所有其它对象。
3) 使用IMPORT将表空间下的其它对象导入。
这样既保证了表空间下其它的对象都是最新的,又从备份中恢复了被drop的表。
确定是数据库表空间大的话EXPORT、IMPORT会很慢。

回复 只看该作者 道具 举报

2#
发表于 2017-5-3 16:58:41
使用prm-dul恢复被drop删除掉的oracle表:
DROP TABLE的Oracle数据恢复 PRM-DUL
http://www.askmaclean.com/archiv ... %A4%8D-prm-dul.html

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-12-23 19:29 , Processed in 0.050039 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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