AUL恢复Oracle存贮过程

    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

    这样也算比较方便了. 这个功能要求系统表空间必需存在.

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • How old are you?
  • 你多大了?
  • I'm twenty-two
  • (years old). 我二十二了.
  • Mr. Smith is still in his forties.
  • 史密斯先生才四十几岁.
  • I'm two years younger than my sister.
  • 我比我姐小两岁.
  • My elder sister is one year older than her husband.
  • 我姐比他丈夫大一岁.