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

Oracle IMP 導入指定表空間三大法:INDEXFILE 修改、配額控制與 TOAD 重構

     編輯:Oracle 資料庫相關知識

問題本質

IMP 默認將對象導入原導出時所在表空間,無參數直接指定目標表空間。需通過間接手段實現遷移。

方法一:INDEXFILE 參數生成腳本 → 修改 → 執行

  1. IMP user/pwd FILE=exp.dmp INDEXFILE=idx.sql FULL=Y → 生成創建索引/約束的 SQL 腳本,不導入數據。
  2. 編輯 idx.sql,將 TABLESPACE old_ts 替換為 TABLESPACE new_ts。
  3. IMP user/pwd FILE=exp.dmp INDEXES=N FULL=Y → 導入除索引外所有對象(表、數據、視圖等)。
  4. 在 SQL*Plus 執行 @idx.sql → 在新表空間創建索引/約束。

適用:需精確控制索引、主鍵、外鍵表空間的場景。

方法二:用戶配額控制強制導入默認表空間

  1. 撤銷無限制表空間權限:REVOKE UNLIMITED TABLESPACE FROM target_user;
  2. 移除用戶在源表空間的配額:ALTER USER target_user QUOTA 0 ON source_ts;
  3. 設置目標表空間為默認並授予配額:ALTER USER target_user DEFAULT TABLESPACE new_ts QUOTA UNLIMITED ON new_ts;
  4. 執行 IMP → 數據無法寫入源表空間(配額 0),被迫寫入默認表空間 new_ts。

注意:若用戶擁有 UNLIMITED TABLESPACE 系統權限,配額限制失效,必須先撤銷。

方法三:TOAD Rebuild Multi Objects 工具

  1. 先正常 IMP 導入(對象落在舊表空間)。
  2. TOAD → Database → Rebuild Multi Objects → 選中需遷移對象 → 指定目標表空間 → 執行重構。
  3. TOAD 會自動生成 ALTER TABLE MOVE、ALTER INDEX REBUILD 等 DDL,處理依賴關係。

優勢:圖形化、批量、支援約束/觸發器/權限同步遷移,適合事後補救。

選型建議

  • 全新遷移、追求乾淨 → 方法一(索引分離)或方法二(配額)。
  • 已導入、需快速調整 → 方法三(TOAD)。
  • 大表遷移 → 配合 PARALLEL、NOLOGGING 加速 MOVE/REBUILD。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved