首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 表空間遷移五步法:EXP/IMP 重組大量資料表空間零停機風險實戰

     編輯:Oracle 資料庫基礎

將大量資料表從表空間 A 遷移至 B,傳統 Drop/Recreate 需備份還原大量資料,耗時風險大。利用 EXP/IMP 配合 INDEXFILE 參數,可在保留資料完整性前提下完成表空間重組。本文以 db_zgxt Schema 為例,演示五步驟零資料遺失遷移法。

場景

  • Schema:db_zgxt
  • 來源表空間:A
  • 目標表空間:B
  • 環境:Oracle 8.0.5 for NT

步驟一:導出 Schema 所有物件

# DOS 控制台
EXP80 OWNER=db_zgxt FILE=Exp0326.DMP LOG=Exp0326.LOG

系統提示輸入帳密,完成後產生 Exp0326.dmp、Exp0326.log。

步驟二:刪除 Schema 所有表

-- SQL*Plus 批次產生 DROP 腳本
SELECT 'DROP TABLE ' || table_name || ';' FROM user_tables;
-- 複製輸出結果執行

步驟三:INDEXFILE 產生建表腳本並修改表空間

# 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:

  1. 移除所有 CREATE TABLE 註解
  2. 將表空間名稱 A 全域取代為 B
  3. 為所有 CREATE INDEX 加上註解

執行腳本 → 表在表空間 B 建立完成。

步驟四:導入資料 (跳過索引、忽略物件存在)

IMP80 FULL=Y INDEXES=N FILE=Exp0326.DMP IGNORE=Y LOG=Imp0326_2.LOG
  • INDEXES=N:不建立索引,加速資料導入
  • IGNORE=Y:忽略「表已存在」錯誤,直接載入資料
  • 資料與約束(Non-Null、Check)導入新表

步驟五:建立索引

  1. 重新編輯 db_zgxt.sql:註解 CREATE TABLE、取消註解 CREATE INDEX
  2. 執行腳本 → 索引在表空間 B 建立(索引預設與表同表空間,若需分離需腳本中指定 TABLESPACE 子句)

關鍵參數速查

參數作用
OWNER導出指定 Schema
INDEXFILE產生 DDL 腳本而非實際導入
INDEXES=N導入時跳過索引
IGNORE=Y忽略物件已存在錯誤
FULL=Y完整導入/導出

現代化替代方案

  • Data Pump (expdp/impdp):REMAP_TABLESPACE=A:B 單參數完成,支援並行、網路模式
  • ALTER TABLE MOVE TABLESPACE B:12c+ 支援 ONLINE MOVE,零停機
  • DBMS_REDEFINITION:線上重定義,適用極大表

結語

EXP/IMP 五步法 = 導出 → 刪除 → DDL 腳本改表空間 → 導入資料 → 建索引。核心技巧在 INDEXFILE 產生可編輯 DDL。現代環境優先用 REMAP_TABLESPACE 或 ONLINE MOVE,但理解傳統流程有助於掌握遷移本質:物理儲存層與邏輯結構層分離。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved