AUL中有个选项可以试图恢复被删除的记录, 不过这个选项我未没有下式用过, 因为它只适合于没有DELETE的表, 如果这个表本身有DELETE操作, 则这个命令基本上会失败, 这是因为在Oracle中, 记录被打上了DELETE标记后, 那部份空间有可能被重用了, 也有可能引起AUL程序非法退出. 不过在实验室环境中我们还是可以玩一玩的, 下面以EMP表为例:
SQL> SELECT COUNT(*) FROM ANYSQL.EMP;
COUNT(*)
----------
14
SQL> DELETE ANYSQL.EMP;
14 rows deleted.
SQL> COMMIT;
Commit complete.
接下来我运行了一句Checkpoint命令, 然后来作恢复, 恢复时只需要将DELETED_ROWS选项设为TRUE(默认值为False)就行. 如下所示:
AUL> unload table anysql.emp;
2007-04-17 11:35:56
Unload OBJD=10279 FILE=4 BLOCK=139 CLUSTER=0 ...
2007-04-17 11:35:56
AUL> set deleted_row true
Current DELETED_ROW is : TRUE
AUL> unload table anysql.emp;
2007-04-17 11:36:06
Unload OBJD=10279 FILE=4 BLOCK=139 CLUSTER=0 ...
7369|SMITH|CLERK|7902|1980-12-17 00:00:00|800||20
7499|ALLEN|SALESMAN|7698|1981-02-20 00:00:00|1600|300|30
7521|WARD|SALESMAN|7698|1981-02-22 00:00:00|1250|500|30
7566|JONES|MANAGER|7839|1981-04-02 00:00:00|2975||20
7654|MARTIN|SALESMAN|7698|1981-09-28 00:00:00|1250|1400|30
7698|BLAKE|MANAGER|7839|1981-05-01 00:00:00|2850||30
7782|CLARK|MANAGER|7839|1981-06-09 00:00:00|2450||10
7788|SCOTT|ANALYST|7566|1987-04-19 00:00:00|3000||20
7839|KING|PRESIDENT||1981-11-17 00:00:00|5000||10
7844|TURNER|SALESMAN|7698|1981-09-08 00:00:00|1500|0|30
7876|ADAMS|CLERK|7788|1987-05-23 00:00:00|1100||20
7900|JAMES|CLERK|7698|1981-12-03 00:00:00|950||30
7902|FORD|ANALYST|7566|1981-12-03 00:00:00|3000||20
7934|MILLER|CLERK|7782|1982-01-23 00:00:00|1300||10
2007-04-17 11:36:06
这个功能仅是实验室设计, 真正遇到问题应当先去恢复, 如果没有备份, 则思路从Log中用LogMiner去取出Undo SQL, 再不行用手工输入吧, 最后不行的话可以试试AUL的这个功能.