日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle批量生成索引,ORACLE迁移时批量导出索引、存储过程,表结构等

發(fā)布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle批量生成索引,ORACLE迁移时批量导出索引、存储过程,表结构等 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

[toc]

ORACLE遷移中的一些經驗(一)批量導出sequence

批量導出squence

在網上找到這樣一條語句:

select 'create sequence ' || sequence_name || ' minvalue ' || min_value ||

' maxvalue ' || max_value || ' start with ' || last_number ||

' increment by ' || increment_by || (case

when cache_size = 0 then

' nocache'

else

' cache ' || cache_size

end) || ';'

from dba_sequences;

但實際操作中,很多時候避免新庫取值是不重復使用老庫序列,需要增大序列的值,所以修改上面語句

select 'create sequence '||sequence_name||

' minvalue '||min_value||

' maxvalue '||max_value||

' start with '|| to_number(last_number +1000) ||

' increment by '||increment_by||

(case when cache_size=0 then ' nocache' else ' cache '||cache_size end) ||';' from dba_sequences;

當然增加的數(shù)量要更加實際的情況而定(MAX_VALUE的值),我這里的是增加1000.

ORACLE遷移中的一些經驗(二)批量導出job,并在目標庫創(chuàng)建

1、 批量導出創(chuàng)建job,語句如下:

