1. 项目背景与挑战
十年前的老系统迁移就像给一栋老房子做整体平移,既要保证建筑结构完整,又要适应新地基的特性。最近刚完成某制造业客户的核心ERP系统从HP-UX平台到Red Hat Enterprise Linux的迁移,源端是Oracle 10g R2(10.2.0.4版本),目标端是Oracle 11g R2(考虑到后续升级路径)。这种跨平台、跨版本的组合在实际项目中非常典型,也暗藏了不少技术雷区。
迁移过程中最棘手的三个问题:字符集转换时遇到CLOB字段损坏、存储过程因endian差异报错、以及HP-UX特有的共享内存参数在Linux上的等效配置。下面分享的具体方案都是经过生产验证的实战经验,不同于官方文档的理想化场景,会重点说明实际环境中的各种"意外情况"处理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 迁移方案选型与技术路线
2.1 主流迁移方式对比
在异构平台迁移中,常用的五种方法各有适用场景:
| 方法 | 适用数据量 | 停机窗口 | 复杂度 | 风险点 |
|---|---|---|---|---|
| 导出导入(expdp/impdp) | <500GB | 6-8小时 | 中 | 字符集转换、对象依赖 |
| 传输表空间(TTS) | 500GB-2TB | 2-4小时 | 高 | 字节序问题、平台兼容性 |
| GoldenGate同步 | 不限 | 分钟级 | 极高 | 初始同步耗时、DDL处理 |
| RMAN跨平台恢复 | 1TB+ | 4-6小时 | 高 | 文件格式转换时间 |
| 手工SQL复制 | <50GB | 灵活 | 低 | 数据一致性难以保证 |
最终选择expdp/impdp组合方案,主要基于以下考量:
- 客户数据库实际大小约300GB,包含2000+表
- 存在大量BLOB字段(图纸文档存储),TTS对LOB支持有限
- 需要同时完成字符集从WE8ISO8859P1到AL32UTF8的转换
2.2 预处理关键步骤
字符集检查与转换准备
sql复制-- 源库检查
SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET';
SELECT table_name, column_name FROM dba_tab_columns
WHERE data_type IN ('CHAR','VARCHAR2','CLOB')
AND owner = 'ERP_OWNER';
-- 转换测试脚本(需在目标库执行)
CREATE TABLE charset_test AS
SELECT CONV
