温馨提示×

oracle数据库centos上如何迁移

小樊
36
2025-12-21 10:31:04
栏目: 云计算

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

一、迁移方案选型

  • 同版本同平台的最小停机迁移:使用RMAN 备份/还原冷拷贝数据文件(停机时间最短,一致性最好)。
  • 跨小版本或需跨目录/主机:使用**Data Pump(expdp/impdp)**按用户/表空间/全库迁移(灵活、可重放)。
  • 跨操作系统或跨字节序:使用RMAN Convert Database(仅同字节序)或可传输表空间 TTS(跨字节序用 RMAN 转换数据文件),亦可用GoldenGate/Data Guard等逻辑复制方案(停机可做到接近零)。
  • 迁移可行性要点:跨平台没有一键工具;RMAN Convert Database 要求源/目标ENDIAN_FORMAT 相同;TTS 支持跨平台但需按平台处理字节序;Data Pump/逻辑复制对数据类型支持更灵活但停机与一致性需按方案评估。

二、同版本同平台迁移步骤 RMAN 备份还原(推荐)

  • 准备
    • 确认两端 Oracle 版本一致(如均为11.2.0.x),目录结构规划一致(如 /u01/app/oracle),归档模式与备份策略一致。
    • 在目标端安装相同版本软件、创建相同目录与 oracle 用户(uid/gid 建议一致),配置环境变量 ORACLE_SID/ORACLE_HOME
  • 源端备份
    • 登录 RMAN:rman target /
    • 全库备份并生成控制文件脚本:
      • BACKUP DATABASE FORMAT ‘/backup/full_%U.bkp’;
      • BACKUP CURRENT CONTROLFILE FORMAT ‘/backup/ctl_%U.bkp’;
      • SQL ‘ALTER SYSTEM ARCHIVE LOG CURRENT’;
  • 传输文件
    • 使用 rsync/scp 将备份文件与控制文件脚本传输到目标端相同目录结构下。
  • 目标端还原
    • 启动到 nomount:STARTUP NOMOUNT;
    • 还原控制文件:RESTORE CONTROLFILE FROM ‘/backup/ctl_*.bkp’;
    • 挂载库:ALTER DATABASE MOUNT;
    • 注册备份:CATALOG START WITH ‘/backup/’;
    • 还原与恢复:RESTORE DATABASE; RECOVER DATABASE;
    • 打开库:ALTER DATABASE OPEN RESETLOGS;(若使用备份控制文件且做了不完全恢复,需要 RESETLOGS)
  • 验证
    • 检查告警日志、数据文件/日志文件一致性、关键业务对象可用性。
  • 适用场景
    • 同平台、同版本、跨主机/跨存储的快速迁移;停机窗口可控(备份+还原时间)。

