在上一篇文章中,我們詳細介紹了 Oracle 表空間的建立操作。本文將深入探討 Oracle 可傳輸表空間(Transportable Tablespace)功能,這是一項極具實用價值的特性,能夠將表空間及其數據文件高效地從一個資料庫實例遷移至另一個實例,操作便捷且速度極快。然而,使用此功能必須滿足特定的前提條件,否則將無法順利執行。
在嘗試傳輸表空間之前,必須確認源端與目標端環境滿足以下要求:
DB_BLOCK_SIZE 參數值必須相等。若不相等,則要求資料庫版本相容於 Oracle 9.0 以上版本。以下以 EXAMPLE 表空間為例,演示完整的傳輸流程:
首先必須將待傳輸的表空間設為 READ ONLY,確保數據在遷移過程中不被修改。
SQL> ALTER TABLESPACE example READ ONLY;
Tablespace altered.
使用 DBMS_TTS.TRANSPORT_SET_CHECK 程序檢查表空間是否符合傳輸條件(如是否包含跨表空間的物件依賴)。
SQL> CONNECT sys/password AS SYSDBA
Connected.
SQL> EXECUTE dbms_tts.transport_set_check('EXAMPLE', TRUE);
PL/SQL procedure successfully completed.
檢查 TRANSPORT_SET_VIOLATIONS 視圖。若查詢結果有記錄,表示存在違規物件(如索引與表分置於不同表空間、外鍵約束跨表空間等),必須先將這些物件移至其他表空間或處理依賴關係,方可繼續。
SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;
VIOLATIONS
--------------------------------------------------------------------------------
(若無資料列顯示,則表示通過檢查)
使用 Data Pump Export (expdp) 或傳統 Export (exp) 匯出表空間的中繼資料(結構定義),不包含實際數據列。以下為傳統 Export 的輸出範例:
Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set.
Note: No table data (rows) exported. Exporting transportable tablespace metadata...
. exporting cluster definitions
. exporting table definitions
. exporting table REGIONS
. exporting table COUNTRIES
. exporting table LOCATIONS
... (其餘表定義省略) ...
. exporting referential integrity constraints
. exporting triggers
Export terminated successfully without warnings.
將產生的 Dump 檔案與表空間對應的數據文件(.dbf)複製到目標伺服器,然後在目標端使用 Data Pump Import (impdp) 或 imp 匯入中繼資料,最後將表空間設為 READ WRITE 即可完成遷移。
可傳輸表空間是大型資料庫跨環境遷移、數據倉庫載入、發布訂閱等場景的利器。掌握其前提條件與標準流程,能讓 DBA 在處理 TB 級數據遷移時事半功倍。關鍵在於:嚴格驗證環境一致性、確保表空間自包含、妥善管理唯讀狀態切換。