Ubuntu系统下的Oracle数据库迁移方案

一 方案总览与选择
- 迁移方式对比与适用场景如下:
- 迁移前务必完成:全量备份、版本与**字符集(如 AL32UTF8)**一致性检查、目标端实例与目录准备、网络与权限打通。
二 标准流程与关键命令
Data Pump 推荐流程
- 源端
- 创建目录对象并赋权
- SQL> CREATE OR REPLACE DIRECTORY tmpDir AS ‘/home/oracle/export_temp’;
- SQL> GRANT READ, WRITE ON DIRECTORY tmpDir TO ;
- 导出(示例按 Schema)
- expdp /@//:/ SCHEMAS= DIRECTORY=tmpDir DUMPFILE=export_ubuntu.dmp LOGFILE=expdp_ubuntu.log PARALLEL=4
- 创建目录对象并赋权
- 传输
- scp -P 22 /home/oracle/export_temp/export_ubuntu.dmp oracle@192.168.1.101:/home/oracle/import_temp/
- 目标端
- 创建同名目录对象并赋权
- SQL> CREATE OR REPLACE DIRECTORY tmpDir AS ‘/home/oracle/import_temp’;
- SQL> GRANT READ, WRITE ON DIRECTORY tmpDir TO ;
- 导入(示例含映射)
- impdp /@//:/ DIRECTORY=tmpDir DUMPFILE=export_ubuntu.dmp LOGFILE=impdp_ubuntu.log REMAP_SCHEMA=
: REMAP_TABLESPACE= : PARALLEL=4
- impdp /@//:/ DIRECTORY=tmpDir DUMPFILE=export_ubuntu.dmp LOGFILE=impdp_ubuntu.log REMAP_SCHEMA=
- 创建同名目录对象并赋权
- 提示:大数据量可按表/分区拆分多 DMP 并行导入;必要时先导入结构再导入数据。
- 源端
RMAN跨平台传输与转换的流程究竟是怎样的呢?
- 源端
- 建议开启归档并做一致性快照
- SQL> SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
- RMAN> BACKUP DATABASE FORMAT ‘/home/oracle/backup/full_%U.bkp’;
- RMAN> BACKUP CURRENT CONTROLFILE FORMAT ‘/home/oracle/backup/ctrl_%U.bkp’;
- 转换数据库(示例)
- RMAN> CONVERT DATABASE NEW DATABASE ‘ubuntu_target’ TRANSPORT SCRIPT ‘/home/oracle/convert/crdb.sql’ FORMAT ‘/home/oracle/convert/%U’;
- 建议开启归档并做一致性快照
- 目标端
- 将备份与脚本传输至目标;按脚本重建控制文件并恢复
- sqlplus / as sysdba @/home/oracle/convert/crdb.sql
- RMAN> STARTUP NOMOUNT; RESTORE DATABASE; RECOVER DATABASE; ALTER DATABASE OPEN RESETLOGS;
- 将备份与脚本传输至目标;按脚本重建控制文件并恢复
- 提示:跨平台需确认V$TRANSPORTABLE_PLATFORM支持;必要时按平台调整ENDIAN_FORMAT与数据文件路径。
- 源端
直接拷贝数据文件(冷迁移)
- 源端
- 停库并拷贝
- SQL> SHUTDOWN IMMEDIATE;
- rsync -a vz $ORACLE_BASE/oradata/ oracle@192.168.1.101:$ORACLE_BASE/oradata/
- 停库并拷贝
- 目标端
- 设置 ORACLE_SID,启动到 MOUNT 后打开
- export ORACLE_SID=ORCL
- sqlplus / as sysdba
- SQL> STARTUP MOUNT; ALTER DATABASE OPEN;
- 设置 ORACLE_SID,启动到 MOUNT 后打开
- 限制:仅限同版本、同平台、同字节序;路径与参数需一致或按控制文件调整。
- 源端
三 迁移前后验证与切换
- 数据一致性
- 对比关键表的COUNT(*)、主键/唯一键、校验和;抽样查询业务关键数据;必要时用 Data Pump 的INCLUDE/EXCLUDE做补迁。
- 应用与权限
- 更新应用TNS/连接串与连接池;复核用户/角色/权限、同义词、dblink、定时任务(DBMS_JOB/DBMS_SCHEDULER)。
- 性能与健康
- 收集 AWR/ASH 报告,检查Top SQL、等待事件、I/O;按需重建索引、收集统计信息(DBMS_STATS)。
- 切换策略
- 建议按“双写→只读→切换→回滚预案”执行;若需近零停机,可用 Data Pump + DBLINK 做增量同步后一次性切换。
四 常见问题与排错要点
- 字符集不一致
- 目标库创建时指定与源库一致的字符集(如 AL32UTF8);若必须转换,先评估对应用与数据的影响。
- 目录对象与权限
- 导入失败优先检查 DIRECTORY 是否存在、Oracle 目录与操作系统路径是否一致、用户是否具备READ/WRITE权限。
- 表空间/用户不存在
- 导入前在目标端预建表空间/用户,或使用 REMAP_SCHEMA/REMAP_TABLESPACE 映射。
- 版本/平台不兼容
- 跨平台优先选择 RMAN CONVERT DATABASE;跨小版本优先 Data Pump;避免直接拷贝。
- 归档与备份
- RMAN 转换前确保归档模式开启并有全备与控制文件备份,以便回滚与恢复。