SELECT 'SYS.dbms_job.submit(job => :job,what => '''||what||''',next_date => to_date('''||to_char(next_date,'dd-mm-yyyy hh24:mi:ss')||''', ''dd-mm-yyyy hh24:mi:ss''),interval => '''||INTERVAL||''');' FROM dba_jobs;

例子:

SQL> SQL> SELECT 'SYS.dbms_job.submit(job => :job,what => '''||what||''',next_date => to_date('''||to_char(next_date,'dd-mm-yyyy hh24:mi:ss')||''', ''dd-mm-yyyy hh24:mi:ss''),interval => '''||INTERVAL||''');' FROM dba_jobs;

'SYS.DBMS_JOB.SUBMIT(JOB=>:JOB,WHAT=>'''||WHAT||''',NEXT_DATE=>TO_DATE('''||TO_CHAR(NEXT_DATE,'DD-MM-YYYYHH24:MI:SS')||''',''DD-MM-YYYYHH24:MI:SS''),INTERVAL=>'''||INTERVAL||''');'

SYS.dbms_job.submit(job => :job,what => 'xyz_pkg.xyz_p1;',next_date => to_date('21-11-2015 15:26:22', 'dd-mm-yyyy hh24:mi:ss'),interval => 'sysdate+1/1440');

SYS.dbms_job.submit(job => :job,what => 'xyz_pkg.xyz_p2;',next_date => to_date('21-11-2015 15:26:17', 'dd-mm-yyyy hh24:mi:ss'),interval => 'sysdate+1/1440');

2、新庫創(chuàng)建JOB

將上面產生的語句加入至:

VAR job NUMBER

begin

SYS.dbms_job.submit(job => :job,what => ‘xyz_pkg.xyz_p1;’,next_date => to_date(‘21-11-2015 15:26:22’, ‘dd-mm-yyyy hh24:mi:ss’),interval => ‘sysdate+1/1440’);

SYS.dbms_job.submit(job => :job,what => ‘xyz_pkg.xyz_p2;’,next_date => to_date(‘21-11-2015 15:26:17’, ‘dd-mm-yyyy hh24:mi:ss’),interval => ‘sysdate+1/1440’);

COMMIT;

END;

/

使用SYS執(zhí)行就可以了。

2、然后修改job的屬主

腳本如下:

set serveroutput on

declare

v_job_id number;

v_user varchar2(50);

v_nlsenv VARCHAR2(4000);

cursor c_tab is select job,schema_user,nls_env from dba_jobs where log_user=‘SYS’;

begin

open c_tab;

loop

fetch c_tab into v_job_id,v_user,v_nlsenv;

exit when c_tab%NOTFOUND;

sys.dbms_ijob.CHANGE_ENV(v_job_id,‘TONY’,‘TONY’,‘TONY’,v_nlsenv); ----修改目標用戶

commit;

end loop;

close c_tab;

end;

/

修改完屬主,JOB就遷移完成了。

3. 批量導出INDEXES語句

SELECT DBMS_METADATA.GET_DDL(u.OBJECT_TYPE, u.object_name,u.OWNER)

FROM DBA_OBJECTS u

where u.OBJECT_TYPE=‘INDEX’ AND u.owner in(‘TONY’);

導出語句時需要格式化,方便使用。

set linesize 1800

set pages 999

set long 90000

spool /home/oracle/craete_index02.sh

–設置按單詞換行

col a for a200 wrapped word

–去除storage等多余參數(shù)

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘STORAGE’,FALSE);

–輸出信息采用縮排或換行格式化

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘PRETTY’,true);

–確保每個語句都帶分號

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SQLTERMINATOR’,true);

SELECT DBMS_METADATA.GET_DDL(u.OBJECT_TYPE, u.object_name,u.OWNER)

FROM DBA_OBJECTS u

where u.OBJECT_TYPE=‘INDEX’ AND u.owner in(‘TONY’);

spool off

===========================================

set linesize 1800

set pages 999

set long 90000

col aa format 99999999

col aa for a200 wrapped word

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘STORAGE’,FALSE);

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘PRETTY’,true);

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SQLTERMINATOR’,true);

spool F:\zhangzhemin\craete_index02.sh

SELECT DBMS_METADATA.GET_DDL(u.OBJECT_TYPE, u.object_name,u.OWNER) as aa

FROM DBA_OBJECTS u

where u.OBJECT_TYPE=‘INDEX’ AND u.owner in(‘IPTVCIMP’);

spool off

導出表空間

set linesize 180

set pages 999

set long 90000

col a for a200 wrapped word

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘STORAGE’,FALSE);

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘PRETTY’,true);

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SQLTERMINATOR’,true);

spool F:\zhangzhemin\craete_tablespace.sh

SELECT DBMS_METADATA.GET_DDL(‘TABLESPACE’, TS.tablespace_name)

FROM DBA_TABLESPACES TS;

spool off

4. --導出表空間

方法 一

set linesize 180

set pages 999

set long 90000

col a for a200 wrapped word

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘STORAGE’,FALSE);

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘PRETTY’,true);

EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,‘SQLTERMINATOR’,true);

spool /home/oracle/tablespace_name02.sh

SELECT DBMS_METADATA.GET_DDL(‘TABLESPACE’, TS.tablespace_name)

FROM DBA_TABLESPACES TS;

spool off

方法二

set linesize 180

set pages 999

set long 90000

declare

cursor c2 is select tablespace_name from dba_tablespaces where contents='PERMANENT' ;

v_tablespac c2%rowtype;

begin

DBMS_OUTPUT.ENABLE(buffer_size => null);

open c2;

loop

fetch c2 into v_tablespac ;

exit when c2%notfound;

DBMS_OUTPUT.put_line(to_char(dbms_metadata.get_ddl('TABLESPACE',v_tablespac.tablespace_name))||';');

end loop;

close c2;

end;

/

5. – 創(chuàng)建用戶腳本

set serveroutput on

set line 100

set pagesize 0

declare

cursor c1 is select username from dba_users a where a.account_status=‘OPEN’ ;

v_user c1%rowtype;

begin

open c1;

loop

fetch c1 into v_user ;

exit when c1%notfound;

DBMS_OUTPUT.put_line(to_char(dbms_metadata.get_ddl(‘USER’,v_user.username))||’;’);

end loop;

close c1;

end;

/

6.—授權系統(tǒng)權限腳本

select ‘grant ‘||t.privilege ||’ to ‘||t.grantee || decode(t.admin_option,‘YES’,’ with admin;’,’;’)

from dba_sys_privs t

where t.grantee not in

(‘SPATIAL_WFS_ADMIN_USR’,

‘DIP’

);

7. --授角色腳本

select ‘grant ‘||granted_role||’ to ‘||grantee||’;’ from dba_role_privs

where grantee not in

(‘SPATIAL_WFS_ADMIN_USR’,

‘DIP’,

‘MDDATA’

);

8. – 表權限

select ‘grant ‘||t.privilege||’ on ‘||t.grantor||’.’||t.table_name||’ to ‘||t.grantee||decode(t.grantable,‘YES’,’ with grant;’,’;’)

from dba_tab_privs t

where t.grantor not in

(‘SYS’,‘SYSTEM’,‘DBSNMP’,‘PERFSTAT’,‘OUTLN’,‘WMSYS’,‘CONNECT’,‘DBA’,

‘EXP_FULL_DATABASE’,‘IMP_FULL_DATABASE’,‘OEM_MONITOR’,‘RESOURCE’,‘JAVADEBUGPRIV’)

order by t.grantee

/

9. 導出dblink的ddl語句

SELECT DBMS_METADATA.GET_DDL(‘DB_LINK’, u.object_name,u.OWNER) as aa

FROM DBA_OBJECTS u

where u.OBJECT_TYPE=‘DATABASE LINK’ ;

總結

以上是生活随笔為你收集整理的oracle批量生成索引,ORACLE迁移时批量导出索引、存储过程,表结构等的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。