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

Oracle 可傳輸表空間完整實作指南與限制說明

     編輯:Oracle 資料庫基礎

功能簡介

Oracle 可傳輸表空間 允許將一組表空間及其資料檔案從一個資料庫實例快速移動到另一個實例。相較於傳統匯出/匯入,此功能僅傳輸中繼資料,速度極快,極適合大量資料遷移、資料倉庫載入或跨平台部署。

使用限制(必須滿足)

  • 平台相容性:來源與目標平台必須相同(或支援跨平台傳輸的平台組合)。
  • 字符集一致:資料庫字符集與國家字符集必須完全相同。
  • 區塊大小相同:雙方 DB_BLOCK_SIZE 必須一致;若不一致,需相容 Oracle 9.0 以上版本並滿足特定條件。
  • 表空間唯讀:傳輸前必須將表空間設為 READ ONLY。
  • 無外鍵跨表空間引用:被傳輸表空間內的物件不能被其他表空間的外鍵引用,反之亦然。

完整操作步驟

1. 來源端:設定表空間為唯讀並檢查違規

SQL> ALTER TABLESPACE example READ ONLY;
Tablespace altered.

SQL> EXEC DBMS_TTS.TRANSPORT_SET_CHECK('EXAMPLE', TRUE);
PL/SQL procedure successfully completed.

SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
VIOLATIONS
----------
-- 若有回傳記錄,表示不符合傳輸條件,需依提示移動物件

2. 來源端:匯出表空間中繼資料

使用 Data Pump Export (expdp) 僅匯出中繼資料:

expdp system/manager \
  TRANSPORT_TABLESPACES=EXAMPLE \
  TRANSPORT_FULL_CHECK=Y \
  DIRECTORY=dpump_dir \
  DUMPFILE=exp_tts.dmp \
  LOGFILE=exp_tts.log

匯出過程中會列出所有表、索引、約束、觸發器等中繼資料,不包含資料列。

3. 複製資料檔案

使用 OS 指令(如 scp, rsync)將表空間對應的資料檔案複製到目標端相同或指定路徑。

4. 目標端:匯入中繼資料

impdp system/manager \
  TRANSPORT_TABLESPACES=EXAMPLE \
  DIRECTORY=dpump_dir \
  DUMPFILE=exp_tts.dmp \
  LOGFILE=imp_tts.log \
  TRANSPORT_DATAFILES='/u01/app/oracle/oradata/target/example01.dbf'

5. 目標端:設定表空間為讀寫

SQL> ALTER TABLESPACE example READ WRITE;

常見問題排查

  • ORA-29349:字符集不匹配,需確認 NLS_CHARACTERSET 與 NLS_NCHAR_CHARACTERSET。
  • ORA-19725:區塊大小不匹配,需建立相同區塊大小的快取或升級版本。
  • 違規檢查失敗:依 TRANSPORT_SET_VIOLATIONS 提示移動物件或調整設計。

最佳實踐建議

  1. 傳輸前完整備份來源與目標資料庫。
  2. 使用 TRANSPORT_FULL_CHECK=Y 強制檢查雙向引用完整性。
  3. 大型表空間建議使用 RMAN 備份資料檔案並利用壓縮傳輸。
  4. 記錄每一步驟的輸出日誌,便於事後審計與故障排查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved