AUL的数据恢复主要关注于数据本身, 象存贮过程之类的代码AUL虽不自动整理, 但它们也不过是存放在系统表空间中的数据, 还是可以恢复的. 原理是将系统表的数据导出来, 再导入到新的库中, 然后自已 写SQL语句来进行查询, 以生成重建存贮过程的代码.
先恢复几张系统表的数据.
unload table sys.user$ to sys_user.txt;
unload table sys.obj$ to sys_obj.txt;
set field_tag \x07
set record_tag \x06
unload table sys.source$ to sys_source.txt;
调用建表角本, 创建表.
@USER$_syntax.sql
@SOURCE$_syntax.sql;
@OBJ$_syntax.sql
运行sqlldr将数据导入到新的库, 注意不要将这些数据导入到SYS用户下.
sqlldr test/test crontrol=USER$_sqlldr.ctl
sqlldr test/test crontrol=OBJ$_sqlldr.ctl
sqlldr test/test crontrol=SOURCE$_sqlldr.ctl
再写个SQL就可以很方便地获得某个用户下所有存贮过程或某个存贮过程的源代码了.
SELECT DECODE(S.LINE,1,'CREATE OR REPLACE ','')||SOURCE SOURCE
FROM
USER$ U, OBJ$ O, SOURCE$ S
WHERE
U.USER# = O.OWNER# AND
O.OBJ# = S.OBJ# AND
U.NAME = '用户名'
-- AND O.NAME = '过程名'
ORDER BY S.OBJ#, S.LINE
这样也算比较方便了. 这个功能要求系统表空间必需存在.