今天试验了把在只有数据文件的条件下恢复。我用的是AUL免费版本。
先建立试验环境,创建一个数据文件和两个表,插入少量数据:
SQL> conn / as sysdba
Connected.
SQL> create tablespace test
2 datafile 'd:\test.dbf' size 2M
3 extent management local;
Tablespace created.
SQL> create table zeeno1 (text varchar(100))
2 tablespace test;
Table created.
SQL> insert into zeeno1 values('Hello World!');
1 row created.
SQL> create table zeeno2 (id number(5))
2 tablespace test;
Table created.
SQL> insert into zeeno2 values(250);
1 row created.
SQL> commit;
Commit complete.
SQL> alter system checkpoint;
System altered.
接下来写个AUL的配置文件。配置文件需要FILE#,RFILE#和文件路径:
SQL> column name for a40 SQL> select file#,rfile#,name from v$datafile; FILE# RFILE# NAME ---------- ---------- ---------------------------------------- 1 1 D:\ORACLEXE\ORADATA\XE\SYSTEM01.DBF 2 2 D:\ORACLEXE\ORADATA\XE\UNDOTBS01.DBF 3 3 D:\ORACLEXE\ORADATA\XE\SYSAUX01.DBF 4 4 D:\TEST.DBF 5 5 D:\ORACLEXE\ORADATA\XE\USERS.DBF
此次环境是在有SYSTEM表空间的前提下,因而可以直接unload数据出来。
D:\>aul Register Code: 0W2L-AI50-16DQ-DLLS-RP58 AUL : AnySQL UnLoader(MyDUL) for Oracle 8/8i/9i/10g, Trial Version 3.2.2 (C) Copyright Lou Fangxin 2005-2006 (AnySQL.net), all rights reserved. AUL> open aul.cfg * ts# fno rfn ver bsize blocks filename - ---- ---- ---- --- ----- ---------- ----------------------------------- Y 0 1 1 a2 8192 41600 D:\oraclexe\oradata\XE\SYSTEM01.DBF Y 6 4 4 a2 8192 256 D:\TEST.DBF AUL> unload table user$; 2006-09-05 10:27:51 2006-09-05 10:27:51 AUL> unload table obj$; 2006-09-05 10:27:55 2006-09-05 10:27:57 AUL> unload table tab$; 2006-09-05 10:28:02 2006-09-05 10:28:05 AUL> unload table col$; 2006-09-05 10:28:09 2006-09-05 10:28:11 AUL> desc sys.zeeno1 Storage(OBJ#=9606 OBJD=9606 TS=6 FILE=4 BLOCK=11 CLUSTER=0) No. SEQ INT Column Name Type --- --- --- ----------------------------- ---------------- 1 1 1 TEXT VARCHAR2(100) AUL> desc sys.zeeno2 Storage(OBJ#=9607 OBJD=9607 TS=6 FILE=4 BLOCK=19 CLUSTER=0) No. SEQ INT Column Name Type --- --- --- ----------------------------- ---------------- 1 1 1 ID NUMBER(5) AUL> unload table sys.zeeno1; 2006-09-05 10:29:43 Unload OBJD=9606 FILE=4 BLOCK=11 CLUSTER=0 ... Hello World! 2006-09-05 10:29:43 AUL> unload table sys.zeeno2; 2006-09-05 10:29:49 Unload OBJD=9607 FILE=4 BLOCK=19 CLUSTER=0 ... 250 2006-09-05 10:29:49
这样会在当前目录下生成ZEENO1_sqlldr.ctl和ZEENO2_sqlldr.ctl两个文件。如
-- -- Generated by AUL/MyDUL, for table sys.zeeno1 -- OPTIONS(DIRECT=TRUE,READSIZE=4194304,ERRORS=-1,SKIP=1,ROWS=50000) LOAD DATA INFILE 'd:\zeeno1.txt' "STR X'0d0a'" INTO TABLE ZEENO1 FIELDS TERMINATED BY X'7c' TRAILING NULLCOLS ( TEXT CHAR(100) )
如果需要数据,还需要加上to file参数:
AUL> unload table sys.zeeno1 to d:\zeeno1.txt; 2006-09-05 10:36:23 Unload OBJD=9606 FILE=4 BLOCK=11 CLUSTER=0 ... 2006-09-05 10:36:23
zeeno1.txt文件就是表sys.zeeno1的内容了。
本次试验只是尝试一下AUL的工作方式,实际上,对于产品数据库的恢复恐怕得购买许可证了或相关服务了。