温馨提示×

Ubuntu Oracle如何进行数据迁移

小樊
33
2025-12-16 18:42:43
栏目: 云计算

Ubuntu 上 Oracle 数据迁移实操指南

一、迁移方法选型

  • Data Pump 逻辑迁移(expdp/impdp):最通用,支持同构/异构平台、跨版本(受限)、跨字符集;适合按用户/表空间/全库迁移与重组。
  • RMAN 可传输表空间(TTS):以数据文件为单位,停机时间短;两端字节序(Endian)不同时用 RMAN 转换,相同可直接拷贝;适合大容量、少停机。
  • RMAN Convert Database:整库迁移,要求两端字节序相同;自动生成传输脚本与参数文件,重建控制文件与联机日志;适合“同字节序”整库搬迁。
  • 传统 Export/Import(exp/imp):兼容老版本客户端/服务器,性能与功能弱于 Data Pump,建议仅作兼容或小规模迁移。

二、Data Pump 实操步骤(推荐)

  • 源库准备
    • 创建目录对象并赋权:
      • sqlplus / as sysdba
      • create or replace directory DMPDIR as ‘/u01/dmp’;
      • grant read, write on directory DMPDIR to your_user;
    • 导出(示例按 schema):
      • expdp your_user/pwd@//host:1521/service schemas=your_user directory=DMPDIR dumpfile=exp_20251216.dmp logfile=exp_20251216.log job_name=exp_job
  • 传输
    • scp -P 22 /u01/dmp/exp_20251216.dmp user@target:/u01/dmp/
  • 目标库准备
    • 创建同名表空间/用户(如原库使用自定义表空间,需先创建;否则使用默认表空间):
      • create tablespace TS_DATA datafile ‘/u01/oradata/TS_DATA01.dbf’ size 500M autoextend on next 100M maxsize unlimited;
      • create temporary tablespace TS_TEMP tempfile ‘/u01/oradata/TS_TEMP01.dbf’ size 200M autoextend on next 50M;
      • create user your_user identified by pwd default tablespace TS_DATA temporary tablespace TS_TEMP;
      • grant connect, resource, dba to your_user;
      • create or replace directory DMPDIR as ‘/u01/dmp’;
      • grant read, write on directory DMPDIR to your_user;
  • 导入(示例)
    • 同 schema:
      • impdp your_user/pwd@//host:1521/service directory=DMPDIR dumpfile=exp_20251216.dmp logfile=imp_20251216.log job_name=imp_job
    • 变更 schema(跨库重映射):
      • impdp system/pwd@//host:1521/service directory=DMPDIR dumpfile=exp_20251216.dmp logfile=imp_20251216.log remap_schema=src_user:dest_user remap_tablespace=TS_SRC:TS_DEST table_exists_action=REPLACE
  • 常用参数
    • table_exists_action:REPLACE/TRUNCATE/APPEND/SKIP
    • parallel:提升大库导入速度(如 parallel=4
    • 大文件导入建议:增加 UNDO 表空间或临时表空间容量,避免 ORA-01555/ORA-01652。

三、RMAN 可传输表空间与整库迁移

  • 可传输表空间(TTS,适合大容量、少停机)
    • 源库:将要迁移的表空间置为只读
      • alter tablespace TS1 read only;
    • 检查平台与可转换性
      • select platform_name, endian_format from v$transportable_platform;
    • 转换数据文件(两端 Endian 不同在源库转换;相同可省略)
      • RMAN> convert tablespace TS1,TS2 to platform ‘Linux x86 64-bit’ db_file_name_convert ‘/u01/oradata’,‘/u01/transport’ FORMAT ‘/u01/transport/%U’;
    • 导出元数据(仅元数据,不包含数据文件)
      • expdp system/pwd directory=DMPDIR dumpfile=tts_meta.dmp logfile=tts_meta.log transport_tablespaces=TS1,TS2 transport_datafiles=‘/u01/transport/*.dbf’
    • 目标库:创建目标用户/表空间,导入元数据并改为读写
      • impdp system/pwd directory=DMPDIR dumpfile=tts_meta.dmp logfile=tts_imp.log transport_datafiles=‘/u01/transport/*.dbf’
      • alter tablespace TS1 read write;
  • RMAN Convert Database(整库,要求同字节序)
    • 源库准备
      • startup mount; alter database open read only;
      • 使用 DBMS_TDB 检查可传输性与外部对象
        • set serveroutput on
        • exec dbms_tdb.check_db(‘Linux x86 64-bit’);
        • exec dbms_tdb.check_external;
    • 执行转换(生成传输脚本与数据文件)
      • RMAN> convert database new database NEWDB transport script /u01/transport/transport.sql to platform ‘Linux x86 64-bit’ db_file_name_convert ‘/u01/oradata’,‘/u01/transport’
    • 目标库
      • 依据生成的 PFILE 调整参数(如 DB_NAME、CONTROL_FILES、DB_RECOVERY_FILE_DEST 等)
      • 运行 transport.sql 创建新库并 OPEN RESETLOGS
      • 处理外部表、DIRECTORY、BFILE 等需手工迁移对象。

四、迁移前后关键检查与常见问题

  • 版本与兼容性
    • Data Pump 两端版本建议≥10.1.0.2;跨版本导入时,对象定义以目标库版本为准,可能需调整(如并行度、压缩、INMEMORY 等特性)。
  • 字符集与 NLS
    • 尽量保持两端 NLS_CHARACTERSET/NLS_NCHAR_CHARACTERSET 一致;不一致时,Data Pump 会在导入端做字符集转换,先小范围演练验证数据正确性。
  • 字节序与平台
    • 使用 TTS 时,若两端 Endian 不同,必须用 RMAN 做字节序转换;使用 Convert Database 时,两端 Endian 必须相同。
  • 目录与权限
    • Oracle 目录对象必须存在且对目标用户授予 READ/WRITE;操作系统目录需 oracle:oinstall 权限且磁盘空间充足。
  • 表空间与配额
    • 目标库需预先创建同名表空间或按需 remap_tablespace;用户配额足够,避免导入时报 ORA-01950。
  • 大对象与回滚
    • 大表/LOB 导入建议提高 UNDO 表空间与 DB_CACHE_SIZE,并使用 parallel;导入前清理目标端历史数据,减少冲突。
  • 一致性校验
    • 迁移后对比关键表的 COUNT(*)CHECKSUM(如 DBMS_CRYPTO.CHECKSUM)与近期业务报表结果,抽样验证约束、索引、触发器、物化视图等对象有效性。

0