網上搜索相關主題,90%都不可實際操作,通過實驗,終於找到了可行的辦法,發佈在這裏和大家分享。
注意:適用與oracle 10g+以上的版本。
如果目標表空間爲TS-D,源表空間爲TS-S,使用imp命令導入源表空間導出的dmp文件,會出現以下提示:
IMP-00003: 遇到 ORACLE 錯誤 959
ORA-00959: 表空間 'TS-S' 不存在
如果不知道源表空間名,可以通過上面的導入日誌發現。
下面是處理過程。
1、在目標數據庫,以system登錄後,執行
ALTER TABLESPACE TS-D RENAME TO TS-S;
2、再執行imp命令;
3、執行完成後,執行
ALTER TABLESPACE TS-S RENAME TO TS-D;
附1:單個移動表或索引到新的表空間
另附,把表或索引從一個表空間移動到另一個表空間的腳本,前提是以該表或索引的owner用戶登錄。
ALTER INDEX SYS_C007673 REBUILD TABLESPACE zjkfq;
ALTER TABLE website MOVE TABLESPACE zjkfq;
附2:批量移動表或索引到新的表空間,對於大表,速度較慢
將表批量移動到另一個表空間
1)表
執行以下sql生成批量的sql語句,控制檯結果輸出爲sql語句
select 'alter table '||table_name||' MOVE TABLESPACE ZJMZ;' from user_tables;
2)複製上一步生成的輸出(sql格式),執行即可。
將索引批量移動到另一個表空間
1)執行以下sql生成批量的sql語句,
select 'ALTER INDEX ' ||index_name || ' REBUILD TABLESPACE ZJMZ;' from user_indexes;
2)複製上一步生成的輸出(sql格式),執行即可。