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

Oracle可傳輸表空間專家進階技巧:跨平台、自包含校驗、RMAN轉換與自動化部署

     編輯:Oracle 資料庫基礎

核心機制回顧

TTS = 元數據導出 + 數據文件物理復制。.dmp跨平台通用,數據文件需同Endian或RMANCONVERT轉換。速度優勢:僅移動元數據(KB-MB),數據文件OS級復制/存儲快照克隆。

前提條件(硬性)

  1. 源/目標字符集完全一致(NLS_CHARACTERSET、NLS_NCHAR_CHARACTERSET)
  2. 目標庫無同名表空間
  3. 源/目標DB_BLOCK_SIZE相同
  4. 傳輸對象集自包含(無外部依賴:索引在別TS、外鍵引用別TS、分區表跨TS)
  5. 平台兼容:查詢V$TRANSPORTABLE_PLATFORM確認ENDIAN_FORMAT一致或支援CONVERT

Linux 9i/10g/11g/19c 統一實戰流程

1. 創建測試表空間與數據

SQLPLUS "/ AS SYSDBA"
CREATE TABLESPACE hexiong DATAFILE '/u01/oradata/PROD/hexiong.dbf' SIZE 100M;
CREATE USER hexiong IDENTIFIED BY hexiong DEFAULT TABLESPACE hexiong;
GRANT CONNECT, RESOURCE TO hexiong;
CONN hexiong/hexiong
CREATE TABLE t AS SELECT * FROM ALL_OBJECTS;

2. 自包含校驗(關鍵門檻)

EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK('HEXIONG', TRUE);
SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS;  -- 必須 NO ROWS SELECTED

3. 設為只讀 + 導出元數據

ALTER TABLESPACE HEXIONG READ ONLY;

$ EXPDP SYSTEM/MANAGER DIRECTORY=DP_DIR DUMPFILE=HEXIONG_TTS.DMP \
  TRANSPORT_TABLESPACES=HEXIONG TRANSPORT_FULL_CHECK=Y LOGFILE=EXP_TTS.LOG

4. 文件傳輸(並行加速)

$ RSYNC -AVZ --PROGRESS /U01/ORADATA/PROD/HEXIONG.DBF TARGET:/U01/ORADATA/PROD/
$ SCP $DP_DIR/HEXIONG_TTS.DMP TARGET:$DP_DIR/

5. 目標庫導入 + 上線

$ IMPDP SYSTEM/MANAGER DIRECTORY=DP_DIR DUMPFILE=HEXIONG_TTS.DMP \
  TRANSPORT_DATAFILES='/U01/ORADATA/PROD/HEXIONG.DBF' \
  REMAP_SCHEMA=HEXIONG:HEXIONG LOGFILE=IMP_TTS.LOG

ALTER TABLESPACE HEXIONG READ WRITE;
GRANT CONNECT, RESOURCE TO HEXIONG;

跨平台遷移:RMAN CONVERT 進階用法

# 1. 校驗平台兼容性
SELECT PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM;

# 2. 源庫 RMAN 轉換(保留原文件名,強烈推薦)
RMAN TARGET /
CONVERT TABLESPACE HEXIONG
  TO PLATFORM 'Microsoft Windows IA (32-bit)'
  DB_FILE_NAME_CONVERT '/U01/ORADATA/PROD', '/TMP/TTS_CONV'
  FORMAT '/TMP/TTS_CONV/%U';

# 3. 將 /TMP/TTS_CONV/ 下文件傳輸至目標 Windows 路徑
# 4. 目標庫 IMPDP 指向轉換後文件

自動化部署:Ansible Playbook 骨架

- name: Oracle TTS Migration
  hosts: oracle_src
  vars:
    tbs_list: [APP_DATA, APP_INDEX]
    target_host: oracle_tgt
  tasks:
    - name: Check self-contained
      oracle_sql:
        sql: "EXEC DBMS_TTS.TRANSPORT_SET_CHECK('{{ item }}', TRUE);"
      loop: "{{ tbs_list }}"
      register: tts_check

    - name: Fail if violations
      fail:
        msg: "Tablespace {{ item.item }} has violations"
      when: "item.stdout != 'no rows selected'"
      loop: "{{ tts_check.results }}"

    - name: Set READ ONLY
      oracle_sql:
        sql: "ALTER TABLESPACE {{ item }} READ ONLY;"
      loop: "{{ tbs_list }}"

    - name: Export metadata
      command: >
        expdp system/{{ sys_pass }}@{{ inventory_hostname }}
        DIRECTORY=DP_DIR DUMPFILE={{ item }}_TTS.DMP
        TRANSPORT_TABLESPACES={{ item }} TRANSPORT_FULL_CHECK=Y
      loop: "{{ tbs_list }}"

    - name: Sync datafiles + dmp to target
      synchronize:
        src: "{{ oracle_data_dir }}/{{ item }}.dbf"
        dest: "{{ oracle_data_dir }}/"
        mode: push
        delegate_to: "{{ target_host }}"
      loop: "{{ tbs_list }}"

    - name: Import on target
      delegate_to: "{{ target_host }}"
      command: >
        impdp system/{{ sys_pass }}@{{ target_host }}
        DIRECTORY=DP_DIR DUMPFILE={{ item }}_TTS.DMP
        TRANSPORT_DATAFILES={{ oracle_data_dir }}/{{ item }}.dbf
        REMAP_SCHEMA={{ item }}:{{ item }}
      loop: "{{ tbs_list }}"

    - name: Set READ WRITE on target
      delegate_to: "{{ target_host }}"
      oracle_sql:
        sql: "ALTER TABLESPACE {{ item }} READ WRITE;"
      loop: "{{ tbs_list }}"

專家避坑清單

  1. TRANSPORT_FULL_CHECK=Y:雙向依賴檢查,防止遺漏反向引用。
  2. 大表空間分批傳輸:單次TRANSPORT_TABLESPACES不宜超過5-10個,避免EXPDP/IMPDP進程記憶體溢出。
  3. 只讀窗口控制:業務低峰執行,監控V$TRANSACTION確認無活躍事務再READ ONLY。
  4. 目標庫用戶預創建:避免IMPDP隱式創建用戶導致密碼/配額不符。
  5. 統計信息重收集:導入後DBMS_STATS.GATHER_SCHEMA_STATS,避免執行計劃劣化。

總結

TTS專家級掌握點:自包含校驗門檻 + RMAN CONVERT保留文件名 + 並行傳輸 + Ansible自動化 + 統計信息重收集。將上述Playbook參數化,納入CI/CD流水線,實現「提交腳本 → 自動遷移 → 驗證通過 → 流量切換」全自動化。

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