convert tablespace 必须在源库只读状态下执行,因rman需读取稳定元数据;to platform值须与v$transportable_platform中platform_name完全一致;备份集方式比镜像副本更适合跨主机传输;目标端转换需用db_file_name_convert显式映射路径。

CONVERT TABLESPACE 必须在源库只读状态下执行
表空间传输不是“拷完就完”,CONVERT TABLESPACE 命令依赖数据字典中稳定的元数据(如段头块位置、文件编号、块大小),而这些信息只有在 ALTER TABLESPACE ... READ ONLY 后才被 RMAN 安全读取。如果表空间仍为读写状态,RMAN 会静默跳过关键校验,后续在目标端可能报 ORA-19566(超出损坏阈值)或 ORA-01122(文件头校验失败)。
实操要点:
- 先执行
exec dbms_tts.transport_set_check('TSP_NAME', TRUE),检查TRANSPORT_SET_VIOLATIONS视图是否为空; - 再执行
ALTER TABLESPACE tsp_name READ ONLY,不能跳过这步直接进 RMAN; - 若应用连接未断开,
READ ONLY会卡住或报ORA-01126,需提前 kill 相关 session; - 转换完成后可立即切回读写:
ALTER TABLESPACE tsp_name READ WRITE(仅限源库)。
TO PLATFORM 值必须与 V$TRANSPORTABLE_PLATFORM 完全一致
TO PLATFORM 不是操作系统名称缩写,而是 V$TRANSPORTABLE_PLATFORM 中 PLATFORM_NAME 列的**完整字符串**,包括空格、括号、连字符和大小写。写错一个字符(比如把 Linux x86 64-bit 写成 Linux x86_64 或 linux x8664-bit),RMAN 就会报 RMAN-06004 或静默生成无效文件。
查准方法:
- 在源库执行:
SELECT PLATFORM_NAME FROM V$TRANSPORTABLE_PLATFORM WHERE ENDIAN_FORMAT = (SELECT ENDIAN_FORMAT FROM V$DATABASE); - 目标平台必须出现在该结果集中;否则 Oracle 明确不支持该组合,别试了;
- 常见合法值示例:
Linux x86 64-bit、Microsoft Windows x64、AIX-Based Systems (64-bit); - 命令中必须用单引号包裹,且前后无空格:
TO PLATFORM 'Linux x86 64-bit'。
备份集方式比镜像副本更适合跨主机传输
用 BACKUP ... TO PLATFORM 生成备份集,比 CONVERT TABLESPACE 生成镜像副本更稳妥:前者自动调用 Data Pump 导出元数据(TRANSPORT_EXP_*),打包表结构、权限、统计信息等,且支持压缩与分片;后者只转数据文件,元数据需手动 expdp/impdp,容易漏对象或权限。
典型命令流程:
- 在源库 RMAN 中运行:
BACKUP TO PLATFORM 'Microsoft Windows x64' FORMAT '/tmp/tsp_win_%U' DATAPUMP FORMAT '/tmp/tsp_meta_%U' TABLESPACE tsp_test1; - 该命令会同时生成:加密/压缩的备份集(.bkp)、Data Pump 元数据导出文件(.dmp)、以及 transport script(.sql);
- 传输时只需拷贝这三个产物到目标主机,无需搬运原始数据文件;
- 目标端用
RESTORE TRANSPORTABLE TABLESPACE+IMPDP即可完成导入。
目标端 CONVERT DATAFILE 的路径映射极易出错
如果选择在目标端做转换(而非源端),必须用 DB_FILE_NAME_CONVERT 显式指定路径重映射,否则 RMAN 会尝试往源路径写文件,导致 ORA-27037(无法获取文件状态)或权限拒绝。
正确写法示例:
RMAN> CONVERT DATAFILE '/tmp/src_tbsp/fin01.dbf', '/tmp/src_tbsp/fin02.dbf' FROM PLATFORM 'Linux x86 64-bit' DB_FILE_NAME_CONVERT '/tmp/src_tbsp/', '/u01/oradata/ORCL/tbs_fin/';
注意:
-
DB_FILE_NAME_CONVERT是成对出现的,每组两个路径,中间用逗号分隔; - 源路径必须完全匹配备份集中记录的路径(可通过
LIST BACKUP OF TABLESPACE tsp_name查看); - 目标路径目录必须已存在且 Oracle 进程有写权限;
- 转换后文件名默认不变,但归属路径已按映射规则重定向。
IMPDP 在最后一步失败。别省略 dbms_tts.transport_set_check 和 dbms_tdb.check_db,它们返回的每一行提示,都是你避免凌晨三点重启数据库的依据。











