將大量資料表從表空間 A 遷移至 B,傳統 Drop/Recreate 需備份還原大量資料,耗時風險大。利用 EXP/IMP 配合 INDEXFILE 參數,可在保留資料完整性前提下完成表空間重組。本文以 db_zgxt Schema 為例,演示五步驟零資料遺失遷移法。
db_zgxt# DOS 控制台
EXP80 OWNER=db_zgxt FILE=Exp0326.DMP LOG=Exp0326.LOG
系統提示輸入帳密,完成後產生 Exp0326.dmp、Exp0326.log。
-- SQL*Plus 批次產生 DROP 腳本
SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables;
-- 複製輸出結果執行
# DOS 控制台
IMP80 FULL=Y FILE=Exp0326.DMP INDEXFILE=db_zgxt.SQL LOG=Imp0326_1.LOG
db_zgxt.sql 含所有 CREATE TABLE、CREATE INDEX 陳述式CREATE TABLE 行被註解(--)編輯 db_zgxt.sql:
CREATE TABLE 註解A 全域取代為 BCREATE INDEX 加上註解執行腳本 → 表在表空間 B 建立完成。
IMP80 FULL=Y INDEXES=N FILE=Exp0326.DMP IGNORE=Y LOG=Imp0326_2.LOG
INDEXES=N:不建立索引,加速資料導入IGNORE=Y:忽略「表已存在」錯誤,直接載入資料db_zgxt.sql:註解 CREATE TABLE、取消註解 CREATE INDEXTABLESPACE 子句)| 參數 | 作用 |
|---|---|
OWNER | 導出指定 Schema |
INDEXFILE | 產生 DDL 腳本而非實際導入 |
INDEXES=N | 導入時跳過索引 |
IGNORE=Y | 忽略物件已存在錯誤 |
FULL=Y | 完整導入/導出 |
REMAP_TABLESPACE=A:B 單參數完成,支援並行、網路模式EXP/IMP 五步法 = 導出 → 刪除 → DDL 腳本改表空間 → 導入資料 → 建索引。核心技巧在 INDEXFILE 產生可編輯 DDL。現代環境優先用 REMAP_TABLESPACE 或 ONLINE MOVE,但理解傳統流程有助於掌握遷移本質:物理儲存層與邏輯結構層分離。