
简介这份PDF文档面向具备Linux与Oracle数据库基础的技术人员尤其是负责Oracle EBS系统安装、配置与维护的IT专业人员系统讲解Oracle EBS R12.1.1至R12.1.3在生产环境下的部署全流程。内容覆盖Oracle Linux系统安装与网络、SSH、VNC等环境配置EBS安装与升级数据库升级以及Oracle Application Server 10g的安装升级并针对常见问题给出解决方案可帮助读者完成从操作系统准备到应用服务器部署的各环节操作。资源包共1个PDF文件约844KB篇幅紧凑但目录结构完整便于按章节检索查阅。目前已有953人学习下载。文档步骤详尽、注意事项明确适合作为生产环境部署时的对照手册也可用于排查安装升级中的疑难问题建议读者先熟悉Linux与Oracle数据库基础再严格按步骤执行并多次验证关键环节。1. 装完 EBS 打不开登录页一个把老手也拖进坑的 FRM-92050Oracle EBS R12.1 这套东西装的时候觉得步骤都照着走了真正让人崩溃的是装完之后浏览器一打开就给你甩一句FRM-92050: Failed to connect to the Server: /forms/lservlet: -1。这个报错在 R12.1 生产环境部署里出现频率极高尤其是从 R12.1.1 一路升到 R12.1.3、又换过 IP、动过 OracleAS 10g 的环境几乎躲不掉。它折腾人的地方在于应用服务看着是起来的adop阶段也没报错可登录页就是连不上 Forms 服务新手会以为是安装失败想重装老手则知道要去翻 lservlet 和 FNDFS 的监听。这篇笔记按「现象—根因—解决—预防」把 R12.1 安装升级里最容易翻车的几类故障拆开讲适合正在部署或升级 EBS 的 Linux 与 Oracle 数据库技术人员对照排查。2. 登录页连不上 FormsFRM-92050 与 FNDFS 监听的三层排查FRM-92050是 R12.1 环境里最典型的「装完了但用不了」故障。它的表象是浏览器能打开 EBS 首页点登录后 Forms 区域一片空白或直接弹错误后台日志里往往还夹着TNS listener on node FNDFS_ may not be running或者Copy Functionality fails with TNSFNDFS_ error。这一章把这条链路从应用层到监听层拆成三层逐层定位。2.1 先分清是 lservlet 挂了还是 FNDFS 监听没起很多人一看到 FRM-92050 就去重启应用结果重启完还是报。正确的顺序是先确认 Forms 服务进程和 FNDFS 监听到底哪个没起来。R12.1 的 Forms 走的是 OracleAS 10g 里的lservlet而附件、复制功能依赖FNDFS_这个 TNS 别名对应的监听。两者挂一个都会报类似的连接失败。先在应用层确认 Forms 服务状态# 切换到 applmgr 用户加载应用环境变量 su - applmgr cd $ADMIN_SCRIPTS_HOME # 查看 Forms 相关进程是否存在frmweb、lservlet 所在容器 ps -ef | grep -i frmweb | grep -v grep ps -ef | grep -i lservlet | grep -v grep # 用 adop 的 status 看应用整体状态 adop -status这段命令的逻辑是ps确认frmweb进程在不在adop -status确认应用补丁周期没有卡在某个阶段导致服务没真正起来。如果frmweb不存在问题在应用层往下看 2.2如果进程在但登录仍报错重点转向 FNDFS 监听看 2.3。参数说明$ADMIN_SCRIPTS_HOME是应用管理员脚本目录R12.1 里通常是$APPL_TOP/admin/SID_hostname/scriptsadop -status只读不会改动环境可以放心在生产上跑。2.2 应用层确认 Autoconfig 之后服务是否真的重启过R12.1 升级到 R12.1.3 之后要跑AutoConfig很多人跑完 Autoconfig 就直接去浏览器验证忘了 Autoconfig 只改配置文件不会自动重启服务。结果配置文件是新的运行中的进程还是旧的Forms 连的还是旧端口或旧主机名自然报 FRM-92050。常见做法是 Autoconfig 之后强制走一遍停起su - applmgr cd $ADMIN_SCRIPTS_HOME # 先停应用会连带停 CM、Forms、Web 等 adstpall.sh apps/apps密码 # 确认没有残留进程 ps -ef | grep -E frmweb|httpd|opmn | grep -v grep # 再启动 adstrtal.sh apps/apps密码逻辑说明adstpall.sh和adstrtal.sh是 R12.1 标准的全停全起脚本参数是 APPS 数据库用户和密码。停完之后一定要ps确认没有残留的frmweb或opmn进程否则旧进程占着端口新进程起不来表面看启动脚本返回成功实际 Forms 还是旧的。这一步是血泪经验启动脚本返回 0 不代表服务真的健康。如果adstrtal.sh报某个服务启动失败去$APPLRGF/SID_hostname.env对应的日志目录看adstrtal的详细输出别只看终端最后一行。2.3 监听层FNDFS_ 别名和 TNS 配置对不上FNDFS 是 EBS 用来做附件和复制功能的文件服务它依赖tnsnames.ora里一个叫FNDFS_hostname的别名。升级或换 IP 之后如果tnsnames.ora里的主机名还是旧的或者监听器没重新加载就会报TNS listener on node FNDFS_ may not be running。检查并修复的步骤# 以 DB 用户查看监听状态 su - oracle lsnrctl status # 确认 FNDFS 别名解析到当前主机 tnsping FNDFS_$(hostname) # 如果解析失败检查 tnsnames.ora 中对应条目 grep -A5 FNDFS_ $TNS_ADMIN/tnsnames.ora逻辑说明lsnrctl status看监听器是否在跑、注册了哪些服务tnsping验证 FNDFS 别名能否解析到当前主机grep直接定位tnsnames.ora里的条目。如果tnsping失败说明别名里的 HOST 写的是旧主机名或旧 IP需要改成当前值后lsnrctl reload。参数说明$TNS_ADMIN在 R12.1 里通常指向$ORACLE_HOME/network/admin但 EBS 环境有时会用$TNS_ADMIN_CONTEXT_NAME以实际环境变量为准。改完tnsnames.ora后必须lsnrctl reload只改文件不 reload 监听器不会生效。提示换过 IP 的环境除了tnsnames.ora还要检查$CONTEXT_FILE里的主机名跑一次 Autoconfig 让所有配置文件同步否则改了一处另一处还是旧的。3. 升级到 R12.1.3 卡在 adpatch补丁 9239090 与表空间不足R12.1.1 升 R12.1.3 的核心动作是打补丁 9239090中间还要先打 9239089、多语言加速包 8576725再编译 APPS schema。这一路最容易卡在两个地方adpatch跑到一半报错退出或者报临时表空间不足。这一章把升级链路的顺序和两个高频卡点讲透。3.1 补丁顺序错了会白跑9239089 必须在 9239090 之前R12.1.3 升级不是打一个补丁就完事官方文档Doc ID 1077769.1给的顺序是先启用维护模式打 9239089再打 9239090中间穿插多语言加速包和 APPS schema 编译。顺序错了adpatch会在依赖检查阶段直接失败或者打完之后应用起不来。标准顺序整理成一张对照表照着走不会乱步骤动作关键点1启用维护模式adadmin里选维护模式关闭应用层2打补丁 9239089前置补丁必须先于 92390903多语言加速包 8576725中文环境必打否则语言补丁失败4打补丁 9239090R12.1.3 主升级补丁5编译 APPS schemaadadmin编译耗时长别中断6打 9817770 和 9966055升级后补充补丁7跑 AutoConfig同步所有配置文件这张表的价值在于把「先打哪个、后打哪个」固定下来。实际翻车最多的是第 2 步和第 4 步顺序颠倒或者漏了第 3 步导致中文语言补丁报错。打补丁前先在测试环境完整走一遍记录每步耗时生产上按记录的时间窗口安排别凭感觉估。3.2 adpatch 报临时表空间不足扩表空间而不是重启补丁adpatch跑到一半报临时表空间不足是 R12.1.3 升级里最常见的硬中断。原因是 9239090 涉及大量表结构变更和索引重建默认的 TEMP 表空间往往不够。很多人第一反应是重启adpatch结果重启后还是不够反复几次把补丁状态搞乱。正确做法是先扩临时表空间再让adpatch从失败点继续-- 以 APPS 或 DBA 身份登录数据库 -- 查看当前临时表空间使用和大小 SELECT tablespace_name, bytes/1024/1024 AS mb FROM dba_temp_files; -- 给 TEMP 增加一个数据文件路径按实际环境改 ALTER TABLESPACE TEMP ADD TEMPFILE /u01/oradata/PROD/temp02.dbf SIZE 4G AUTOEXTEND ON NEXT 512M MAXSIZE 32G;逻辑说明先查dba_temp_files确认当前 TEMP 有多大、有几个文件再ADD TEMPFILE扩容。AUTOEXTEND ON让它在补丁过程中自动增长避免再次中断。扩完之后回到adpatch会话它会提示是否重试当前失败的动作选重试即可不需要从头打。参数说明SIZE 4G是初始大小按补丁规模调整9239090 这种大补丁建议初始就给 4G 以上MAXSIZE 32G是上限防止无限增长撑爆磁盘。路径必须和现有数据文件在同一存储上别指到空间不足的挂载点。注意扩表空间前先df -h看磁盘剩余TEMP 扩了但磁盘满了会更麻烦。生产环境建议在升级窗口前就把 TEMP 预留到足够大。3.3 编译 APPS schema 中断后怎么续adadmin编译 APPS schema 是升级里最耗时的步骤之一几小时起步。中途如果因为会话断开或机器重启中断不要慌着重跑整个编译。adadmin支持从上次中断处继续重新进adadmin选编译选项时会提示是否继续未完成的编译。关键是中断后先确认没有残留的编译进程在跑再重新进adadmin否则两个编译进程同时跑会锁冲突。4. 数据库升级到 11.2.0.4DBUA 报错与 ORA-12547 的连环坑R12.1.3 应用层升完之后数据库要从原来的版本升到 11.2.0.4。这一步用 DBUA 图形化升级看着简单实际坑不少DBUA 中途报错、升级完监听连不上、ORA-12547: TNS:lost contact反复出现。这一章按升级前、升级中、升级后三段拆。4.1 升级前必须确认的三件事DBUA 升级失败很多时候不是 DBUA 本身的问题是升级前没准备好。我一般强制确认三件事第一原库的initPROD.ora里参数和 11.2.0.4 兼容特别是disable_fast_validate这类 EBS 专用参数要提前加第二oraInventory目录权限正确DBUA 要写这个目录第三原库有完整备份且备份可恢复。检查oraInventory权限# 确认 oraInventory 属主和权限 ls -ld $ORACLE_BASE/oraInventory # 应为 oracle:oinstall权限 770 或 775 # 如果属主不对修正 chown -R oracle:oinstall $ORACLE_BASE/oraInventory chmod -R 775 $ORACLE_BASE/oraInventory逻辑说明DBUA 升级过程中会往oraInventory写组件信息权限不对会在升级中途报写入失败而且报错信息往往很模糊不直接指向权限。提前ls -ld确认属主是oracle:oinstall能省掉一轮排查。参数说明$ORACLE_BASE按实际环境EBS 环境里 DB 的ORACLE_BASE和应用层是分开的别改错目录。4.2 ORA-12547: TNS:lost contact 的定位顺序ORA-12547在数据库升级后特别常见尤其是升级完监听器重建、TNS 配置更新之后。它的本质是客户端能连到监听端口但监听转交给数据库进程时断了。定位顺序是先看监听器日志再看数据库 alert 日志最后看sqlnet.ora的认证配置。# 1. 看监听器日志里对应连接的错误 tail -100 $ORACLE_BASE/diag/tnslsnr/$(hostname)/listener/trace/listener.log # 2. 看数据库 alert 日志有没有进程启动失败 tail -100 $ORACLE_BASE/diag/rdbms/prod/PROD/trace/alert_PROD.log # 3. 检查 sqlnet.ora 认证方式 cat $TNS_ADMIN/sqlnet.ora | grep -i authentication逻辑说明监听器日志会记录每次连接转交的结果如果看到TNS-12547伴随no such file or directory多半是oracle可执行文件权限或路径问题alert 日志里如果有ORA-27300系列说明是 OS 层资源限制sqlnet.ora里SQLNET.AUTHENTICATION_SERVICES配置不当也会导致本地连接失败。参数说明diag路径在 11g 之后是标准结构rdbms/prod/PROD里的prod是实例名小写、PROD是实例名大写按实际 SID 替换。常见根因是升级后$ORACLE_HOME/bin/oracle的权限被改掉了正确权限是-rwsr-s--x属主oracle:oinstall。权限不对时本地sqlplus / as sysdba也会报 ORA-12547这个特征很好认。4.3 升级后监听器和 TNS 要重建DBUA 升级完不会自动帮你重建监听器和 TNS 条目很多人升级完发现应用连不上就是因为监听器还指向旧ORACLE_HOME。标准做法是用netca重建监听器再手工补tnsnames.ora里的 EBS 相关别名。# 用新 ORACLE_HOME 的 netca 重建监听 $ORACLE_HOME/bin/netca /silent /responsefile $ORACLE_HOME/network/install/netca_typ.rsp # 确认监听指向新 ORACLE_HOME lsnrctl status | grep Oracle Home逻辑说明netca静默模式按响应文件重建监听器lsnrctl status输出里的Oracle Home一行能直接确认监听器用的是不是新ORACLE_HOME。如果还是旧的说明环境变量ORACLE_HOME没切过来或者监听器没停干净就重建了。参数说明netca_typ.rsp是 netca 自带的典型响应文件静默重建够用如果要自定义端口改响应文件里的LISTENER_PORT。5. 避坑清单R12.1 安装升级里最容易翻车的五个点这一章把前面没展开、但实际部署里反复出现的坑集中列出来每条按「现象 → 原因 → 解决」写都是踩过之后才记住的。坑一Device eth0 does not seem to be present, delaying initialization现象克隆或换机后网卡起不来报这个错。原因网卡 MAC 地址变了但/etc/sysconfig/network-scripts/ifcfg-eth0里还绑着旧 MAC或者70-persistent-net.rules里残留旧规则。解决删掉ifcfg-eth0里的HWADDR行清空/etc/udev/rules.d/70-persistent-net.rules重启网络服务。EBS 克隆场景下这个坑几乎必踩。坑二java.io.FileNotFoundException出现在数据库克隆时现象克隆 DB 过程中报文件找不到。原因克隆脚本引用的目录在原机上存在、目标机上没建或者oraInventory路径不一致。解决克隆前在目标机建好所有源端引用的目录确认oraInventory路径和源端一致再跑克隆。坑三Rapidwiz Fails With Error Opening libdb-4.3.so现象跑 Rapidwiz 装应用时报打不开libdb-4.3.so。原因OS 缺少兼容库或者LD_LIBRARY_PATH没包含库所在目录。解决确认libdb-4.3.so存在把其目录加进LD_LIBRARY_PATH必要时装兼容包。这个坑在较新的 Linux 上装老版本 EBS 时特别常见。坑四ORA-20011: Approximate NDV failed: ORA-00600现象收集统计信息时报表函数报 ORA-00600。原因近似 NDV 计算在特定数据分布下触发内部错误。解决收集统计信息时加estimate_percent DBMS_STATS.AUTO_SAMPLE_SIZE或改用精确采样绕开近似计算路径。坑五You do not have permission to access this functionality现象登录后点某个功能报无权限。原因职责或菜单授权没同步或者升级后FND权限数据没刷新。解决确认用户职责正确跑一次权限同步检查FND_RESPONSIBILITY相关视图数据是否完整。提示这五条里前三条属于环境准备类后两条属于数据类。环境类的坑在部署前一次性检查能全部规避数据类的坑要在升级后主动验证。6. 快速定位这类问题的通用套路先看日志再动手R12.1 这套环境的故障有个共同特征表面报错和真实根因往往隔了好几层。FRM-92050 看着是 Forms 问题根因可能在 TNS 别名ORA-12547 看着是连接问题根因可能在文件权限。所以定位顺序比具体命令更重要。我一般按下面这个顺序走能覆盖八成以上的故障。排查层先看什么典型线索应用层adop -status、adstrtal日志服务是否真起来、补丁周期是否卡住进程层ps -ef查 frmweb/opmn/httpd进程在不在、有没有残留旧进程监听层lsnrctl status、tnsping监听指向哪个 ORACLE_HOME、别名能否解析数据库层alert 日志、dba_temp_files进程启动失败、表空间不足OS 层df -h、ulimit -a、文件权限磁盘满、资源限制、权限错这张表的用法是自上而下逐层排除不要跳层。比如 FRM-92050先确认应用层服务起来没有再看进程再看监听最后才怀疑数据库。跳层排查的代价是可能在一个不是根因的层上折腾半天。几个快速验证的小技巧tnsping比sqlplus快先tnsping确认别名通不通lsnrctl status输出里的Oracle Home一行能一秒判断监听器有没有指错adop -status是只读的生产上随时可以跑先看它比看日志快。日志位置也要记牢应用层日志在$APPLRGF/SID_hostname数据库 alert 在$ORACLE_BASE/diag/rdbms/dbname/SID/trace监听器日志在$ORACLE_BASE/diag/tnslsnr/hostname/listener/trace。这三个路径覆盖了绝大多数故障的第一现场。从那以后我每次动 EBS 环境不管是打补丁、换 IP 还是克隆都强制先跑一遍adop -status加lsnrctl status加tnsping三件套把当前状态记下来出问题时一对比就知道哪一层变了。这个习惯帮我省掉了无数次「重启试试」的盲目操作。希望这套排查顺序能帮到你少走几段弯路。本文还有配套的精品资源点击获取