温馨提示×

如何迁移 Linux Oracle 数据库

小樊
40
2025-12-06 15:42:50
栏目: 云计算

Linux Oracle 数据库迁移实操指南

一 迁移方案选型

  • Data Pump 逻辑迁移(expdp/impdp):适合跨版本、跨平台、结构调整、选择性迁移;停机时间可控但随数据量增大而增加。支持全库/按SCHEMA/TABLESPACE导出导入,便于拆分与并行。
  • RMAN 物理迁移:同平台同版本停机最短;支持整库备份恢复、增量备份;跨平台需满足字节序(ENDIAN_FORMAT)一致或使用RMAN Convert Database;路径变更通过DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT处理。
  • XTTS 跨平台传输表空间:适合Unix/Linux间大规模迁移与滚动升级,支持增量(减少停机),但配置复杂度较高。
  • GoldenGate/Data Guard:近零停机迁移与持续复制,适合高可用与平滑切换;需额外部署与授权。
  • 补充:中小规模或文件型数据可用SQL*Loader批量导入。

二 通用准备与评估

  • 版本与兼容性:确认源/目标Oracle 版本、补丁、组件(如Advanced Compression/Partitioning)一致或兼容;跨平台需核对V$TRANSPORTABLE_PLATFORMENDIAN_FORMAT
  • 字符集与NLS:尽量保持一致;如变更需评估应用影响与转换策略。
  • 容量与目录:目标库磁盘、FRA/归档空间充足;创建DIRECTORY对象并赋权,确保备份/转储文件可读写。
  • 对象与权限梳理:统计用户/角色/表空间/目录/外部表/DB Link等,制定迁移清单与回退预案。
  • 网络与窗口:专线/加密传输,明确停机窗口与回滚条件。

三 方法一 Data Pump 逻辑迁移步骤

  • 源库
    1. 创建目录对象并赋权
      sqlplus / as sysdba
      create or replace directory tmpDir as ‘/tempFile’;
      grant read,write on directory tmpDir to ;
    2. 导出(示例按 SCHEMA)
      expdp /@ schemas=<schema_name> directory=tmpDir dumpfile=export.dmp logfile=export.log parallel=4
  • 传输
    scp -P /tempFile/export.dmp @:/home/tempFile/
  • 目标库
    1. 创建目录对象并赋权
      create or replace directory tmpDir as ‘/tempFile’;
    2. 导入(示例按 SCHEMA)
      impdp /@ schemas=<schema_name> directory=tmpDir dumpfile=export.dmp logfile=import.log parallel=4 \ table_exists_action=replace remap_schema=: remap_tablespace=<src_ts>:<tgt_ts>
  • 提示:可按需拆分SCHEMA/TABLESPACE并行导出导入;导入后校验对象数量、无效对象与统计信息。

四 方法二 RMAN 物理迁移步骤

  • 同平台同版本(停机最短)
    1. 源库全备(含归档)
      rman target /
      backup database plus archivelog;
      backup current controlfile format ‘/backup/%T_CTL_%U’;
      backup spfile format ‘/backup/%T_SPFILE_%U’;
    2. 传输备份至目标并恢复
      rman target /
      startup nomount;
      restore spfile from ‘/backup/…SPFILE%U’;
      startup nomount;
      restore controlfile from ‘/backup/…CTL%U’;
      alter database mount;
      restore database;
      recover database;
      alter database open resetlogs;
  • 跨平台(ENDIAN 一致)
    • 使用RMAN Convert Database生成目标平台脚本与数据文件,传输后在目标端执行脚本完成转换与打开。
  • 跨平台(ENDIAN 不一致)
    • 采用XTTS或先在同字节序平台转换后再迁移;使用DBMS_TDB检查可传输性与外部对象。
  • 路径变更
    • 在目标库使用DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT或恢复时指定转换规则。

五 方法三 XTTS 跨平台传输表空间步骤

  • 准备:确认平台支持与字节序;选择自包含表空间集;源库准备可传输表空间(只读或按增量阶段处理)。
  • 步骤
    1. 源库导出元数据(Data Pump)
      expdp system/ DIRECTORY=xtts_dir DUMPFILE=xtts_meta.dmp LOGFILE=xtts_meta.log FULL=Y PARALLEL=4
    2. 传输数据文件与元数据至目标;必要时执行增量备份/应用以缩短停机。
    3. 目标库导入元数据
      impdp system/ DIRECTORY=xtts_dir DUMPFILE=xtts_meta.dmp LOGFILE=xtts_imp.log FULL=Y PARALLEL=4
    4. 校验:对象数量、数据一致性、无效对象与统计信息收集。

六 迁移后验证与常见问题

  • 验证清单
    • 数据一致性:关键表COUNT/CHECKSUM、抽样比对;
    • 对象完整性:DBA_OBJECTS统计、无效对象编译、索引/约束/触发器启用;
    • 权限与配额:DBA_USERS/DBA_ROLES/DBA_TAB_PRIVS/DBA_TS_QUOTAS
    • 应用连通:连接串、监听、DB Link、定时任务与目录对象;
    • 性能基线:AWR/ASH 对比,必要时调优。
  • 常见问题与处理
    • 字符集不一致导致乱码:迁移前统一或在导入阶段处理;
    • 路径不同:RMAN 使用DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT
    • 外部表/目录/作业未迁移:清单化补齐或改写访问方式;
    • 统计信息缺失:导入后执行DBMS_STATS收集;
    • 回退预案:保留源库只读窗口、备份与回滚脚本,确保可快速恢复。

0