dbms_metadata.get_ddl()來獲得物件的定義語句

eric0435發表於2012-07-26
今天打算將一個資料庫的索引在另一個測試庫上重新建立一遍,研究了一下。
set pagesize 0
set long 90000
set feedback off
set echo off
spool all_index.sql
SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name)
FROM USER_INDEXES u;
spool off;
最後找個編輯器替換一下表空間名,在表空間名後面加上個;
然後讓ORACLE慢慢執行吧
其實是呼叫DBMS_METADATA.GET_DDL這個外部過程來獲得建立DLL語句,還能獲得很多東西

這個是所有使用者的建立DLL
SELECT DBMS_METADATA.GET_DDL('USER',U.username)
FROM DBA_USERS U;

這個是所有表的DLL

SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name)
FROM USER_TABLES u;

所有表空間的DLL
SELECT DBMS_METADATA.GET_DDL('TABLESPACE', TS.tablespace_name)
FROM DBA_TABLESPACES TS;

組合一下,所有表,索引儲存過程

SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)
  FROM USER_OBJECTS u
 where U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE');

另外一個相關的語句生成刪除某個使用者全部索引的語句
select 'drop index '||index_name||';' form. user_indexes;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-736952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章