AUL恢复Oracle Sequence?
AUL/MyDUL » http://www.anysql.net/aulmydul/aul_recover_triggers.html 2008-03-20AUL的数据恢复主要关注于数据本身, 象Sequence的信息AUL虽不自动整理, 但它们也不过是存放在系统表空间中的数据, 还是可以恢复的. 原理是将系统表的数据导出来, 再导入到新的库中, 然后自已 写SQL语句来进行查询, 就可以获得重建Sequence的角本了.
需要导出下面几个系统表的数据.
unload table sys.USER$ to sys_user.txt;
unload table sys.OBJ$ to sys_obj.txt;
unload table sys.SEQ$ to sys_seq.txt;
调用建表角本, 创建表.
@USER$_syntax.sql
@OBJ$_syntax.sql
@SEQ$_syntax.sql
运行sqlldr将数据导入到新的库, 注意不要将这些数据导入到SYS用户下.
sqlldr test/test control=USER$_sqlldr.ctl
sqlldr test/test control=OBJ$_sqlldr.ctl
sqlldr test/test control=SEQ$_sqlldr.ctl
再写个SQL就可以很方便地获得重建某个用户下Sequence的代码了.
SELECT
'CREATE SEQUENCE '|| SEQ_NAME ||
' MINVALUE '||minval ||
' MAXVALUE '||MAXVAL ||
' START WITH '||LASTVAL ||
' ' || CYC || ' ' || ORD ||
DECODE(SIGN(CACHE), 1,' CACHE '|| CACHE, 'NOCACHE') ||
';' SEQ_DDL
from
(select u.name OWNER, o.name SEQ_NAME,
s.minvalue MINVAL, s.maxvalue MAXVAL,
s.increment$ INC,
decode (s.cycle#, 0, 'NOCYCLE', 1, 'CYCLE ') CYC,
decode (s.order$, 0, 'NOORDER', 1, 'ORDER') ORD,
s.cache, s.highwater LASTVAL
from seq$ s, obj$ o, user$ u
where u.user# = o.owner#
and o.obj# = s.obj#
and u.name='用户名')
这样也算比较方便了. 这个功能要求系统表空间必需存在.


Recent Comments