在帮银联恢复数据库的时候 客户要求导出库里的一些存储过程,这里整理了一些脚本供大家使用
创建view
select
'CREATE OR REPLACE VIEW '||O.NAME||' ('||
replace(c.cols,',',','||chr(10))||')'||CHR(10)||
'as'||chr(10), v.text
from
user$ u, obj$ o, view$ v,
( SELECT COL.OBJ#, COL.COLS
FROM
(SELECT
OBJ#, COL#, substr(SYS_CONNECT_BY_PATH(NAME,','),2) COLS
FROM COL$
WHERE COL# > 0
START WITH COL# = 1
CONNECT BY PRIOR OBJ# = OBJ# AND PRIOR COL# = COL# - 1 ) COL,
(SELECT OBJ#, COUNT(*) COLCNT FROM COL$
WHERE COL# > 0 GROUP BY OBJ#) CN
WHERE COL.OBJ# = CN.OBJ# AND COL.COL# = CN.COLCNT
) C
where u.user#=o.owner# and o.obj# = c.obj#
and v.obj# = o.obj# and u.name=':user'
需要导出sys.col$ sys.obj$
创建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=':user')
需要导出sys.seq$ ,sys.user$ , sys.obj$
创建index
SELECT
'CREATE '||decode(bitand(IDX.property, 1), 1, 'UNIQUE', '')||
' INDEX '||I.NAME||' ON '||T.NAME||'('||IDX.PATH||');' INDEX_DDL
FROM
USER$ U, OBJ$ T, OBJ$ I,
(
select I.PROPERTY, I.BO#, I.OBJ#, C.POS#,
SUBSTR(sys_connect_by_path(CN.NAME,','),2) path
from IND$ I, ICOL$ C, COL$ CN
WHERE I.OBJ# = C.OBJ# AND I.BO# = C.BO#
AND I.BO# = CN.OBJ# AND C.COL# = CN.INTCOL#
start with C.POS#=1
connect by PRIOR I.OBJ# = I.OBJ#
AND prior C.POS# = C.POS# - 1 ) IDX,
(SELECT I.BO#, I.OBJ#, COUNT(*) COLCNT
FROM ICOL$ I GROUP BY I.BO#, I.OBJ#) IDXC
WHERE
U.USER# = T.OWNER# AND
IDX.BO# = T.OBJ# AND
IDX.OBJ# = I.OBJ# AND
IDX.BO# = IDXC.BO# AND
IDX.OBJ# = IDXC.OBJ# AND
IDX.POS# = IDXC.COLCNT AND
U.NAME = ':user'
ORDER BY T.NAME, I.NAME
需要导出 sys.icol$, sys.col$,sys.ind$,sys.user$,sys.obj$
创建 存储过程
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 = ':user' AND O.NAME = ':过程名'
需要导出 sys.obj$, sys.source$
创建 trigger and type
select u.name, o.name,
decode(o.type#, 12, 'TRIGGER', 13, 'TYPE', 14, 'TYPE BODY',
'UNDEFINED') ,
DECODE(S.LINE,1,'CREATE OR REPLACE ','')||s.source
from sys.obj$ o, sys.source$ s, sys.user$ u
where o.obj# = s.obj#
and o.owner# = u.user#
and u.name=':user'
and ( o.type# in ( 12, 14) OR
( o.type# = 13 AND o.subname is null))
需要导出对象 sys.obj$,sys.source$,sys.user$
创建dblink 一般重新建就可以了 实在要弄 可以导出sys.link$,sys.user$