今天打算將一個數據庫的索引在另一個測試庫上重新創建一遍,研究了一下。
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');另外一個相關的語句生成刪除某個用戶全部索引的語句