Skip to content

使用MDATA恢复drop的对象

创建测试表,同时drop对应测试表,模拟drop table的案例

SQL> create table mdata_test ( a number,b varchar2(10),c nvarchar2(30),d varchar2(20),e date);

Table created.

SQL> insert into mdata_test select rownum,lpad('x',10),'NC测试' || rownum, 'ZHS测试'|| rownum,sysdate+dbms_random.value(0,100) from dba_objects where rownum< =20000;

20000 rows created.

SQL> commit;

Commit complete.

SQL> select object_id,object_name from dba_objects where object_name='MDATA_TEST';

 OBJECT_ID
----------
OBJECT_NAME
--------------------------------------------------------------------------------
     51997
MDATA_TEST


SQL> drop table mdata_test_bak purge;

Table dropped.

SQL> create table mdata_test_bak as select * from mdata_test;

Table created.

SQL> drop table mdata_test purge;

Table dropped.

SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

加载mdata

olm@hc10 /home/oracle/MDATA$ ./MDATA.sh

MDATA for oracle 9I,10G,11G, release 3.0.3
(@)copyright LUDATOU,HC all rights reserved.

Web:www.ludatou.com,www.hcdba.com
Email:feigigi@qq.com,564439763@qq.com
QQ group:66809572

loading default config.......
load config file 'config.txt' successful
loading default asm disk file ......
start loading default control file ......
load control file 'control.txt' successful
load BOOTSTRAP$ success.
load TAB$ success.
load COL$ success.
load OBJ$ success.
load USER$ success.
load PROPS$ success.
load TABPART$ success.
load TABSUBPART$ success.
load IND$ success.

先对被drop的表所在tablespace进行scan做操

MDATA>scan extent tablespace 4
scan extent start: Tue Jan 20 22:23:10 CST 2015
scanning extent...
scanning extent finished.
scan extent completed: Tue Jan 20 22:23:12 CST 2015

接着通过drop恢复的语法对drop的表进行恢复

MDATA>unload object 51994 column number varchar2 nvarchar2 varchar2 date
Unloading Object,object ID: 51994,  Cluster: 0
-1 rows unloaded
MDATA>unload object 51997 column number varchar2 nvarchar2 varchar2 date
Unloading Object,object ID: 51997,  Cluster: 0
20000 rows unloaded
MDATA>exit

恢复结束后,切换到mdata的ddl目录,通过生成的ddl语句在instance中重建该table

olm@hc10 /home/oracle/MDATA$ cd ddl
olm@hc10 /home/oracle/MDATA/ddl$ sqlplus hc/hc

SQL*Plus: Release 10.2.0.5.0 - Production on Tue Jan 20 22:23:56 2015

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> host ls
appclean.sql  MDATA_0000051979.sql  MDATA_0000051994.sql  SYS.IND.sql    SYS.TABPART.sql     SYS.USER.sql
app.sql       MDATA_0000051981.sql  MDATA_0000051997.sql  SYS.PROPS.sql  SYS.TABSUBPART.sql

SQL> host ls -lrt
total 44
-rw-r--r-- 1 oracle oinstall  281 Oct  6 16:57 appclean.sql
-rw-r--r-- 1 oracle oinstall 1909 Oct  6 17:44 app.sql
-rw-r--r-- 1 oracle oinstall  249 Jan 20 16:22 MDATA_0000051979.sql
-rw-r--r-- 1 oracle oinstall  249 Jan 20 16:53 MDATA_0000051981.sql
-rw-r--r-- 1 oracle oinstall  249 Jan 20 22:20 MDATA_0000051994.sql
-rw-r--r-- 1 oracle oinstall 1328 Jan 20 22:23 SYS.USER.sql
-rw-r--r-- 1 oracle oinstall  193 Jan 20 22:23 SYS.PROPS.sql
-rw-r--r-- 1 oracle oinstall 1367 Jan 20 22:23 SYS.TABSUBPART.sql
-rw-r--r-- 1 oracle oinstall 1277 Jan 20 22:23 SYS.TABPART.sql
-rw-r--r-- 1 oracle oinstall 1761 Jan 20 22:23 SYS.IND.sql
-rw-r--r-- 1 oracle oinstall  249 Jan 20 22:23 MDATA_0000051997.sql

SQL> @MDATA_0000051997.sql

Table created.

SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

接着切换到mdata目录下的data目录,通过sqlldr工具,对导出来的数据恢复到被刚创建的表中去

olm@hc10 /home/oracle/MDATA/ddl$ cd ../data
olm@hc10 /home/oracle/MDATA/data$ sqlldr "'hc/hc' control=MDATA_0000051997.ctl"

SQL*Loader: Release 10.2.0.5.0 - Production on Tue Jan 20 22:24:51 2015

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

Commit point reached - logical record count 6502
Commit point reached - logical record count 13004
Commit point reached - logical record count 19506
Commit point reached - logical record count 20000

导入完成后,登入数据库验证恢复

olm@hc10 /home/oracle/MDATA/data$ sqlplus / as sysdba;

SQL*Plus: Release 10.2.0.5.0 - Production on Tue Jan 20 22:25:08 2015

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> conn hc/hc
Connected.
SQL> select * from mdata_test_bak minus select * from MDATA_0000051997;

no rows selected

至此drop的恢复完成。

使用mdata恢复drop的表需要知道该对象的object id,同时需要知道该表的表结构(字段,字段属性)