将Oracle数据库的数据文件放在裸设备上, 是很正常的事. 不过我的AUL出来将近两年半了, 还从没有测过裸设备. 因为我认为所有Linux/Unix上的裸设备其实也是一个文件, 在程序中就当作普通的文件来操作就行了, 所以就一直没有作测试. Solaris上用Veritas文件系统作的裸设备到是测试过.

    先用fdisk创建一个分区, 然后用dd将windows下的一个Oracle文件拷贝到这个分区. 然后用AUL去打开就行了, 如下所示:

[root@RH4SRV1 oracle]# ./aul
Register Code: 4ZN4-9OVB-EE3Y-OWTN-J5UC
AUL : AnySQL UnLoader(MyDUL) for Oracle 8/8i/9i/10g, release 4.0.4

(C) Copyright Lou Fangxin 2005-2007 (AnySQL.net), all rights reserved.

AUL> open b.txt
*  ts#  fno  rfn ver bsize     blocks filename
- ---- ---- ---- --- ----- ---------- --------------------------
Y    7    7    7 02   8192       1280 /dev/sdb1

    接下来要测试一下随机的读取, 如果支持则表示没有问题.

AUL> oradump file 7 block 1
RDBA=0x01c00001(7/1),type=0x0b,fmt=0x02,seq=0x01,flag=0x04
DBID=0xc4ecc64a=3303851594,db=XUE,ts#=7,ts=T,file#=7,blksiz=8192, blks=1280, ver=0x08000000, fzy=----

AUL> oradump file 7 block 10
RDBA=0x01c0000a(7/10)=29360138,type=0x06,fmt=0x02,seq=0x01,flag=0x06
seg/obj=0x00001ed9=7897,csc=0x0000.0034bef5,itc=2,typ=1 - DATA
FLG=0x03, fls=0, nxt=0x00000000(0/0)=0
Transaction Slot:
id   xid-usn.slot.wrap   uba-rdba.row.seq   flag lock fsc/scn
---- ------------------- ------------------ ---- ---- ---------------
0x01 0x0003.01d.000000a5 0x00800077.00bb.0c --U-    2 0x0000.0034bef8
0x02 0x0000.000.00000000 0x00000000.0000.00 ----    0 0x0000.00000000
Block Data:
hdsz=92
flag=0x00
ntab=1
nrow=2
ffre=65535
fsbo=0x0072=114
fseo=0x1fc6=8134
avsp=0x1f54=8020
tosp=0x1f54=8020
tab#=  0     nrow=   2     offs=   0
    row#=   0  offs=0x1f85= 8069+  92=0x1fe1= 8161   flag=--H-FL--
    row#=   1  offs=0x1f6a= 8042+  92=0x1fc6= 8134   flag=--H-FL--

    我在VMWare上感觉AUL进行裸文件扫描时有些慢, 一个10M的文件, 恢然用了将近30秒. 不知道是不是因为在VMWare的原因.