温馨提示×

Linux下Oracle如何进行数据迁移

小樊
33
2025-11-30 18:31:02
栏目: 云计算

Linux下Oracle数据迁移方法与步骤

一、方法总览与选型

  • Data Pump 逻辑迁移(expdp/impdp):适合同版本或相近版本、跨字符集/平台、只迁移部分Schema/表等场景;停机时间短、操作灵活。
  • RMAN 物理迁移:适合整库迁移、同平台或跨平台;停机时间可做到较短(配合增量备份/传输表空间),一致性好。
  • 跨平台传输表空间/数据库(XTTS、CONVERT 命令):适合大容量数据库跨平台(如 Unix → Linux),支持增量,停机窗口小。
  • GoldenGate/Data Guard:适合零或近零停机的迁移与持续同步,可做滚动升级/双活过渡。
  • SQL*Loader:适合文件到表的批量导入(CSV/定界文本等)。

二、Data Pump 逻辑迁移步骤

  • 源库准备
    • 创建目录对象并赋权:
      sqlplus / as sysdba
      create or replace directory tmpDir as ‘/tempFile’;
      grant read,write on directory tmpDir to ;
    • 导出(示例按 Schema):
      expdp /@ schemas=<schema_name> directory=tmpDir dumpfile=export.dmp logfile=export.log [parallel=4]
  • 传输
    • scp -P /tempFile/export.dmp @:/home/tempFile
  • 目标库准备
    • 创建同名目录对象并赋权(同上)。
    • 导入:
      impdp /@ schemas=<schema_name> directory=tmpDir dumpfile=export.dmp logfile=import.log [parallel=4] [TABLE_EXISTS_ACTION=REPLACE|SKIP|APPEND|TRUNCATE]
  • 常用变体
    • 按表导出:expdp … tables=tab1,tab2 …
    • 全库导出:expdp … full=Y …
    • 网络链路直传(不落地):expdp … network_link= …(需先建好 DBLINK)

三、RMAN 物理迁移步骤

  • 源库备份
    • rman target /
      run {
      allocate channel c1 type disk;
      backup database plus archivelog;
      backup current controlfile format ‘/backup/%T_CTL_%U’;
      backup spfile format ‘/backup/%T_SPFILE_%U’;
      release channel c1;
      }
  • 目标库恢复
    • 安装同版本软件,创建必要目录;将备份集、控制文件、spfile 拷至目标端。
    • 若数据文件路径不同,设置转换参数并启动到 NOMOUNT:
      sqlplus / as sysdba
      alter system set db_file_name_convert=‘/old/path’,‘/new/path’ scope=spfile;
      alter system set log_file_name_convert=‘/old/path’,‘/new/path’ scope=spfile;
      shutdown immediate; startup nomount;
    • RMAN 恢复:
      rman target /
      restore database;
      recover database;
      alter database open resetlogs;
  • 说明
    • 同平台整库迁移常用以上流程;跨平台需结合 RMAN 的跨平台能力(见第四部分)。

四、跨平台迁移与增量策略

  • 跨平台整库(RMAN CONVERT DATABASE)
    • 检查可传输性与平台名:
      sqlplus / as sysdba
      SET SERVEROUTPUT ON;
      DECLARE db_ready BOOLEAN; BEGIN db_ready := DBMS_TDB.CHECK_DB(‘<目标平台名>’); END; /
      SELECT platform_name, endian_format FROM v$transportable_platform;
    • 源库只读并转换:
      alter database open read only;
      rman target /
      convert database new database ‘newdb’ to platform ‘<目标平台名>’ format ‘/tmp/%U’;
    • 将生成的数据文件、PFILE 与转换脚本(如 crdb.sql)传到目标端:
      sqlplus / as sysdba
      startup nomount;
      @/target-dir/crdb.sql
  • 跨平台表空间(XTTS/Transportable Tablespaces)
    • 源库将要传输的表空间置为只读,使用 Data Pump 导出元数据(仅元数据)。
    • 按平台字节序选择转换方式:
      • 源/目标字节序不同:在源库用 RMAN 执行 CONVERT TABLESPACE,或在目标库执行 CONVERT DATAFILE。
      • 字节序相同:可直接拷贝数据文件。
    • 将转换后数据文件与元数据导入目标库,导入后把表空间置为读写。
  • 增量迁移与最小化停机
    • RMAN 备份集传输:源库对目标平台做备份(BACKUP TO PLATFORM),目标库 RESTORE FOREIGN DATABASE 完成增量同步。
    • XTTS 支持增量备份多次前滚,适合大库分阶段迁移与窗口压缩。

五、迁移前后检查与常见问题

  • 兼容性检查
    • 版本:尽量保持源/目标版本一致或目标版本更高;跨小版本需评估降级对象风险。
    • 字符集:尽量一致;若必须变更,先做全量评估与转换验证(应用侧回归)。
    • 平台/字节序:跨平台需确认 ENDIAN_FORMAT,必要时用 RMAN 转换。
  • 一致性校验
    • 对象统计对比:数据字典查询(如 dba_tables、dba_indexes 计数)、校验和/抽样比对。
    • 业务侧回归:关键报表、接口、触发器、存储过程验证。
  • 常见报错与处理
    • 目录权限/路径不存在:确认 OS 目录存在且 Oracle 目录对象指向正确,权限对 Oracle 软件属主可读写。
    • 版本不兼容:使用相匹配的 expdp/impdp 版本或先做对象升级。
    • 字符集冲突:设置 NLS_LANG 一致,必要时在导入时处理字符集转换。
  • 网络与性能
    • 大文件传输建议使用 scp -C 或分片并行;RMAN/Data Pump 合理设置 parallel 提升吞吐。
  • 备份与回退
    • 迁移前做好全量备份与回退预案;导入失败可清理目标对象后重跑。

0