oracle表空間轉移
--查看表空間下的表
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表空間轉移