在 CentOS 上迁移 Oracle 数据库的常用方法与步骤
一、迁移总览与前置准备
- 明确目标与约束:源/目标 Oracle 版本、是否跨小版本、字符集(建议统一为 AL32UTF8)、数据量、停机窗口、网络带宽与存储路径。
- 环境准备:
- 创建 oracle 用户与 oinstall/dba 组,配置内核参数(如 fs.file-max、kernel.shmmax)、环境变量 ORACLE_HOME/ORACLE_SID。
- 安装相同版本的 Oracle 软件,配置 listener(默认端口 1521) 与 tnsnames.ora,创建用于导入导出的 Directory 对象(如 data_pump_dir 指向 /u01/app/oracle/dumpfiles)。
- 兼容性检查:核对版本/补丁/组件差异,必要时使用 Cloud Premigration Advisor Tool(CPAT) 识别不兼容特性与字符集风险。
- 备份与验证:先做全量备份(Data Pump 或 RMAN),并在非生产环境演练迁移流程与回退方案。
二、方法一 逻辑迁移 Data Pump(expdp/impdp)
- 适用场景:同构或近同构迁移、跨平台/跨字符集改造、选择性迁移(按 schema/tablespace)、对停机时间有一定容忍度。
- 核心步骤:
- 源库导出
- 创建目录对象并赋权:
- CREATE OR REPLACE DIRECTORY data_pump_dir AS ‘/u01/app/oracle/dumpfiles’;
- GRANT READ, WRITE ON DIRECTORY data_pump_dir TO your_schema;
- 全库导出:
- expdp sys/password@source_db directory=data_pump_dir dumpfile=full_export.dmp logfile=export.log full=y
- 按 Schema 导出(推荐):
- expdp sys/password@source_db directory=data_pump_dir dumpfile=schema_export.dmp logfile=export.log schemas=your_schema
- 传输文件
- scp /u01/app/oracle/dumpfiles/full_export.dmp centos:/u01/app/oracle/dumpfiles/
- 目标库导入
- 创建同名目录并赋权(同上)。
- 全库导入:
- impdp sys/password@target_db directory=data_pump_dir dumpfile=full_export.dmp logfile=import.log full=y
- Schema 导入与映射(源/目标不一致时):
- impdp sys/password@target_db directory=data_pump_dir dumpfile=schema_export.dmp logfile=import.log
remap_schema=source_user:target_user remap_tablespaces=source_ts:target_ts
table_exists_action=replace
- 校验
- 检查 import.log 错误;抽样比对行数与关键数据;必要时使用 DBMS_CRYPTO 做校验和。
- 性能建议:大数据量时使用并行与分片导出(如 parallel、filesize),导入前预建表空间与目录对象,导入后收集统计信息 DBMS_STATS.GATHER_SCHEMA_STATS。
三、方法二 物理迁移 文件系统拷贝或 RMAN 备份恢复
- 文件系统拷贝(停机短、同版本同平台优先)
- 适用:源机可停机、目录结构可保持一致,追求快速“原样”迁移。
- 核心步骤:
- 源库停库(保证一致性):shutdown immediate
- 查询并拷贝关键文件(示例路径,按实际调整):
- 参数文件:show parameter spfile(如 spfileorcl.ora)
- 控制文件:show parameter control_files(如 control01.ctl、control02.ctl)
- 在线日志:select * from v$logfile;
- 数据文件:select name from v$datafile;
- 临时文件:select name from v$tempfile;
- 使用 scp/rsync 同步到目标 CentOS 相同路径
- 目标库启动到 nomount,使用 RMAN 注册并恢复控制文件,再 mount 打开:
- rman target /
- STARTUP NOMOUNT
- RESTORE CONTROLFILE FROM ‘/u01/…/control01.ctl’;
- ALTER DATABASE MOUNT;
- ALTER DATABASE OPEN;
- RMAN 备份恢复(灵活、支持时间点恢复)
- 备份(源库,建议归档模式):
- rman target /
- BACKUP DATABASE PLUS ARCHIVELOG FORMAT ‘/oracle/backup/full_%U.bak’;
- 建议开启控制文件自动备份:CONFIGURE CONTROLFILE AUTOBACKUP ON;
- 恢复(目标库):
- 启动到 NOMOUNT,先恢复控制文件,再 MOUNT 恢复数据文件,最后 OPEN(必要时按时间点/SCN 恢复)。
四、方法三 近零停机方案
- Oracle GoldenGate:基于增量日志的 实时复制,适合 TB 级 或要求 近零停机 的业务;先在两端初始化基线(Data Pump 或物理拷贝),随后持续同步,切换窗口短。
- OCI Database Migration Service:托管式迁移,提供 兼容性检查、数据传输与验证 的自动化流程,适合上云或跨环境迁移。
五、迁移后验证与常见问题处理
- 验证清单
- 数据一致性:抽样对比 COUNT(*)、关键业务校验和(如 DBMS_CRYPTO),必要时做全量对账。
- 对象与权限:用户、角色、同义词、dblink、JOB、物化视图刷新等是否完整。
- 统计信息:执行 DBMS_STATS.GATHER_SCHEMA_STATS 更新优化器统计信息。
- 应用连通:更新连接串(如 jdbc:oracle:thin:@centos_host:1521:ORCL),回归核心业务与报表。
- 监控与告警:检查 alert_.log、监听日志与系统资源(CPU/IO/内存)。
- 常见问题与要点
- 字符集不一致:优先在目标库创建与源库一致的字符集(如 AL32UTF8),避免后期转换风险。
- 目录对象与权限:导入前确认 Directory 存在且对目标用户授予 READ/WRITE。
- 表空间/路径差异:使用 remap_tablespaces/remap_schema;目标端提前创建所需表空间与目录。
- 版本差异:跨小版本导入时关注 COMPATIBLE 参数与废弃特性;必要时在目标库做兼容性设置与测试。
- 大对象与并行:LOB/分区表导入慢时,合理设置 parallel、分批导入与合适的 tables_exists_action。