TTS = 元數據導出 + 數據文件物理復制。.dmp跨平台通用,數據文件需同Endian或RMANCONVERT轉換。速度優勢:僅移動元數據(KB-MB),數據文件OS級復制/存儲快照克隆。
NLS_CHARACTERSET、NLS_NCHAR_CHARACTERSET)V$TRANSPORTABLE_PLATFORM確認ENDIAN_FORMAT一致或支援CONVERTSQLPLUS "/ 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;
EXEC SYS.DBMS_TTS.TRANSPORT_SET_CHECK('HEXIONG', TRUE);
SELECT * FROM SYS.TRANSPORT_SET_VIOLATIONS; -- 必須 NO ROWS SELECTED
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
$ RSYNC -AVZ --PROGRESS /U01/ORADATA/PROD/HEXIONG.DBF TARGET:/U01/ORADATA/PROD/
$ SCP $DP_DIR/HEXIONG_TTS.DMP TARGET:$DP_DIR/
$ 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;
# 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 指向轉換後文件
- 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 }}"
TRANSPORT_TABLESPACES不宜超過5-10個,避免EXPDP/IMPDP進程記憶體溢出。V$TRANSACTION確認無活躍事務再READ ONLY。IMPDP隱式創建用戶導致密碼/配額不符。DBMS_STATS.GATHER_SCHEMA_STATS,避免執行計劃劣化。TTS專家級掌握點:自包含校驗門檻 + RMAN CONVERT保留文件名 + 並行傳輸 + Ansible自動化 + 統計信息重收集。將上述Playbook參數化,納入CI/CD流水線,實現「提交腳本 → 自動遷移 → 驗證通過 → 流量切換」全自動化。