Linux Oracle 数据迁移实用指南
一、迁移方式速览与选型
- Data Pump 逻辑迁移(expdp/impdp):适合跨版本、跨平台、跨字符集的灵活迁移;支持按schema/表空间/全库导出导入,操作简便,停机时间短(导出期间业务可继续写入,导入阶段需停写或切换)。
- RMAN 物理迁移:同平台或跨平台均可;同平台停机最短(可接近零停机),跨平台需满足**字节序(ENDIAN_FORMAT)**一致;支持整库、数据文件、归档日志的备份与恢复。
- GoldenGate / Data Guard:面向实时/近实时迁移与双活,适合对停机窗口要求极严、需持续同步的场景。
- XTTS 跨平台表空间传输:适合TB 级大库、跨平台(如 Unix→Linux)迁移,支持增量同步,复杂度较高。
- 选型建议:中小规模、结构变化多→优先 Data Pump;同平台大库、追求最短停机→RMAN;跨平台大库→XTTS;需最小化停机且持续同步→GoldenGate/Data Guard。
二、Data Pump 迁移步骤(expdp/impdp)
- 前置准备
- 切换 oracle 用户,创建操作系统目录并赋权;在库内创建 Directory 对象并授权给执行用户。
- 示例:
- mkdir -p /u01/app/oracle/dump
- chown oracle:dba /u01/app/oracle/dump
- sqlplus / as sysdba
- CREATE DIRECTORY dump_dir AS ‘/u01/app/oracle/dump’;
- GRANT READ, WRITE ON DIRECTORY dump_dir TO mig_user;
- 源库导出
- 建议用具备 DBA 权限且非 SYS 的账号;导出命令在 OS 命令行执行(非 SQL*Plus)。
- 示例:
- expdp ‘mig_user/“P@ssw0rd”’@SID DIRECTORY=dump_dir DUMPFILE=exp_20251224.dmp LOGFILE=exp_20251224.log SCHEMAS=schema1,schema2 PARALLEL=4
- 传输文件
- scp /u01/app/oracle/dump/exp_20251224.dmp oracle@target:/u01/app/oracle/dump/
- 目标库导入
- 创建同名 Directory 并授权;必要时做重映射(用户/表空间)。
- 示例:
- impdp ‘mig_user/“P@ssw0rd”’@NEWSID DIRECTORY=dump_dir DUMPFILE=exp_20251224.dmp LOGFILE=imp_20251224.log REMAP_SCHEMA=schema1:newschema1 REMAP_TABLESPACE=users:users_new TABLE_EXISTS_ACTION=REPLACE PARALLEL=4
- 常用参数与权限要点
- TABLE_EXISTS_ACTION:SKIP/APPEND/REPLACE/TRUNCATE(导入时表已存在的处理策略)。
- 做 REMAP_SCHEMA/REMAP_TABLESPACE 需更高权限:如 IMP_FULL_DATABASE。
- 常见报错速解:
- ORA-39087:Directory 无效→检查 OS 目录存在且对执行用户 READ/WRITE。
- ORA-31631/ORA-39122:权限不足→授予 IMP_FULL_DATABASE 或相应权限。
- ORA-01031:对象创建权限不足→用 SYSTEM 或具备相应权限的账号执行导入。
三、RMAN 迁移步骤(物理迁移)
- 同平台整库迁移(停机最短)
- 源库备份:
- rman target /
- RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
- RMAN> BACKUP CURRENT CONTROLFILE FORMAT ‘/u01/backup/ctl_%U’;
- RMAN> BACKUP SPFILE FORMAT ‘/u01/backup/spfile_%U’;
- 目标端准备:安装同版本软件,创建必要目录;拷贝备份集与控制文件/参数文件。
- 目标端恢复:
- RMAN> STARTUP NOMOUNT;
- RMAN> RESTORE SPFILE FROM ‘/u01/backup/spfile_%U’;
- RMAN> STARTUP FORCE NOMOUNT;
- RMAN> RESTORE CONTROLFILE FROM ‘/u01/backup/ctl_%U’;
- RMAN> ALTER DATABASE MOUNT;
- RMAN> RESTORE DATABASE;
- RMAN> RECOVER DATABASE;
- RMAN> ALTER DATABASE OPEN RESETLOGS;
- 跨平台迁移要点
- 必须满足 ENDIAN_FORMAT 一致(查询 V$TRANSPORTABLE_PLATFORM);否则 RMAN 的普通跨平台恢复受限。
- 10g 场景常用 RMAN Convert Database 生成目标平台脚本与转换后数据文件,再在目标端执行脚本建库与导入。
- 11g 起支持更多平台组合,但仍受 ENDIAN 限制;跨平台通常无法依赖常规 RECOVER DATABASE 应用归档,需要按 Convert 流程或采用 XTTS/Data Pump 等方案。
四、进阶方案与注意事项
- XTTS 跨平台表空间传输(大库优选)
- 适用:从 Unix/Linux 到 Linux 的 TB 级迁移,支持增量同步,降低停机窗口。
- 思路:准备可传输表空间集→导出元数据→在目标端转换数据文件→多次增量→最后一次增量后短暂停写→导入元数据→校验。
- GoldenGate / Data Guard(近零停机)
- 搭建复制链路,完成初始化全量后进行持续同步;切换窗口短,适合 7×24 业务。
- 通用检查清单
- 兼容性:源/目标 Oracle 版本、字符集(NLS_CHARACTERSET/NLS_NCHAR_CHARACTERSET)、ENDIAN_FORMAT、时间时区。
- 对象与权限:用户、角色、同义词、dblink、目录对象、Profile、默认表空间、配额。
- 存储与路径:数据文件、归档、闪回区、审计目录在目标端预先规划;必要时用 DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT 或 RMAN SET NEWNAME。
- 网络与传输:带宽、稳定性;大文件建议 并行与校验(如 md5/sha256)。
- 验证:行数/校验和、无效对象、失效对象编译、JOB/物化视图刷新、应用端连通性与回归测试。