批量導出創建索引的腳本

有同事要導出一個數據庫用戶下創建索引的腳本,然後拿到另外一個庫裏面去執行。很少有這樣的需求,問了一下,他們要進行數據遷移,在新的庫中要求索引單獨放在一個表空間裏面,於是就把所有的索引都刪除了,進行重建。

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

ALTER INDEX index_name rebuild tablespace tbs_name;

 

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

1 生成批量導出索引的語句

在sqlplus中運行spool create_create_index.SQLSELECT'select dbms_metadata.get_ddl(''INDEX'', ' || ''''|| INDEX_NAME||'''' || ') from dual;'FROM user_indexes ;spool off

 

2 生成創建索引的sql語句

在sqlplus中運行spool create_index.SQL@create_create_index.SQLspool off

 

得到b.sql文件中即爲創建索引的語句

3 創建索引

在sqlplus中運行@create_index.SQL

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章