Linux x86_64与Windows x86_64均为小端字节序,可直接跨平台迁移;但若目标为AIX或Solaris SPARC(大端),则必须用CONVERT重写块头和字节序,否则RESTORE会报ORA-19505或ORA-19602。

必须先确认平台字节序是否兼容
Linux x86_64 和 Windows x86_64 都是 Little Endian,可直接跨平台迁移;但若目标是 AIX 或 Solaris SPARC(Big Endian),就必须用 CONVERT 重写块头和字节序。别跳过这步——直接查 V$TRANSPORTABLE_PLATFORM:
SELECT platform_name, endian_format FROM v$transportable_platform WHERE platform_name IN ('Linux x86 64-bit', 'Microsoft Windows x64');
输出必须都为 Little Endian,否则后续所有 RESTORE 都会卡在 ORA-19505 或 ORA-19602。
RMAN冷备是唯一安全起点
Windows → Linux 迁移不支持在线 RECOVER,归档日志无法跨平台解析。哪怕只差 1 秒的 redo,RECOVER DATABASE 也会报 ORA-00308 或静默失败。所以必须停库做一致性备份:
-
SHUTDOWN IMMEDIATE后STARTUP MOUNT(不能OPEN) - 执行
BACKUP AS COMPRESSED BACKUPSET DATABASE+BACKUP CURRENT CONTROLFILE - 备份中禁用快速恢复区(
ALTER SYSTEM SET db_recovery_file_dest=''),避免路径残留 Windows 格式
注意:BACKUP FOR TRANSPORT 比手动备份更稳妥——它自动打包控制文件快照和转换脚本,减少人为路径错配。
目标端还原时最常卡在控制文件和路径映射
Linux 上启动 NOMOUNT 后,第一步不是还原数据库,而是还原并校验控制文件:
RMAN> RESTORE CONTROLFILE FROM '/path/to/CONTROLFILE_BACKUP';<br>RMAN> ALTER DATABASE MOUNT;
接着立刻检查数据文件路径是否对齐:
- 用
SELECT name FROM v$datafile;看源库路径(如C:\ORADATA\ORCL\SYSTEM01.DBF) - 在 RMAN 中用
SET NEWNAME FOR DATAFILE 1 TO '+DATA/orcl/SYSTEM01.DBF';显式重定向(ASM)或TO '/u01/oradata/orcl/SYSTEM01.DBF'(FS) - 临时文件必须单独处理:
SET NEWNAME FOR TEMPFILE 1 TO '/u01/oradata/orcl/temp01.dbf';,漏掉会导致ORA-01119或实例挂起
如果控制文件里还存着 Windows 路径(比如 LOGFILE GROUP 1 'C:\...),ALTER DATABASE OPEN RESETLOGS 会失败,必须手工编辑控制文件重建语句或用 DBMS_BACKUP_RESTORE 修复。
CONVERT DATABASE 命令适合整库迁移但限制多
Oracle 12c+ 支持 CONVERT DATABASE 一键转平台,但它要求源库 OPEN READ ONLY,且不处理控制文件、密码文件、重做日志——这些全得手动补:
- 命令中
TO PLATFORM 'Linux x86 64-bit'的字符串必须与V$TRANSPORTABLE_PLATFORM完全一致(大小写、空格都不能差) -
DB_FILE_NAME_CONVERT参数要成对写,例如'C:\oradata\','/u01/oradata/',末尾斜杠不能少,否则生成的transport.sql里路径拼接出错 - 生成的 transport script 里包含
CREATE CONTROLFILE,但默认是NOARCHIVELOG模式,若源库是归档模式,需手动把RESETLOGS改成NORESETLOGS并补全日志组定义
真正容易被忽略的是:CONVERT DATABASE 不动临时表空间,目标库启动后必须手动重建 TEMP 表空间,否则任何排序操作都会报 ORA-01187。


















