ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

深入解析FRM-92095:Oracle JInitiator版本过旧问题的排查与更新指南

深入解析FRM-92095:Oracle JInitiator版本过旧问题的排查与更新指南 简介Oracle E-Business SuiteEBS用户在登录Form时若遇到FRM-92095错误提示Oracle JInitiator版本太旧可直接使用这份PDF作为排错参考。内容围绕2014年微软启用的Out-of-date ActiveX control blocking特性展开说明该特性如何拦截旧版JRE插件并给出两种解决路径一是将JInitiator升级到1.1.8.2或更高版本二是将EBS站点加入IE信任区域以绕过拦截文中还引用了Oracle官方文档Doc ID 389422.1的推荐做法。此外内容还特别提醒不要盲目升级Java以免引发其他登录问题。整个资源为单个PDF文件体积约250KB内容紧凑、便于快速查阅适合EBS运维人员、DBA以及被浏览器提示Java已阻止的用户应急使用。目前已有181人学习下载。1. 当弹出“FRM-92095: Oracle JInitiator 版本太旧”时别先动 JAVA_HOME当用户在 IE 里输完成 EBS 职责的密码紧接着弹出FRM-92095: Oracle JInitiator 版本太旧请安装版本 1.1.8.2 或更高版本时第一反应别去动 JAVA_HOME。这个错误和 oracle 监听服务无法启动、oracle 11g 是否安装到位都没有关系问题出在浏览器加载的 JInitiator 插件版本低于服务器期望值。JInitiator 是 Oracle 基于 JRE 1.1.8 封装的 Forms 客户端运行时服务器要求至少 1.1.8.2浏览器实际加载的更老或者注册表里的版本串损坏Forms Applet 自检不过就弹这个错。所谓“java 更新”在 JInitiator 场景里指的是更新它内置的那套 JRE不是系统 JDK。网上流传的处理 PDF 大多只写“装 1.1.8.2”但真正麻烦的是装完仍弹错。下面按一线处理顺序展开先说版本校验逻辑再给 JInitiator 1.1.8.2 的安装与注册表校验步骤处理装完仍报错的 IE 与 formsweb.cfg 参数最后给一条巡检脚本定位隐藏旧版本。2. JInitiator 算哪种 JavaJRE 1.1.8 和系统 java 的版本冲突JInitiator 在 Windows 上的安装形态是一组目录和一个浏览器加载项它不是系统 JDK也不是你今天从 Oracle 官网下载的 JRE 8/17。JInitiator 1.1.8.2 自带的是 JRE 1.1.8 的类库放在它自己的lib\rt.jar里。Forms Applet 启动时通过插件 CLSID 找到这个目录加载oracle.forms.engine.FormsLauncher整个过程中 PATH 里的java.exe基本不参与。于是产生了一个很常见的误判命令行里java -version显示 1.8.0_351就认为 Java 环境是新的FRM-92095 不该出现。实际上这两个 Java 互不相干。2.1 先执行一次 java -version再找 JInitiator 自己的 java.exeC:\Program Files (x86)\Oracle\JInitiator 1.1.8.2\bin\java.exe -version 21如果安装目录在C:\Program Files\Oracle\JInitiator 1.1.8.2\bin把路径换成对应的Program Files版本。观察输出的开头形如java version 1.1.8的结果说明这个 JInitiator 确实是 JRE 1.1.8 系列如果提示“不是有效的 Win32 应用程序”多半是这个目录里的文件是旧版残留或者安装包没有真正展开真实可执行文件不在预设位置FRM-92095 也就顺理成章。再看系统 PATH 里的 java 是什么。在同一个命令行窗口执行where java如果第一条指向C:\Program Files\Java\jdk-17\bin\java.exe而 JInitiator 自己的 java.exe 在它专属目录两者毫无关系。实际操作中我一般把这两个结果并排记下来作为判断“java 更新是否到位”的基线FRM-92095 只认后者。2.2 服务器怎么判定“1.1.8.2 或更高版本”服务器下发给浏览器的 HTML 里包含一个OBJECT标签里面写死 JInitiator 的 CLSID 和 codebase。浏览器加载插件后Applet 自检逻辑读取客户端 JVM 的版本信息和服务器模板中携带的最低值比较。FRM-92095 的“请安装版本1.1.8.2或更高版本”就是这一层主动给出的不是数据库返回也不会写进数据库的 alert log。想确认服务器期望值可以把浏览器地址栏里 Forms servlet 的实际 URL 拉出来在 IE 的开发者工具里看页面源码搜索1.1.8.2。如果源码里出现这个字符串就说明模板写死的最低版本是 1.1.8.2。注意有些环境里这个值不在 HTML 里而在formsweb.cfg对应的配置段中定位方法在第 4 章展开。这里只需要记住有一种常见做法是把服务器端的最低版本号改小来绕过报错但低版本 JInitiator 的类库缺方法后续会出现初始化失败所以不建议这么消错。2.3 版本更新方向1.1.8.2 与后续补丁的选型安装包或目录名自带 JRE适用场景处理 FRM-92095 时JInitiator 1.1.8.21.1.8Forms 6i、EBS 11i 老客户端目标版本至少装到这里1.1.8 系列更高补丁1.1.8 后续维护版同一类客户端优先选择但以 Oracle 原厂补丁库实际为准JInitiator 1.3.1.x1.3.1Forms 9i/10g 过渡期不要拿它给要求 1.1.8 的服务器用系统 JRE 8 或更高8Forms 11g 之后的 Sun Plugin 模式和 FRM-92095 没有直接关系选型时还有一层混淆来自 Oracle JRE 7 Update 51那个版本开始引入部署规则和 manifest 校验界面风格跟今天的高版本 JRE 接近但 JInitiator 1.1.8.x 的加载协议是老的不会读取deployment.properties里的安全开关。反过来说把 JRE 7 的javaws.exe或控件复制进 JInitiator 目录也没有任何作用。搜索“oracle jre 7 更新51”解决不了 FRM-92095除非你同时准备把 Forms 客户端运行时切换成 Sun Java Plugin这个方案在第 4 章给出来。3. 更新 JInitiator 到 1.1.8.2 的完整操作卸载、静默参数与注册表校验3.1 先用命令把残留 JInitiator 翻出来reg query HKLM\SOFTWARE\Oracle /s 2nul | findstr /i JInitiator reg query HKLM\SOFTWARE\WOW6432Node\Oracle /s 2nul | findstr /i JInitiator dir C:\Program Files\Oracle /AD 2nul | findstr /i JInitiator dir C:\Program Files (x86)\Oracle /AD 2nul | findstr /i JInitiator第一条查 64 位视角的注册表第二条查 32 位程序在 64 位系统上被重定向的 WOW6432Node 节点。JInitiator 的安装程序大多是 32 位所以第二条命中率更高。dir 命令用来对照实际目录。如果Program Files\Oracle和Program Files (x86)\Oracle下都有 JInitiator 目录说明曾经装过多个版本卸载不干净浏览器很可能加载到旧的那个。遇到这种情况我一般先把注册表HKLM\SOFTWARE\Oracle下 JInitiator 相关键导出备份再从“控制面板 - 程序和功能”卸载。没有卸载项的直接删除目录和对应注册表键但注册表导出备份是前提。删除后重启 IE 进程再安装避免插件缓存持有旧 DLL。3.2 安装 JInitiator 1.1.8.2兼容模式与静默参数jinit_11802.exe /s /v/qn REBOOTReallySuppress安装包文件名常见为jinit_11802.exe一类请以实际取得的 Oracle 原厂介质为准。这条命令是 JInitiator 安装包采用 MSI 封装时的常见静默写法。/s让 InstallShield 外壳不弹界面/v把后面的参数传给 MSI/qn表示无人值守安装REBOOTReallySuppress禁止重装后强迫重启。执行完以后如果命令窗口一闪而过但目标目录没有出现JInitiator 1.1.8.2先别急着以为装上了。有的发行包外壳不是 MSI同样的参数不会生效进程只是解压了一部分就退出。我在测试机上验证过多次做法是先手动双击装一遍记录安装程序改动的目录和注册表再用 Process Monitor 过滤jinit_11802.exe的写操作确认它写入的是哪个键。之后要批量分发就用被确认过的那组参数。64 位 Windows 上如果双击安装包没有任何反应可以用“疑难解答”里的兼容性模式选 Windows XP SP3JInitiator 安装程序是老 16/32 位混合封装很多报错都出在这一步。3.3 安装后校验注册表、java.exe -version、IE 加载项reg query HKLM\SOFTWARE\WOW6432Node\Oracle\JInitiator /s 2nul C:\Program Files (x86)\Oracle\JInitiator 1.1.8.2\bin\java.exe -version 21第一条命令输出 JInitiator 在注册表里的安装路径和版本目录。重点看版本目录名称是1.1.8.2还是别的数字再看 Home 值是否指向刚才安装的物理路径。第二条命令直接运行 JInitiator 自己的 java.exe输出应以java version 1.1.8开头。如果注册表里已经有 1.1.8.2但 java.exe 输出的是高版本或其他异常说明安装包被改动过或目录被移动过需要重装。检查项通过标准常见失败原因注册表 JInitiator 版本目录1.1.8.2旧版本残留键覆盖注册表 Home 值指向真实安装目录手动移动过目录bin\java.exe -version1.1.8 开头安装了错误发行包IE 加载项管理Oracle JInitiator 存在且启用64 位 IE 或第三方加载项被关闭提示装完 JInitiator 后不要为了“整理磁盘”把目录从Program Files (x86)移到别处。JInitiator 的注册表 Home 值和 IE 加载项都记录原始路径目录一动Forms 启动时反而会沿旧路径加载失败报错不再停在 FRM-92095而会变成插件无法启动。4. 装完还报 FRM-92095IE 加载项、formsweb.cfg 参数与 Sun Java Plugin4.1 IE 11 的 32 位进程与加载项管理JInitiator 1.1.8.2 是 32 位浏览器插件只认 32 位进程。Windows 10/11 上从开始菜单打开 IE不一定就是 32 位版本可以通过C:\Program Files (x86)\Internet Explorer\iexplore.exe强制启动 32 位 IE。进入“管理加载项”在工具栏和扩展里找到 Oracle JInitiator确认状态是“已启用”。如果之前 IE 开了增强保护模式站点会被视为不受信任插件不会自动加载。实际操作中我还会把 Forms 站点加入“兼容性视图”列表。这个动作针对老 Applet 的DOCTYPE和 HTML 解析差异不是 FRM-92095 的修复项但很多老 Forms 在 IE 11 下报的附加脚本错误会挡住正常启动。浏览器侧检查完成后再动服务器侧不要让客户端和服务器同时改否则无法判断是哪一步生效。4.2 服务器端 formsweb.cfg 里真正参与版本校验的配置项cd $ORACLE_HOME/forms90/server grep -n -i -E jinit|JInitiator|baseHTML formsweb.cfg这条命令把和 JInitiator 相关的配置行全部列出来。不同发行版里参数名并不完全一致有的写baseHTMLjinitiator有的只写baseHTML6i 还可能把最低版本写在basejini.htm模板里而不是formsweb.cfg。所以不要死记某个键名而是看它承担什么角色。功能角色常见写法作用调整注意客户端 HTML 模板baseHTMLjinitiator / baseHTML决定浏览器用 JInitiator 还是普通 Applet切 Sun Plugin 时改这里插件启动类jinit_class / class指定 FormsLauncher 类切换运行时必须同步改插件归档jinit_archive / archive指定 frmall.jar 等 jar路径错误会变成启动失败最低版本模板内 version / 配置段直接决定 FRM-92095 触发值改小只能遮不能根治把grep输出的每一行对照上述角色看一遍。如果服务器要求1.1.8.2而客户端已经装到 1.1.8.2仍报 FRM-92095优先怀疑客户端注册表里有第二份更旧的 JInitiator而不是去服务器上调版本号。版本号校验是客户端自检不是服务器强制拒绝服务器参数只决定期望值。4.3 用 Sun Java Plugin 替换 JInitiator让老的 1.1.8.2 退休ls $ORACLE_HOME/forms90/server/*.htm | grep -iE sun|jinit如果输出里同时有basejini.htm和basesun.htm说明这套 Forms 支持 Sun Java Plugin 替代 JInitiator。把formsweb.cfg里的baseHTMLjinitiator改成baseHTMLsun同时调整class和archive为 Sun Plugin 使用的值。客户端就不需要装 JInitiator改为安装 32 位 JRE并通过 Java 控制面板把安全级别调低或加入站点例外。这里才轮到 java 环境变量配置发挥作用PATH里要被优先命中到那个 32 位 JRE 的bin而不是系统自带的高版本 JDK。但要注意Sun Java Plugin 方案是老 Forms 在 IE 里的过渡路线高版本 JRE 会拦 manifest 缺失的 Applet所以不能拿最新的 JRE 直接套。如果服务器目录下根本没有basesun.htm说明产品版本不支持还是回到 JInitiator 1.1.8.2。5. 从日志和缓存判断 FRM-92095 是版本校验失败还是 JInitiator 没起来5.1 先看报错弹在哪个阶段FRM-92095 的弹窗时机比错误文本本身更有用。浏览器加载插件时会出现“正在启动 Oracle JInitiator”之类的过渡页如果弹窗出现在过渡页之前大概率浏览器根本没找到插件优先查 IE 加载项和 CLSID 注册如果过渡页已经出现进度条走了一半才弹 92095才是版本自检失败如果 Form 窗口闪一下就不见了那不是版本问题是连接 Forms 服务器失败。弹窗时机排查方向与版本的关系过渡页之前32 位 IE、加载项、兼容性视图先恢复插件再谈版本过渡页中途注册表残留、目录多版本FRM-92095 的主要战场Form 窗口闪现后消失网络到应用服务器、formsweb.cfg不是 92095 的决定因素区分好阶段能省掉大量无用操作。我自己排查时先把 IE 的“管理加载项”截图再在命令行执行第 3 章的reg query两份结果对照后才会去动服务器参数。5.2 客户端临时目录里的 frms 日志与版本关键字dir %TEMP% /O-D /A-D | findstr /i frm jinit forms findstr /i /m 1.1.8 %TEMP%\frms*.log 2nul第一条命令按修改时间倒序列出临时目录里最近生成的 Forms 日志。JInitiator 启动时会向临时目录释放一些 jar 和日志文件文件名通常带frms或会话 ID。第二条命令在匹配到的日志里找1.1.8关键字。日志里如果记录的实际加载版本和你刚安装的版本不一致说明浏览器或注册表把 JInitiator 指向了另一份残留目录。日志文件的命名在不同补丁里不完全相同所以用通配符frms*.log而不是写死文件名。找到以后打开最后几百行看异常堆栈的第一行。如果堆栈里出现ClassNotFoundException属于类库或归档路径问题如果出现安全或访问拒绝属于 Windows 权限如果卡在 native 方法再检查 Oracle 插件目录下是否有杀毒软件锁定的 DLL。5.3 打开服务器端 trace看它对客户端版本做了哪些判断# 在 formsweb.cfg 对应的 config 段临时追加 tracetrue traceFile/tmp/frm_92095_trace.log traceLevel4改完参数后重连一次 Forms 会话让问题复现然后到应用服务器上查 trace 文件grep -i version /tmp/frm_92095_trace.log观察客户端实际上报的 version 字段。如果显示1.1.8.2但客户端还是弹 92095说明问题在客户端模板或注册表残留服务器侧不用再改如果字段是空的说明 Applet 根本没把版本传上来继续查网络层和 formsweb.cfg 的 archive 配置。traceLevel 的合法取值范围各版本不一致如果写 4 没有输出去对应版本的管理指南里确认不要盲目加到 9。排错结束后关闭 trace生产环境长时间开 trace 会撑满/tmp。6. 用一条巡检脚本批量找出隐藏的旧 JInitiator客户端版本检查如果只靠手工点“管理加载项”几十台机器根本查不过来。日常维护里我倾向用 PowerShell 读取目录和 JInitiator 自带 java.exe 的输出版本把结果导出成 CSV。$ErrorActionPreference SilentlyContinue $rows () $bases ($env:ProgramFiles\Oracle, ${env:ProgramFiles(x86)}\Oracle) foreach ($base in $bases) { if (-not (Test-Path $base)) { continue } Get-ChildItem $base -Directory -Filter JInitiator* | ForEach-Object { $dir $_.FullName $java Join-Path $dir bin\java.exe if (-not (Test-Path $java)) { return } $verLine ( $java -version 21 | Select-Object -First 1) -join $rows [PSCustomObject]{ Computer $env:COMPUTERNAME JInitiatorDir $dir JavaVersion $verLine } } } $rows | Export-Csv jinit_client_versions.csv -NoTypeInformation -Encoding UTF8脚本遍历 64 位和 32 位两个Oracle根目录找到所有JInitiator*目录逐个执行bin\java.exe -version把第一行版本输出记录下来。-join 是为了把21里面的多行输出压成一行避免 PowerShell 把错误流拆成多个数组元素。SilentlyContinue保证某些机器没有 JInitiator 时不爆红而是直接跳过。跑完脚本后看JavaVersion列。凡是输出java version 1.1.8的机器说明已经是 JInitiator 1.1.8 系列至少满足标题里的最低版本要求凡是输出其他版本或者根本没有这列数据的机器就是下一批要更新 JInitiator 1.1.8.2 的名单。把这个 CSV 按JInitiatorDir排序还能顺带发现同一台机器上有多个 JInitiator 目录的残留情况。把这些目录和注册表残留先清掉再用第 3 章的静默安装命令批量推 1.1.8.2。本文还有配套的精品资源点击获取
返回列表