ORACLE遷移中的一些經驗(三)批量匯出index 建索引、使用者、許可權等語句
1、批量匯出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 180
set pages 999
set long 90000
--設定按單詞換行
col a for a200 wrapped word
--去除storage等多餘引數
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);
2、-- 建立使用者指令碼
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;
/
3、---授權系統許可權指令碼
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'
);
4、--授角色指令碼
select 'grant '||granted_role||' to '||grantee||';' from dba_role_privs
where grantee not in
('SPATIAL_WFS_ADMIN_USR',
'DIP',
'MDDATA'
);
5、-- 表許可權
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
/