温馨提示×

Oracle数据库Ubuntu版如何迁移

小樊
31
2026-01-01 10:29:18
栏目: 云计算

Ubuntu 上 Oracle 数据库迁移实操指南

一、迁移方式选型

  • Data Pump 逻辑迁移(expdp/impdp):适合大多数版本升级、跨小版本迁移、选择性迁移(按schema/表)、或源与目标 Endian/字符集不一致的场景。操作简便、可并行、可重映射用户与表空间,停机时间可控。
  • RMAN 跨平台传输数据库(Full Transportable Export/Import):适合整库迁移且要求停机时间极短的场景。基本思路是源库只读后,用 RMAN 转换数据文件到目标平台,再在目标端执行脚本开库。支持在源端或目标端做平台转换。
  • XTTS(Cross-Platform Transportable Tablespaces):适合超大规模数据库、需要增量同步分阶段切换的跨平台迁移(如 Unix/Linux 到 Linux)。复杂度较高,但停机窗口最小。
  • 仅更换存储或目录(非跨机/跨平台):在同一主机/同平台下移动 数据文件/表空间,通过脱机、移动、rename datafile 完成,停机时间取决于表空间大小与业务可停窗。

二、Data Pump 迁移步骤(推荐通用)

  • 源库准备
    • oracle 用户登录,创建目录对象并授权:
      • SQL> create or replace directory tmpDir as ‘/tempFile’;
      • SQL> grant read, write on directory tmpDir to your_user;
    • 导出(按 schema 示例):
      • $ expdp your_user/password@//host:1521/service schemas=your_user directory=tmpDir dumpfile=export.dmp logfile=export.log parallel=4
    • 如需仅导出部分表:
      • $ expdp … tables=T1,T2 directory=tmpDir dumpfile=export.dmp logfile=export.log
  • 传输转储文件
    • $ scp -P 2222 /tempFile/export.dmp user@target:/home/tempFile/
  • 目标库准备
    • 创建同名/映射的 表空间用户(保持默认表空间一致可减少额外参数),并创建目录对象:
      • SQL> create or replace directory tmpDir as ‘/tempFile’;
      • SQL> grant read, write on directory tmpDir to your_user;
  • 导入
    • 同构同版本直导:
      • $ impdp your_user/password@//host:1521/service directory=tmpDir dumpfile=export.dmp logfile=import.log parallel=4
    • 跨用户/跨表空间重映射(常见):
      • $ impdp system/password@//host:1521/service directory=tmpDir dumpfile=export.dmp remap_schema=src_user:dst_user remap_tablespace=SRC_TS:DST_TS logfile=import.log TABLE_EXISTS_ACTION=REPLACE
    • 常用参数说明:
      • TABLE_EXISTS_ACTION:SKIP/APPEND/TRUNCATE/REPLACE
      • VERSION:当源/目标版本不一致时,用 VERSION 指定目标库兼容版本(expdp 侧设置)
      • PARALLEL:按 CPU/IO 能力设置并行度提升速度

三、RMAN 跨平台整库迁移(停机短)

  • 前置检查
    • 确认两端平台名称与兼容性:
      • SQL> select platform_name from v$database;
      • SQL> select * from v$transportable_platform order by platform_name;
    • 源库只读并校验可传输性:
      • SQL> startup mount;
      • SQL> alter database open read only;
      • SQL> SET SERVEROUTPUT ON; DECLARE db_ready BOOLEAN; BEGIN db_ready := DBMS_TDB.CHECK_DB(‘Linux x86 64-bit’); – 目标平台名 END; /
  • 方式 A(源端转换,目标端开库)
    • 源端 RMAN 转换并生成脚本:
      • $ rman target /
      • RMAN> CONVERT DATABASE NEW DATABASE ‘newdb’ TO PLATFORM ‘Linux x86 64-bit’ FORMAT ‘/tmp/%U’ TRANSPORT SCRIPT ‘/tmp/crdb.sql’ DATAPUMP DESTINATION ‘/tmp’;
    • 将生成的 数据文件、TRANSPORT SCRIPT、PFILE 传到目标端(保持目录结构一致或后续编辑脚本)
    • 目标端开库:
      • $ sqlplus / as sysdba
      • SQL> startup nomount;
      • SQL> @/tmp/crdb.sql
  • 方式 B(目标端转换)
    • 源端只读后拷贝数据文件到目标端;
    • 目标端 RMAN 转换并开库:
      • $ rman target /
      • RMAN> CONVERT DATABASE ON TARGET PLATFORM NEW DATABASE ‘newdb’ FORMAT ‘/u01/oradata/%U’ TRANSPORT SCRIPT ‘/u01/oradata/crdb.sql’ DATAPUMP DESTINATION ‘/u01/oradata’;
      • SQL> startup nomount;
      • SQL> @/u01/oradata/crdb.sql
  • 重要提示
    • 传输集通常不含 tempfiles、redo logs、control files、spfile/pfile、口令文件、外部表/BFILE 等,需按脚本或手工补齐;必要时用 DBNEWID 更改 DBID

四、XTTS 跨平台迁移(超大规模与增量)

  • 适用场景:TB 级数据、可接受复杂准备、需要增量前滚分阶段切换的跨平台迁移(如 AIX/Solaris/HPUX → Linux x86-64)。
  • 核心思路
    • 准备可传输表空间集(只读检查、自包含检查),导出元数据;
    • 初始导入到目标库;
    • 通过 增量备份(RMAN) 持续前滚数据差异;
    • 短暂停业务,最后一次增量与切换,完成最终导入与校验。
  • 实施要点
    • 版本建议:源库 11.2.0.4+,目标库 12.1.0.2+ 更易实施;
    • 严格做 自包含检查平台/字节序评估;
    • 规划 停机窗口、对象统计信息收集、无效对象编译与回放验证脚本。

五、常见问题与关键注意事项

  • 版本与工具兼容
    • exp/imp 与 expdp/impdp 转储文件互不兼容;跨版本迁移优先用 Data Pump,必要时用 VERSION 参数控制导出对象兼容性。
  • 字符集与 Endian
    • 字符集建议保持一致;跨 Endian 平台整库迁移优先 RMAN 跨平台XTTS
  • 目录与权限
    • Data Pump 的 directory 对象必须存在且对目标用户授予 READ/WRITE;操作系统目录需 oracle:oinstall 权限与合适 Umask
  • 表空间与存储
    • 目标库提前创建同名/映射的 表空间用户;导入时用 remap_tablespace/remap_schema 减少手工改动。
  • 增量与回滚
    • 整库一次性切换用 RMAN 跨平台;需要滚动窗口与最小停机用 XTTS
  • 校验与回放
    • 迁移后核对:数据量(count/checksum)、对象数量、无效对象、统计信息、应用连通性与关键业务回放。
  • 仅更换磁盘/目录(同平台)
    • 表空间级迁移流程:offline → 拷贝/移动数据文件 → alter tablespace rename datafile → online;注意权限与文件占用。

0