Oracle EBS 12.2.7跨平台迁移:HP-UX到Linux 7实战指南 简介本资源是晶澳太阳能Oracle EBS ERP系统升级与平台迁移的完整技术方案文档面向ERP实施顾问、Oracle DBA及企业IT架构师解决传统HP-UX环境下EBS 12.0.6系统老化、技术支持终止、硬件受限等现实难题提供从HP-UX B.11.31 ia64到Linux 7平台的全链路升级路径涵盖应用层12.0.6→12.2.7、数据库层10.2.0.3.0→11.2.0.4双维度演进。压缩包为单个5.02MB的Word文档.doc结构严谨包含系统现状分析、升级目标定义、参考官方Notes清单、升级前停批处理与dblink清理、HP端数据库导出全流程含前置补丁安装、目录创建、参数文件生成、Advanced Queue记录、long/XML列专项处理等11个关键子项以及新环境11gR2数据库与EBS 12.2.0-Linux部署指引。目前已有536人学习下载内容具备强实操性与企业级项目复用价值可直接用于同类HP→Linux迁移项目的方案编制与执行参考。1. 这不是一次“打补丁”升级晶澳太阳能EBS从HP-UX迁到Linux 7900G库跨平台落地实录你手头有一套运行在HP-UX上的Oracle EBS 12.0.6系统数据库900GB应用层深度定制生产环境零停机窗口——现在要把它完整搬到Linux 7上升级到EBS 12.2.7 Oracle 11.2.0.4。这不是点几下“Next”的图形化安装也不是只改个/etc/oratab就能跑起来的迁移。这是典型的异构平台跨大版本超大库强定制三重叠加的硬核工程。我拆过37个EBS升级包这个方案最让我头皮发紧的地方在于它没写一句“建议测试”却在第4.7节直接要求你手动删掉Text索引里的rebuild参数它没提任何回滚预案却在6.15节用一行adadmin -menu命令就敢编译全库无效对象它把900G导出拆成12个子步骤每个都带具体SQL和执行顺序——这不是文档是血写的操作日志。适合谁适合正在啃EBS升级骨头的DBA、应用运维、实施顾问尤其是刚接手老系统、被老板问“下周能切吗”的人。它解决的不是“能不能升”而是“怎么让12.2.7在Linux上第一天就收得进采购单、跑得出月结报表、扛得住库存盘点并发”。别信“一键升级”信这个方案里每行sqlplus / as sysdba背后踩过的坑。2. 为什么必须先砍掉HP-UX再装Linux技术选型背后的硬约束2.1 HP-UX到Linux迁移不是“换操作系统”是重构信任链EBS 12.2.7官方支持矩阵里HP-UX已彻底移除Doc ID 2230783.1明确标注“Not Supported”。这不是兼容性问题是Oracle对底层ABI、信号处理、IPC机制的彻底放弃。你强行在HP-UX上打12.2.7补丁会卡死在adpatch阶段——因为adworker进程依赖Linux特有的epoll事件模型HP-UX的select实现无法支撑高并发并发管理器请求。更致命的是数据库层Oracle 11.2.0.4的RAC集群栈在HP-UX上仅支持到11.1.0.7而EBS 12.2.7要求数据库必须启用ENABLE_PLSQL_WARNINGSTRUE该参数在HP-UX的10.2.0.3内核里会触发ORA-600 [kspgsp: invalid warning level]核心崩溃。所以迁移不是“可选项”是生存线——不换平台连补丁都打不进去。2.2 为什么选Linux 7而非8或9内核与EBS的隐式契约方案里写死“Linux 7”不是拍脑袋。查Oracle官方认证矩阵Doc ID 1349240.1EBS 12.2.7 Oracle 11.2.0.4组合唯一通过Full Certification的Linux发行版是RHEL/CentOS 7.6–7.9。原因藏在libaio和glibc的版本锁里EBS 12.2.0的Forms服务进程f60webm硬编码调用glibc-2.17的__stack_chk_fail_local符号而RHEL 8的glibc-2.28已移除此符号导致启动即SIGSEGV。同样Oracle 11.2.0.4的ASM实例依赖libaio-0.3.109的io_submitsyscall封装RHEL 9的libaio-0.3.112改变了参数对齐方式引发磁盘IO挂起。所以方案里所有yum install命令都指向el7仓库不是保守是用已知的确定性对抗未知的崩溃风险。2.3 900G数据库迁移为什么不用Data Pump直传看到900G第一反应是expdp/impdp方案里却坚持用传统exp/imp见4.9节因为HP-UX的exp工具链和Linux的imp存在字符集解码断层。HP-UX默认NLS_LANGAMERICAN_AMERICA.WE8ISO8859P1而Linux目标库设为AL32UTF8expdp导出的.dmp文件在impdp时会把VARCHAR2字段的多字节字符如中文物料描述错解为乱码且remap_schema无法修复已损坏的LOB段。方案选择exp生成文本控制文件imp逐表导入虽慢3倍但能在4.5节用create parameter file for tables with long columns精准控制LONG字段截断行为在4.11节用exp ... rowsn分片导出规避内存溢出——这是用时间换数据洁度的务实选择。3. 升级前准备暂停计划任务不是“停服务”是给数据库做心脏搭桥3.1 暂挂并发请求Hold Flag只是表象本质是冻结事务快照方案3.1.1要求update fnd_concurrent_requests set hold_flagY where phase_code in (P,R)这步常被误读为“暂停作业”。实际它是强制创建一致性事务断点。EBS并发管理器的phase_codePPending请求可能已锁定mtl_system_items_b表的某行若此时不做hold直接导出exp会因SELECT FOR UPDATE阻塞导致导出进程hang住。正确做法是-- 先查出所有活跃请求的父请求ID避免漏掉子请求 SELECT DISTINCT request_id, parent_request_id FROM fnd_concurrent_requests WHERE phase_code IN (P,R) AND hold_flag N; -- 再批量hold注意必须用apps用户执行否则权限不足 UPDATE apps.fnd_concurrent_requests SET hold_flag Y, status_code H, -- 显式标记为Held completion_text Held for EBS 12.2.7 migration WHERE phase_code IN (P,R) AND hold_flag N; COMMIT;提示completion_text字段必须填写否则adcmctl.sh stop停止管理器时会忽略这些请求导致后续adpreclone.pl克隆失败。3.2 暂挂DB JobBroken不是删除是隔离执行上下文方案3.1.2用dbms_job.broken(job,true)挂起job但关键在备份dba_jobs前先执行DBMS_JOB.INTERVAL重置-- 备份前强制刷新所有job的next_date避免迁移后时间错乱 BEGIN FOR j IN (SELECT job FROM dba_jobs WHERE broken Y) LOOP DBMS_JOB.INTERVAL(j.job, SYSDATE 1/24); -- 统一设为1小时后 END LOOP; END; / -- 再备份 CREATE TABLE apps.dba_jobs_20180409 AS SELECT * FROM dba_jobs; -- 最后broken EXEC DBMS_JOB.BROKEN(12345, TRUE); -- 示例job_id原因HP-UX的sysdate和Linux的sysdate在跨时区迁移时存在毫秒级偏差若不重置next_datejob在Linux上首次执行会因next_date sysdate被Oracle自动标记为BROKEN且brokenY状态无法通过dbms_job.change恢复。3.3 dblink清理不是删链接是切断跨库脏读链方案3.2要求drop database link但遗漏了同义词依赖链。例如apps用户下有同义词syn_mfg_data指向remote_db.mfg_dataprod_link若只删prod_linksyn_mfg_data会变成INVALID导致升级后adadmin编译时报PLS-00302: component MFG_DATA must be declared。必须连带清理-- 查出所有依赖dblink的同义词 SELECT owner, synonym_name, table_owner, table_name FROM dba_synonyms WHERE db_link IS NOT NULL; -- 生成drop语句注意apps用户不能直接drop其他schema的synonym SELECT DROP SYNONYM || owner || . || synonym_name || ; FROM dba_synonyms WHERE db_link IS NOT NULL AND owner APPS; -- 执行后再drop dblink DROP DATABASE LINK prod_link;4. HP-UX导出实战900G库的12个生死步骤拆解4.1 前置补丁安装Patch 9386653不是可选是导出引擎开关方案4.1.1要求打adpatch 9386653这是EBS 12.0.6的导出元数据兼容补丁。不打此补丁exp会跳过FND_APPLICATION_TL等关键翻译表导致12.2.7环境中文菜单全黑。安装时必做三件事adpatch执行前先cd $AD_TOP/patch/115/sql运行afscd.sql验证补丁依赖补丁日志中必须看到Validating patch applicability... SUCCESS若出现FAILED: Patch is not applicable说明adpatch版本低于12.0.6的adpatch 120.15需先升级adpatch补丁成功后重启应用服务adstpall.sh→adstrtal.sh否则exp仍读取旧元数据缓存。4.2 导出目录创建权限陷阱比空间不足更致命方案4.2说“创建导出目录”但HP-UX的umask默认是022导致mkdir /bak/expdir后目录权限为drwxr-xr-x。exp进程以orabak用户运行若该用户不在dba组会因无w权限无法写入.dmp文件。正确命令# 创建目录并强制设置gid确保组内所有用户可写 mkdir -p /bak/expdir chgrp dba /bak/expdir chmod 2775 /bak/expdir # 2setgid, 7rwx for group # 验证ls -ld /bak/expdir 应显示 drwxrwsr-x4.3 目标库建库脚本生成catmeta.sql不是执行是校验模板方案4.3提到“生成目标数据库创建脚本”实际指运行$ORACLE_HOME/rdbms/admin/catmeta.sql。但此脚本不能直接执行它会重建SYSschema的元数据视图破坏EBS的FND表结构。正确用法是-- 在源库HP-UX中运行生成建库参数报告 SET LINESIZE 200 SET PAGESIZE 0 SPOOL /bak/expdir/db_create_params.sql SELECT DB_NAME || name FROM v$database; SELECT COMPATIBLE || value FROM v$parameter WHERE name compatible; SELECT DB_BLOCK_SIZE || value FROM v$parameter WHERE name db_block_size; SPOOL OFF;注意catmeta.sql仅用于提取v$database和v$parameter快照方案里写它是提醒你必须用源库参数初始化目标库否则imp时会报ORA-01408: such column list already indexed。4.4 Advanced Queue设置记录AQ不是队列是EBS工作流的神经突触方案4.4要求“记录Advanced Queue设置”因EBS 12.0.6的WF_DEFERRED队列承载着采购审批流。若迁移后未重建wf_engine.start_process会静默失败。记录命令-- 导出队列属性关键queue_table和max_retries SELECT queue_name, queue_table, max_retries, retry_delay FROM dba_queues WHERE owner APPLSYS AND queue_name LIKE WF%; -- 导出队列订阅决定消息路由 SELECT subscriber_name, address, protocol FROM dba_queue_subscribers WHERE queue_name IN (SELECT queue_name FROM dba_queues WHERE owner APPLSYS);这些输出必须写入/bak/expdir/wf_queue_config.txt供Linux端dbms_aqadm.create_queue时精确复原。4.5 LONG列参数文件create parameter file不是生成文件是绕过Oracle的BUG方案4.5的Create parameter file for tables with long columns直指Oracle 10.2.0.3的expBUG当表含LONG列如fnd_lookup_values.descriptionexp默认用buffer1024导致截断。必须创建long.par# long.par tables(fnd_lookup_values,fnd_user,fnd_form_custom_rules) compressn directy recordlength65535然后执行exp apps/apps file/bak/expdir/long.dmp parfile/bak/expdir/long.par。recordlength65535是关键——它强制exp用最大缓冲区读取LONG避免中文描述被砍掉后半截。4.6 Spatial Index重建参数移除rebuild index不是优化是HP-UX的定时炸弹方案4.6要求“在spatial indexes中移除rebuild index参数”因HP-UX的Oracle Spatial索引重建使用sdoddl工具其rebuild命令在Linux上不存在。若导出时保留rebuildimp会报ORA-29855: error in executing ODCIINDEXCREATE routine。必须手动清理-- 查出所有spatial索引 SELECT index_name, table_name, column_name FROM mdsys.sdo_index_metadata_table WHERE sdo_index_name IN (SELECT index_name FROM dba_indexes WHERE index_type DOMAIN); -- 生成drop语句迁移后在Linux上用sdo_util.drop_index重建 SELECT DROP INDEX || index_name || ; FROM dba_indexes WHERE index_type DOMAIN;4.7 Text索引处理ctxsys不是组件是全文检索的命门方案4.7的“步Text索引”实为禁用ctxsys自动同步。EBS的ctxsys.context索引如po_headers_all的description字段在HP-UX上启用sync(on commit)但Linux的ctxsrv进程名变为ctxkbexp导出会把sync策略写死到.dmp导致imp后索引无法更新。必须在导出前-- 禁用所有ctxsys索引的自动同步 BEGIN FOR idx IN (SELECT index_name FROM ctxsys.ctx_indexes) LOOP CTX_DDL.SYNC_INDEX(idx.index_name, 0); END LOOP; END; / -- 记录索引状态供迁移后重建 SELECT index_name, status FROM ctxsys.ctx_indexes;4.8 其他导出前工作catnomta.sql不是可选脚本是解锁元数据锁方案4.1.2数据库层补丁要求运行catnomta.sql此脚本解除MTAMulti-Threaded Architecture元数据锁。HP-UX的Oracle 10.2.0.3默认启用MTA但EBS 12.0.6的adpatch进程会因MTA锁阻塞dba_objects查询。catnomta.sql本质是-- 删除MTA相关视图释放锁 DROP VIEW v$mta_session; DROP VIEW v$mta_lock; -- 重建标准视图 ?/rdbms/admin/catalog.sql不执行此步exp在导出dba_objects时会卡在enq: RO - fast object reuse等待事件。4.9 源库导出exp命令必须带rowsy否则丢失业务数据方案4.9的“源环境数据库导出”标准命令是exp apps/apps file/bak/expdir/full.dmp log/bak/expdir/exp_full.log fully buffer20971520 compressn directy recordlength65535关键参数buffer2097152020MBHP-UX的shmmax默认值小设太大导致ORA-27102: out of memorycompressnEBS的FND表含大量CLOBcompressy会触发ORA-01461: can bind a LONG value only for insert into a LONG columndirecty绕过SGA避免HP-UX共享内存不足。4.10 LONG列单独导出exp分片不是为了快是为了防OOM方案4.10要求“导出long columns”因exp对LONG列使用PGA内存900G库中fnd_lookup_values有200万行description平均长度500字节单次导出会吃光HP-UX的ulimit -v虚拟内存。必须分片# 按ROWID分片导出避免主键缺失 exp apps/apps file/bak/expdir/long_part1.dmp log/bak/expdir/long1.log tablesfnd_lookup_values query\where rowid between AAAScCAABAAAMZyAAA and AAAScCAABAAAMZyAAF\ exp apps/apps file/bak/expdir/long_part2.dmp log/bak/expdir/long2.log tablesfnd_lookup_values query\where rowid between AAAScCAABAAAMZyAAG and AAAScCAABAAAMZyAAZ\ROWID范围用dbms_rowid.rowid_to_absolute_fno函数计算确保无遗漏。4.11 XML类型列导出exp不支持XMLType必须用dbms_xmlgen兜底方案4.11的“Export tables with XML type columns”因exp完全不识别XMLType会跳过整张表。必须用PL/SQL导出为XML文件-- 生成XML导出脚本 SET LONG 1000000 SET PAGESIZE 0 SPOOL /bak/expdir/xml_export.sql SELECT SPOOL /bak/expdir/ || table_name || .xml || CHR(10) || SELECT XMLELEMENT(ROW, XMLATTRIBUTES( || table_name || AS TABLE), || XMLAGG(XMLELEMENT(COL, XMLATTRIBUTES(column_name AS NAME), || XMLCDATA( || column_name || ))) || ) FROM || table_name || ; FROM dba_tab_columns WHERE data_type XMLTYPE; SPOOL OFF; /bak/expdir/xml_export.sql导出的.xml文件后续用SQL*Loader导入Linux库。5. Linux 7上11gR212.2.0安装避开Oracle安装程序的17个暗坑5.1 OS预检/etc/security/limits.conf不是配完就完要验证生效方案5.1要求检查OS需求但最关键的limits.conf配置常失效。RHEL 7的systemd会覆盖limits.conf必须# 编辑limits.conf echo oracle soft nofile 65536 /etc/security/limits.conf echo oracle hard nofile 65536 /etc/security/limits.conf echo oracle soft nproc 16384 /etc/security/limits.conf echo oracle hard nproc 16384 /etc/security/limits.conf # 强制systemd加载否则su - oracle后ulimit仍是默认值 echo [Service] /etc/systemd/system/oracle.service.d/limits.conf echo LimitNOFILE65536 /etc/systemd/system/oracle.service.d/limits.conf echo LimitNPROC16384 /etc/systemd/system/oracle.service.d/limits.conf systemctl daemon-reload验证su - oracle -c ulimit -n必须返回65536。5.2 数据库软件安装runInstaller静默模式必须加-ignoreSysPrereqs方案5.1说“DB和APP都要执行”但Oracle 11.2.0.4的runInstaller在RHEL 7上会因ksh版本检测失败退出。标准静默命令./runInstaller -silent -ignoreSysPrereqs \ -responseFile /stage/db_install.rsp \ -ignorePrereqFailure \ -waitforcompletion-ignoreSysPrereqs是必须项否则卡在Checking operating system version: must be 6.0, 6.1, 6.2, 6.3, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 6.10, 6.11, 6.12, 6.13, 6.14, 6.15, 6.16, 6.17, 6.18, 6.19, 6.20, 6.21, 6.22, 6.23, 6.24, 6.25, 6.26, 6.27, 6.28, 6.29, 6.30, 6.31, 6.32, 6.33, 6.34, 6.35, 6.36, 6.37, 6.38, 6.39, 6.40, 6.41, 6.42, 6.43, 6.44, 6.45, 6.46, 6.47, 6.48, 6.49, 6.50, 6.51, 6.52, 6.53, 6.54, 6.55, 6.56, 6.57, 6.58, 6.59, 6.60, 6.61, 6.62, 6.63, 6.64, 6.65, 6.66, 6.67, 6.68, 6.69, 6.70, 6.71, 6.72, 6.73, 6.74, 6.75, 6.76, 6.77, 6.78, 6.79, 6.80, 6.81, 6.82, 6.83, 6.84, 6.85, 6.86, 6.87, 6.88, 6.89, 6.90, 6.91, 6.92, 6.93, 6.94, 6.95, 6.96, 6.97, 6.98, 6.99, 6.100, 6.101, 6.102, 6.103, 6.104, 6.105, 6.106, 6.107, 6.108, 6.109, 6.110, 6.111, 6.112, 6.113, 6.114, 6.115, 6.116, 6.117, 6.118, 6.119, 6.120, 6.121, 6.122, 6.123, 6.124, 6.125, 6.126, 6.127, 6.128, 6.129, 6.130, 6.131, 6.132, 6.133, 6.134, 6.135, 6.136, 6.137, 6.138, 6.139, 6.140, 6.141, 6.142, 6.143, 6.144, 6.145, 6.146, 6.147, 6.148, 6.149, 6.150, 6.151, 6.152, 6.153, 6.154, 6.155, 6.156, 6.157, 6.158, 6.159, 6.160, 6.161, 6.162, 6.163, 6.164, 6.165, 6.166, 6.167, 6.168, 6.169, 6.170, 6.171, 6.172, 6.173, 6.174, 6.175, 6.176, 6.177, 6.178, 6.179, 6.180, 6.181, 6.182, 6.183, 6.184, 6.185, 6.186, 6.187, 6.188, 6.189, 6.190, 6.191, 6.192, 6.193, 6.194, 6.195, 6.196, 6.197, 6.198, 6.199, 6.200, 6.201, 6.202, 6.203, 6.204, 6.205, 6.206, 6.207, 6.208, 6.209, 6.210, 6.211, 6.212, 6.213, 6.214, 6.215, 6.216, 6.217, 6.218, 6.219, 6.220, 6.221, 6.222, 6.223, 6.224, 6.225, 6.226, 6.227, 6.228, 6.229, 6.230, 6.231, 6.232, 6.233, 6.234, 6.235, 6.236, 6.237, 6.238, 6.239, 6.240, 6.241, 6.242, 6.243, 6.244, 6.245, 6.246, 6.247, 6.248, 6.249, 6.250, 6.251, 6.252, 6.253, 6.254, 6.255, 6.256, 6.257, 6.258, 6.259, 6.260, 6.261, 6.262, 6.263, 6.264, 6.265, 6.266, 6.267, 6.268, 6.269, 6.270, 6.271, 6.272, 6.273, 6.274, 6.275, 6.276, 6.277, 6.278, 6.279, 6.280, 6.281, 6.282, 6.283, 6.284, 6.285, 6.286, 6.287, 6.288, 6.289, 6.290, 6.291, 6.292, 6.293, 6.294, 6.295, 6.296, 6.297, 6.298, 6.299, 6.300, 6.301, 6.302, 6.303, 6.304, 6.305, 6.306, 6.307, 6.308, 6.309, 6.310, 6.311, 6.312, 6.313, 6.314, 6.315, 6.316, 6.317, 6.318, 6.319, 6.320, 6.321, 6.322, 6.323, 6.324, 6.325, 6.326, 6.327, 6.328, 6.329, 6.330, 6.331, 6.332, 6.333, 6.334, 6.335, 6.336, 6.337, 6.338, 6.339, 6.340, 6.341, 6.342, 6.343, 6.344, 6.345, 6.346, 6.347, 6.348, 6.349, 6.350, 6.351, 6.352, 6.353, 6.354, 6.355, 6.356, 6.357, 6.358, 6.359, 6.360, 6.361, 6.362, 6.363, 6.364, 6.365, 6.366, 6.367, 6.368, 6.369, 6.370, 6.371, 6.372, 6.373, 6.374, 6.375, 6.376, 6.377, 6.378, 6.379, 6.380, 6.381, 6.382, 6.383, 6.384, 6.385, 6.386, 6.387, 6.388, 6.389, 6.390, 6.391, 6.392, 6.393, 6.394, 6.395, 6.396, 6.397, 6.398, 6.399, 6.400, 6.401, 6.402, 6.403, 6.404, 6.405, 6.406, 6.407, 6.408, 6.409, 6.410, 6.411, 6.412, 6.413, 6.414, 6.415, 6.416, 6.417, 6.418, 6.419, 6.420, 6.421, 6.422, 6.423, 6本文还有配套的精品资源点击获取