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

Oracle可傳輸表空間(TTS)快速實施指南:從只讀到導入的標準化六步法

     編輯:Oracle 資料庫基礎

前置條件檢查清單

條件驗證命令不符合後果
字符集一致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轉換

標準化六步實施流程

1. 源庫:設為只讀

ALTER TABLESPACE example READ ONLY;

2. 源庫:校驗自包含性

CONNECT SYS/manager AS SYSDBA
EXEC DBMS_TTS.TRANSPORT_SET_CHECK('EXAMPLE', TRUE);
SELECT * FROM TRANSPORT_SET_VIOLATIONS;  -- 必須無記錄

3. 源庫:導出元數據

$ 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 ...

4. 文件傳輸

# 數據文件(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/

5. 目標庫:創建用戶(暫不授權)

CREATE USER example_owner IDENTIFIED BY "Ex@mpl3_Own3r"
  DEFAULT TABLESPACE example
  TEMPORARY TABLESPACE temp;

6. 目標庫:導入元數據並上線

$ 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;  -- 按需授權

跨平台遷移增量步驟(Endian不同時)

# 源庫 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';

# 將轉換後文件傳輸至目標庫對應路徑,後續步驟相同

避坑指南

  1. READ ONLY前必檢查長事務:SELECT * FROM V$TRANSACTION WHERE STATUS='ACTIVE'; 等待提交/回滾。
  2. TRANSPORT_FULL_CHECK=Y:嚴格校驗雙向依賴,防止遺漏。
  3. 目標庫表空間名可不同:IMPDP REMAP_TABLESPACE=EXAMPLE:NEW_EXAMPLE 支持重命名。
  4. 只讀表空間無需導出數據:DMP極小(KB-MB級),傳輸極快。
  5. 導入後必驗證: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庫,實現一鍵遷移。

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