可傳輸表空間(TTS)是跨平台、跨版本遷移的利器,但自包含性檢查是成敗關鍵。本文詳細解析四大違規場景、檢測 SQL、完整操作流程,助您零失誤完成表空間遷移。
| # | 違規場景 | 說明 | 後果 |
|---|---|---|---|
| 1 | 索引在傳輸集,表不在 | 反向不違規(表在、索引不在僅導致目標庫索引缺失) | 導入失敗 |
| 2 | 分區表僅部分分區在傳輸集 | 分區表要么全在,要么全不在 | 導入失敗 |
| 3 | 引用完整性約束指向表不在傳輸集 | 若不傳輸該約束則無關 | 導入失敗 |
| 4 | LOB 列不在傳輸集而表在 | LOB 必須與表同遷移 | 導入失敗 |
1. 查看表空間包含的 XML 相關對象
SELECT DISTINCT p.tablespace_name
FROM dba_tablespaces p, dba_xml_tables x, dba_users u, all_all_tables t
WHERE t.table_name = x.table_name
AND t.tablespace_name = p.tablespace_name
AND x.owner = u.username;
2. 官方自包含檢查包(10g+)
EXEC sys.dbms_tts.transport_set_check('tablespace_name', TRUE);
SELECT * FROM sys.transport_set_violations;
返回行即為違規詳情,逐條整改直至查無記錄。
ALTER TABLESPACE app_data READ ONLY; / app_idxHOST EXP USERID='''sys/pwd as sysdba''' TRANSPORT_TABLESPACE=Y \
TABLESPACES=(app_data, app_idx) FILE=tts.dmp
ALTER TABLESPACE ... READ WRITE;IMP FILE=tts.dmp USERID="sys/pwd as sysdba" \
TRANSPORT_TABLESPACE=Y \
DATAFILES=('c:\app_data.dbf','c:\app_idx.dbf') \
TABLESPACES=app_data,app_idx TTS_OWNERS=hr,oe
ALTER TABLESPACE ... READ WRITE;dbms_tts 包,需人工核對RMAN CONVERT TABLESPACE 或 CONVERT DATAFILE