Oracle compress can save a lot of storage for us, so I believe that more and more companys will start to use it. I spent few days free time on it, and add the compress feature support in AUL/MyDUL data recovery utility. Now I put AUL 5 beta windows version here, just for testing. However it's really complex, I have found some problems when recover data from compressed tables, some rows are correct but some rows are not. I am digging on it.
Create a compress table and a non-compress table first.
CREATE TABLE T_COMPRESS COMPRESS AS SELECT * FROM DBA_OBJECTS;
CREATE TABLE T_NOCOMPRESS AS SELECT * FROM DBA_OBJECTS;
ANALYZE TABLE T_COMPRESS COMPUTE STATISTICS;
ANALYZE TABLE T_NOCOMPRESS COMPUTE STATISTICS;
After analyze the two tables, let's check the table size, to make sure it's really compressed by Oracle.
SQL> SELECT TABLE_NAME, BLOCKS FROM USER_TABLES;
TABLE_NAME BLOCKS
------------------------------ ----------
T_COMPRESS 45
T_NOCOMPRESS 138
There is no extra options for compressed tables, just follow the step by step guide to recover the demo data. Let's check the row count here.
AUL> ! wc -l t_compress.txt
10099 t_compress.txt
AUL> ! wc -l t_nocompress.txt
10090 t_nocompress.txt
Although the row count exactly matched, but the data is not correct for compressed table. I also add an option in AUL 5 to print the row address.
AUL> set row_address 1
Current ROW_ADDRESS is : 1
AUL> unload table sh.t_chain;
2007-11-02 16:34:35
Unload OBJD=11486 FILE=4 BLOCK=1387 CLUSTER=0 ...
16778606.0.0|a|b|c|d
2007-11-02 16:34:35
The address is "rdba.tabid.rowno", for normal table tabid is always 0, values non-zero for compressed table (always 1) or cluster tables. It enable me to quickly do some bug analyze.
Update: Linux Binary, Solaris Binary
