首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 表空間遷移實戰:利用 EXP/IMP 重組表空間無需刪除重建

     編輯:Oracle 資料庫相關知識

場景

需將用戶 OA 所有表從表空間 A 遷移至 B,且表已含大量資料,傳統「刪表→重建」需備份/還原資料,耗時風險大。

EXP/IMP 遷移步驟 (Oracle 9i Linux 實測)

  1. 導出:exp oa/pwd@server FILE=/d/oa.dmp LOG=/d/oa.log
  2. 刪除原表(SQL*Plus 批次產生腳本):
    SET HEAD OFF
    SPOOL drop_tabs.sql
    SELECT 'DROP TABLE '||table_name||';' FROM user_tables;
    SPOOL OFF
    @drop_tabs.sql
  3. 導入結構定義 (INDEXFILE):
    imp oa/pwd@server FULL=Y FILE=/d/oa.dmp INDEXFILE=/d/struct.sql LOG=/d/imp.log
    編輯 struct.sql:
    • 移除所有 CREATE TABLE 註釋符號。
    • 將表空間名 A 批次替換為 B。
    • 為所有 CREATE INDEX 加上註釋。
    執行 @struct.sql 建立新表空間為 B 的空表。
  4. 導入資料 (IGNORE=Y, INDEXES=N):
    imp oa/pwd@server FULL=Y FILE=/d/oa.dmp IGNORE=Y INDEXES=N LOG=/d/imp2.log
    IGNORE=Y 忽略「表已存在」錯誤,資料直接導入步驟 3 建立的表。
  5. 建立索引:再次編輯 struct.sql,註釋 CREATE TABLE、取消註釋 CREATE INDEX,執行完成遷移。

優勢總結

  • 資料零停機(導出期間可讀,遷移期間短暫鎖表)。
  • 避免大量資料備份/還原,僅導出/導入一次。
  • 可選擇性遷移部分表(導出/導入指定 TABLES=...)。

注意事項

  • 導出前確認無長時間交易,必要時設 CONSISTENT=Y。
  • 目標表空間 B 需預先建立且配額足夠。
  • 約束條件 (PK/FK/Check) 會隨資料導入自動建立,索引須步驟 5 手動建立。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved