1. 程式人生 > >oracle表空間轉移

oracle表空間轉移

狀態 錯誤 得到 過程 ews ner -- 表名 依次

--查看表空間下的表

select t.TABLE_NAME,T.TABLESPACE_NAME from dba_tables t where t.TABLESPACE_NAME = ‘${spacename}‘ and owner = ‘${owner}‘;

--查看表空間下的索引

select t.INDEX_NAME,T.TABLESPACE_NAME from dba_INDEXES t where t.TABLESPACE_NAME = ‘${spacename}‘ and owner = ‘${owner}‘;

上述語句owner可以不加,如果有多個用戶的情況下可以酌情使用。

--遷移表到新的表空間

select ‘ alter table ‘|| t.TABLE_NAME || ‘ move tablespace ${newspacename} ‘ from dba_tables t where t.TABLESPACE_NAME = ‘${spacename}‘ and owner = ‘${owner}‘;

--遷移索引到新的表空間

select ‘ alter index ‘ || t.INDEX_NAME || ‘ rebuild tablespace ${newspacename} ‘ from dba_INDEXES t where t.TABLESPACE_NAME = ‘${spacename}‘ and owner = ‘${owner}‘;

執行得到的結果集之後表空間遷移完成:

以上語句純手打,出現拼寫錯誤請見諒。

在實際執行過程中出現兩個異常情況:

1.數據庫索引遷移的時候有部分索引 的字段是LOB類型的,導致遷移的時候執行錯誤。

解決方案:

alter tabe ${表名} mobe LOB(${字段名稱}) STORE AS (TABLESPACE ${newspacename}); 依次執行轉移即可

2.rebuild 索引後導致索引處於unabled狀態,導出後再導出到新的數據庫會出現警告。索引不可用狀態

可以在dba_INDEXES 查詢狀態為unable的表,之後重建該索引即可。

oracle表空間轉移