三、同版本同平台迁移步骤 冷拷贝数据文件(停机最短)

  • 停库
    • sqlplus / as sysdba → SHUTDOWN IMMEDIATE;(若长时间无响应可用 SHUTDOWN ABORT 后恢复)
  • 拷贝关键文件(建议按清单一次性拷贝)
    • 参数文件:如 $ORACLE_HOME/dbs/spfile.orainit.ora
    • 控制文件:由参数 control_files 指定(如 /u01/app/oracle/oradata//control01.ctl 等)
    • 在线重做日志:由 v$logfile 查询(如 redo01.log 等)
    • 数据文件:由 v$datafile 查询(如 system01.dbf、sysaux01.dbf、undotbs01.dbf、users01.dbf 等)
    • 临时文件:由 v$tempfile 查询(如 temp01.dbf
    • 审计/诊断目录:如 audit_file_dest、background_dump_dest、user_dump_dest 下的内容按需拷贝(便于问题排查)
  • 目标端启动与恢复
    • 若拷贝期间源库有写入,目标端可能提示需要恢复:
      • STARTUP MOUNT;
      • RECOVER DATABASE;(必要时按文件逐个 RECOVER DATAFILE <file#>)
      • ALTER DATABASE OPEN;
  • 常见排错
    • 启动报共享内存不足:检查 /dev/shm(tmpfs)大小,必要时在 /etc/fstab 中调大并重新挂载(如:tmpfs /dev/shm tmpfs defaults,size=31G 0 0)。
    • 控制文件/路径不一致:修正 control_files 参数与目录权限,必要时用 STARTUP NOMOUNT + ALTER SYSTEM SET control_files=‘…’ SCOPE=SPFILE 后重启。
  • 适用场景
    • 同平台、同版本、目录结构可保持一致时的最小停机迁移。

四、跨版本或跨目录迁移步骤 Data Pump(expdp/impdp)

  • 源端导出
    • 创建目录对象并授权:
      • CREATE DIRECTORY dumpdir AS ‘/data/oracle/dump’;
      • GRANT READ,WRITE ON DIRECTORY dumpdir TO ;
    • 全库或按用户导出:
      • 全库:expdp system/ DIRECTORY=dumpdir DUMPFILE=full_%U.dmp LOGFILE=full.log FULL=Y PARALLEL=4
      • 按用户:expdp / DIRECTORY=dumpdir DUMPFILE=schema.dmp LOGFILE=schema.log SCHEMAS= PARALLEL=4
  • 传输
    • .dmp.log 文件传到目标端相同目录对象对应物理路径。
  • 目标端导入
    • 创建相同目录对象并授权;按需创建表空间/用户(若目标端路径不同,导入后需调整 DB_FILE_NAME_CONVERT/LOG_FILE_NAME_CONVERT 或重建控制文件指向新路径)。
    • 全库或按用户导入:
      • 全库:impdp system/ DIRECTORY=dumpdir DUMPFILE=full_%U.dmp LOGFILE=full_imp.log FULL=Y PARALLEL=4 IGNORE=Y
      • 按用户:impdp / DIRECTORY=dumpdir DUMPFILE=schema.dmp LOGFILE=schema_imp.log REMAP_SCHEMA=: TABLE_EXISTS_ACTION=REPLACE
  • 适用场景
    • 跨小版本、跨目录/主机、结构变更(如重组织表空间)或选择性迁移(按用户/表空间/查询)。

五、跨平台迁移要点 RMAN Convert/TTS 与注意事项

  • 平台与字节序检查
    • 查询支持平台与字节序:SELECT * FROM v$transportable_platform;(常见:Linux x86_64 为 Little-endian
    • RMAN Convert Database 仅支持同字节序;跨字节序需用 TTS + RMAN 转换数据文件
  • RMAN Convert Database(同字节序)
    • 源库 READ ONLY → RMAN> CONVERT DATABASE NEW DATABASE ‘’ TO PLATFORM ‘Linux x86 64-bit’ DB_FILE_NAME_CONVERT ‘/u01’,‘/u02’ TRANSPORT SCRIPT ‘/tmp/transport.sql’;
    • 将生成的数据文件与脚本传到目标端,按脚本创建实例并启动。
  • TTS(跨平台/跨字节序)
    • 步骤要点:
      1. 检查可传输性与外部对象(DBMS_TDB.CHECK_DB/CHECK_EXTERNAL);
      2. 源端将表空间置为只读(或按增量阶段迁移);
      3. 按平台/字节序使用 RMAN 转换数据文件;
      4. 导出元数据(expdp TRANSPORT_TABLESPACES=…)并在目标端导入;
      5. 目标端使表空间在线并校验。
  • 其他可选
    • GoldenGate/Data Guard 异构物理备库:可实现近零停机迁移,但需评估平台支持矩阵与网络带宽。
  • 关键注意事项
    • 保证 ORACLE_SID/ORACLE_HOME 与目录权限一致;监听与 tnsnames.ora 正确;
    • 迁移后核对 compatible 参数、时区/字符集、统计信息、作业/触发器/物化视图刷新、审计与目录对象;
    • 先做全量演练与回退预案,在窗口内执行并保留完整日志。

0