效能或管理需求常要求將表移至新表空間。傳統刪除重建法在大量資料下需備份還原,耗時風險大。本文示範利用匯出/匯入(EXP/IMP)重組表空間,以用戶 db_zgxt 從表空間 A 遷移至 B 為例(Oracle 8.0.5 NT 環境)。
EXP80 OWNER=db_zgxt FILE=Exp0326.DMP LOG=Exp0326.LOG
系統提示輸入帳密後,將全表匯出至 DMP 檔。
批次產生 DROP TABLE 指令:
SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables;
在 SQL*Plus 執行輸出腳本刪除所有表。
IMP80 FULL=Y FILE=Exp0326.DMP INDEXFILE=db_zgxt.SQL LOG=Imp0326_1.LOG
INDEXFILE 參數將 CREATE TABLE/CREATE INDEX 寫入 SQL 檔(建表語句被註解)。編輯該檔:
在 SQL*Plus 執行腳本,表即在新表空間建立完成。
IMP80 FULL=Y INDEXES=N FILE=Exp0326.DMP IGNORE=Y LOG=Imp0326_2.LOG
INDEXES=N:不建立索引IGNORE=Y:忽略「表已存在」錯誤,直接導入資料再次編輯 db_zgxt.SQL:註解建表語句,移除建索引語句註解,執行腳本完成索引建立。
至此,db_zgxt 所有表已成功從表空間 A 遷移至 B,全程無需大量資料備份還原,大幅縮短維護窗口。