| 條件 | 驗證命令 | 不符合後果 |
|---|---|---|
| 字符集一致 | SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER IN ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET'); | 導入報錯/數據亂碼 |
| 目標庫無同名表空間 | SELECT 1 FROM dba_tablespaces WHERE tablespace_name = 'EXAMPLE'; | 導入失敗 ORA-29341 |
| 塊大小一致 | SHOW PARAMETER DB_BLOCK_SIZE | 不支援跨塊大小傳輸 |
| 自包含對象集 | EXEC DBMS_TTS.TRANSPORT_SET_CHECK('EXAMPLE', TRUE); SELECT * FROM TRANSPORT_SET_VIOLATIONS; | 導入缺失依賴對象 |
| 平台兼容/Endian一致 | SELECT * FROM V$TRANSPORTABLE_PLATFORM; | 需RMAN CONVERT轉換 |
ALTER TABLESPACE example READ ONLY;
CONNECT SYS/manager AS SYSDBA
EXEC DBMS_TTS.TRANSPORT_SET_CHECK('EXAMPLE', TRUE);
SELECT * FROM TRANSPORT_SET_VIOLATIONS; -- 必須無記錄
$ expdp system/manager DIRECTORY=dp_dir DUMPFILE=example_tts.dmp \
TRANSPORT_TABLESPACES=EXAMPLE TRANSPORT_FULL_CHECK=Y LOGFILE=exp_tts.log
輸出關鍵日誌:
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
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": ...
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
. . exported "REGIONS" 0 rows
. . exported "COUNTRIES" 0 rows
... (僅導出元數據,無數據行)
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at ...
# 數據文件(OS級復制,保持一致性)
$ scp /u01/oradata/SRC/example01.dbf target:/u01/oradata/TGT/
$ scp /u01/oradata/SRC/example02.dbf target:/u01/oradata/TGT/
# DMP文件
$ scp $DP_DIR/example_tts.dmp target:$DP_DIR/
CREATE USER example_owner IDENTIFIED BY "Ex@mpl3_Own3r"
DEFAULT TABLESPACE example
TEMPORARY TABLESPACE temp;
$ impdp system/manager DIRECTORY=dp_dir DUMPFILE=example_tts.dmp \
TRANSPORT_DATAFILES='/u01/oradata/TGT/example01.dbf','/u01/oradata/TGT/example02.dbf' \
REMAP_SCHEMA=EXAMPLE_OWNER:EXAMPLE_OWNER \
LOGFILE=imp_tts.log
-- 導入成功後
ALTER TABLESPACE EXAMPLE READ WRITE;
GRANT CREATE SESSION, RESOURCE TO example_owner; -- 按需授權
# 源庫 RMAN 轉換
RMAN TARGET /
CONVERT TABLESPACE EXAMPLE
TO PLATFORM 'Microsoft Windows IA (32-bit)'
DB_FILE_NAME_CONVERT '/u01/oradata/SRC', '/tmp/tts_conv'
FORMAT '/tmp/tts_conv/%U';
# 將轉換後文件傳輸至目標庫對應路徑,後續步驟相同
SELECT * FROM V$TRANSACTION WHERE STATUS='ACTIVE'; 等待提交/回滾。IMPDP REMAP_TABLESPACE=EXAMPLE:NEW_EXAMPLE 支持重命名。SELECT COUNT(*) FROM example_owner.key_table; 對比源庫行數。#!/bin/bash
# tts_migrate.sh SOURCE_SID TARGET_SID TABLESPACE_NAME
# 1. 參數校驗
# 2. 源庫 ONLY READ + 校驗 + EXPDP
# 3. 並行 SCP 數據文件 + DMP
# 4. 目標庫 CREATE USER + IMPDP + READ WRITE
# 5. 驗證行數 + 索引狀態 + 约束狀態
# 6. 郵件通知結果
TTS是大表空間遷移的「傳送門」。標準化流程:只讀 → 校驗 → 導出元數據 → 文件傳輸 → 導入元數據 → 讀寫。將前置檢查、RMAN轉換(跨平台)、驗證腳本封裝為Ansible Playbook或Shell庫,實現一鍵遷移。