构建测试的环境并模拟删除数据:
SQL> create user luda identified by luda default tablespace users; User created. SQL> grant dba to luda; Grant succeeded. SQL> alter system checkpoint; System altered. SQL> SQL> conn luda/luda Connected. SQL> create table t1 as select * from dba_objects where rownum < 10001; Table created. SQL> create table t2 as select object_id,object_name from dba_objects where rownum < 100; Table created. SQL> commit; Commit complete. SQL> alter system checkpoint; System altered. #rows before delete from luda.t2 SQL> select count(*) from t2; COUNT(*) ---------- 99 #delete 90rows from luda SQL> delete from luda.t2 where rownum < 91; 90 rows deleted. SQL> commit; Commit complete. SQL> select count(*) from luda.t2; COUNT(*) ---------- 9 SQL> alter system checkpoint; System altered.
加载mdata
#using mdata unload data that have deleted from luda.t2 MDATA>reload dict Start reload dict,Sun Jan 11 00:01:50 CST 2015 SQLException: State: X0X95 Severity: 30000 Operation 'TRUNCATE TABLE' cannot be performed on object 'IDUL_OBJ' because there is an open ResultSet dependent on that object. 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. End reload dict,Sun Jan 11 00:01:56 CST 2015,reload success.
通过unload的功能恢复出delete数据
MDATA>unload table luda.t2 only deleted data load only deleted data,schema:LUDA;tab:T2 tabName:LUDA.T2,dic_obj:com.olm.b.H@2d6636,getFileid:4,getBlockid:187 90 rows unloaded
退出mdata切换到恢复出数据的目录,这时候将恢复出的数据使用sqlloadl恢复到表中
#then u can find the unload data at /oracle/mdata/data [root@DB01 data]# ls -lFrt -rw-r--r-- 1 oracle oinstall 1042 Jan 11 00:02 LUDA.T2.dat -rw-r--r-- 1 oracle oinstall 204 Jan 11 00:02 LUDA.T2.ctl ...
这里介绍2个delete的功能
第一种是unload表数据时候包含被删除数据
using mdata unload luda.t2's data contrain deleted data MDATA>unload table luda.t2 contain deleted data unload schema:LUDA;tab:T2 contain deleted data tabName:LUDA.T2,dic_obj:com.olm.b.H@a0b1e1,getFileid:4,getBlockid:187 99 rows unloaded
第二种是unload表数据库时候不包含被删除数据
# using mdata unload luda.t2's data is not contrain deleted data MDATA>unload table luda.t2 unload schema:LUDA;tab:T2 tabName:LUDA.T2,dic_obj:com.olm.b.H@1c76b8d,getFileid:4,getBlockid:187 9 rows unloaded