温馨提示×

Oracle数据迁移至Ubuntu的步骤是什么

小樊
38
2026-01-03 09:13:04
栏目: 云计算

迁移总览与方案选择

  • 常见做法有三类:
    1. Data Pump(expdp/impdp) 逻辑迁移,适合跨平台、跨版本、只迁部分对象或做版本升级;
    2. RMAN 跨平台传输表空间/整库 物理迁移,适合停机窗口较短、版本一致或相近、追求一致性与性能的场景;
    3. GoldenGate/OGG 做持续同步与零/低停机迁移。下文给出在 Ubuntu 上使用 Data PumpRMAN 的实操步骤与要点。

方案一 Data Pump 逻辑迁移步骤

  • 源库准备
    • oracle 用户登录,创建目录对象并授权读写:
      • sqlplus / as sysdba
      • create or replace directory tmpDir as '/tempFile';
      • grant read, write on directory tmpDir to <user>;
    • 导出(示例为按用户导出,可按需改为全库/按表/按schema):
      • 全库:expdp system/password@//host:port/service full=Y directory=tmpDir dumpfile=full.dmp logfile=full.log
      • 按schema:expdp scott/tiger@//host:port/service schemas=SCOTT directory=tmpDir dumpfile=scott.dmp logfile=scott.log
      • 按表:expdp scott/tiger@//host:port/service tables=EMP,DEPT directory=tmpDir dumpfile=tabs.dmp logfile=tabs.log
  • 传输文件
    • scp -P 2222 /tempFile/*.dmp ubuntu@target_ip:/home/ubuntu/dmp/
  • 目标库准备(Ubuntu)
    • 安装并创建 Oracle 实例(与源库版本尽量一致;若不一致,导入时按兼容性处理)。
    • 创建同名目录对象并授权:
      • sqlplus / as sysdba
      • create or replace directory tmpDir as '/home/ubuntu/dmp';
      • grant read, write on directory tmpDir to <user>;
    • 导入(示例):
      • 全库:impdp system/password@//target_host:port/service full=Y directory=tmpDir dumpfile=full.dmp logfile=imp_full.log
      • 按schema:impdp scott/tiger@//target_host:port/service schemas=SCOTT directory=tmpDir dumpfile=scott.dmp logfile=imp_scott.log remap_schema=SCOTT:SCOTT_NEW
      • 按表:impdp scott/tiger@//target_host:port/service tables=EMP,DEPT directory=tmpDir dumpfile=tabs.dmp logfile=imp_tabs.log
  • 关键提示
    • 字符集建议一致(如 AL32UTF8);不一致时先评估转换影响。
    • 目标库需提前建好表空间、用户、目录、配额等;导入失败优先查 logfile
    • 若跨版本(如 11g→19c),优先用 Data Pump 并在导入时处理无效对象与统计信息。

方案二 RMAN 跨平台物理迁移步骤

  • 适用前提
    • 停机窗口可协调;源/目标端 Oracle 版本兼容;目标端为 Ubuntu(Linux x86-64)。
  • 源库操作
    • 只读或停库:
      • shutdown immediate;startup mount;alter database open read only;(跨平台传输表空间/整库常用只读)
    • RMAN 生成可传输数据文件与脚本:
      • rman target /
      • CONVERT DATABASE NEW DATABASE 'ORCL' TRANSPORT SCRIPT '/tmp/transport.sql' TO PLATFORM 'Linux x86 64-bit' FORMAT '/tmp/%U';
      • 生成的目录包含转换后的数据文件与 transport.sql(含重建控制文件语句)。
  • 传输到 Ubuntu
    • scp -r /tmp/ORCL* ubuntu@target_ip:/u01/oradata/ORCL/
  • 目标库操作(Ubuntu)
    • 安装同版本 Oracle 软件(仅软件,不建库),按 transport.sql 注释创建目录结构(如 adump、dpdump、pfile、oradata 等)。
    • 编辑 transport.sql 中的控制文件路径与数据文件路径为 Ubuntu 实际路径。
    • 若使用 SPFILE,在 pfile 中设置:
      • DB_FILE_NAME_CONVERT = ('/old/path','/u01/oradata/ORCL')
      • LOG_FILE_NAME_CONVERT = ('/old/path','/u01/oradata/ORCL')
    • 启动至 NOMOUNT 并执行脚本:
      • sqlplus / as sysdbastartup nomount pfile='/u01/app/oracle/admin/ORCL/pfile/initORCL.ora';
      • @/u01/oradata/ORCL/transport.sql
    • 打开数据库并检查:
      • alter database open resetlogs;(若 transport.sql 使用 resetlogs)
      • 校验数据文件、日志组、对象可用性。
  • 关键提示
    • 跨平台需满足 Endian 兼容;不兼容时 RMAN 会报错,需改用 Data Pump 或 TTS 逐表空间迁移。
    • 控制文件与数据文件路径在 transport.sql 中一次性调整,避免手工改错。

迁移前后检查与常见问题

  • 迁移前
    • 清点对象:用户、表空间、角色、同义词、视图、存储过程、触发器、JOB、dblink、目录对象。
    • 统计信息与无效对象:导出前收集统计信息;导入后用 utlrp.sql 编译无效对象。
    • 字符集与 NLS:两端一致优先;不一致需评估转换与显示问题。
    • 容量与路径:Ubuntu 上规划好 /u01 等目录权限(oracle:oinstall,权限 0755/0644)。
  • 迁移后
    • 数据一致性:抽样校验行数、主键/唯一约束、外键、LOB 大小;关键业务回归。
    • 性能:检查执行计划变化、索引/统计信息、SGA/PGA 参数;必要时收集统计信息并调优。
    • 备份与归档:立即做一次全备;确认 归档模式 与归档路径正确。
  • 常见报错速查
    • ORA-39001/39000/31626:目录对象不存在或无权限,检查 create directorygrant
    • ORA-02396/01031:导入用户权限不足,补齐角色与系统权限。
    • ORA-27040/19505:文件不存在或路径错误,核对 Data Pump/RMAN 中的目录与文件实际路径。

以上步骤覆盖在 Ubuntu 上使用 Data PumpRMAN 的主流迁移路径;若需实现近零停机,可考虑 GoldenGate/OGG 进行在线同步后再切换。

0