温馨提示×

Ubuntu Oracle数据迁移方案

小樊
39
2025-12-28 12:43:06
栏目: 云计算

Ubuntu 上 Oracle 数据库迁移方案

一 方案总览与选择

  • 迁移方式对比与适用场景如下:
方法 适用场景 停机窗口 关键要点
Oracle Data Pump(expdp/impdp) 同版本或跨小版本、跨平台均可;以Schema/表为单位迁移 可做到接近零停机(配合DBLINK做增量) 需创建DIRECTORY对象;支持REMAP_SCHEMA/REMAP_TABLESPACE;大数据量建议并行
RMAN 跨平台传输/转换 跨平台(如 x86_64 → ARM64)、跨小版本升级 需短暂只读或停写 使用CONVERT DATABASE生成可传输脚本与数据文件;目标端按脚本重建并恢复
直接拷贝数据文件(冷备份) 同版本、同平台、同字节序 需停机 拷贝数据文件/控制文件/重做日志;目标端启动到MOUNT再打开
第三方工具(Navicat/SQL Developer) 小数据量、异构到 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=<src_schema>:<tgt_schema> REMAP_TABLESPACE=<src_ts>:<tgt_ts> PARALLEL=4
    • 提示:大数据量可按表/分区拆分多 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 -avz $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;
    • 限制:仅限同版本、同平台、同字节序;路径与参数需一致或按控制文件调整。

三 迁移前后验证与切换

  • 数据一致性
    • 对比关键表的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 转换前确保归档模式开启并有全备与控制文件备份,以便回滚与恢复。

0