批量匯出建立索引的指令碼

dawn009發表於2014-02-27

有同事要匯出一個資料庫使用者下建立索引的指令碼,然後拿到另外一個庫裡面去執行。很少有這樣的需求,問了一下,他們要進行資料遷移,在新的庫中要求索引單獨放在一個表空間裡面,於是就把所有的索引都刪除了,進行重建。

本來這個可以用如下方法來實現:

ALTER INDEX index_name rebuild tablespace tbs_name;

既然索引已經刪除了,就需要從原資料庫中匯出建立索引的指令碼,索引是依附於表而存在的,沒有辦法用exp/expdp工具單獨匯出建立索引的指令碼,不過我們可以通過如下方法進行:

生成批量匯出索引的語句

sqlplus中執行

spool create_create_index.SQL

SELECT

'select dbms_metadata.get_ddl(''INDEX'', ' || ''''|| INDEX_NAME||'''' || ') from dual;'

FROM user_indexes ;

spool off

生成建立索引的sql語句

sqlplus中執行

spool create_index.SQL

@create_create_index.SQL

spool off

得到b.sql檔案中即為建立索引的語句

建立索引

sqlplus中執行

@create_index.SQL

另外,如果用的是expdp遷移的話,在impdp的時候有一個SQLFILE引數,可以生成所有的ddl,這也包括所有的create index語句,但這個方法需要有expdp檔案,另外需要在所有的ddl中選出相應的create index語句,相對以上方法較為複雜。

 

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

相關文章