环境配置:
服务器:win2008 R2
weblogic版本:10.3.6
问题描述:
尝试升级补丁程序时遇见以下报错
遇到无法识别的补丁ID:xxxx
通常原因:
通常会发生这种情况,因为特定的补丁程序ID不在Smart Update在cache_dir中使用的patch-catalog.xml文件中。
发生这种情况有几个原因:
1、试图将一个WLS版本的补丁应用到另一个WLS版本的安装。
2、提供了错误的补丁程序ID。
3、智能更新使用了错误版本的patch-catalog.xml。
4、bsu工具版本过低导致无法识别(在10.3.6中bsu工具的版本都是3.3,哪怕安装了bsu_update,因为只是增强了bsu工具的性能,版本号不升级,3.3也为bsu工具的最后一个版本,12c以后升级工具不再是bsu。)
诊断此错误时要检查的事项:
1、检查升级命令是否正确,补丁ID尽量直接复制PSU补丁程序的ID。
2、检查cache_dir下是否有对应的PSU,有xxxx.jar和相对应的patch-catalog_xxxx.xml文件就可以。
3、检查bsu的版本–bsu.cmd -version。
解决方案:
1、不充命名patch-catalog_xxxx.xml
2、默认的patch_download_dir为MW_HOME/utils/bsu/cache_dir。您可以在首选项下的Smart Update GUI中对此进行更改,这里有一个选项可以指定patch_download_dir。或者,在运行bsu -install命令时。打开smart update GUI可以直接运行bsu.cmd。
3、bsu目录下的patch-client.jar。怀疑是否已损坏,应该是516 bytes。可以尝试从别的环境拉一个jar包替换。
PS:win版升级在确认停了应用服务后还是无法卸载已有的补丁程序,可以尝试打开启动管理器,服务中有nodemanager服务在运行可以手动停止,升级完成后需要手动启动,否则主控无法启动受控节点。
本次解决方案:
方案一:
-
查看D:\Oracle\Middleware\wlserver_10.3里面是否有补丁信息(比如带补丁号的目录、I37G.jar文件、patch-catalog_xxxxx.xml文件、patch-catalog.xml等文件)。如果有的话,把这里面的补丁信息和D:\Oracle\Middleware\utils\bsu\cache_dir目录备份到其他地方,D:\Oracle\Middleware\wlserver_10.3里原来的补丁信息内容和D:\Oracle\Middleware\utils\bsu\cache_dir目录就删掉。
注意:D:\Oracle\Middleware\wlserver_10.3只删补丁相关的信息,不要整体把目录删掉。 -
进入注册表,找到HKEY_CURRENT_USER\Software\JavaSoft\Prefs\com\bea\plateng\patch\,会看到这个目录里面存放着一些文件。把这些文件备份出来(一定要备份到其他地方,不要简单地删掉);备份之后,把HKEY_CURRENT_USER\Software\JavaSoft\Prefs\com\bea\plateng\patch\目录里面的文件都清空(导出然后以任意名字命名就可以了)。
-
执行bsu.cmd -prod_dir=D:\Oracle\Middleware\wlserver_10.3 -status=applied -verbose -view
结果:
a. 显示DownloadDir: D:\Oracle\Middleware\utils\bsu\cache_dir
b. 显示补丁为空
c. bsu目录中自动创建cache_dir,但是cache_dir目录为空 -
放一个补丁(21Y4的jar包和自带patch-catalog_xxxxx.xml文件)到cache_dir目录(注意:只放这两个文件,不要把patch的解压目录直接放进去),运行bsu.cmd -prod_dir=D:\Oracle\Middleware\wlserver_10.3 -status=downloaded -verbose -view
结果:
cache_dir目录自动创建patch-catalog.xml文件 -
执行bsu.cmd -prod_dir=D:\Oracle\Middleware\wlserver_10.3 -status=applied -verbose -view
结果:
现在应该能显示出已经安装过的I37G和TYIA补丁了 -
接下来移除I37G补丁,再安装21Y4补丁即可。
方案二
-
进入 \patch_wls1036 目录,
-
备份patch_jars 和 registry 目录到其他地方
-
删除 \patch_wls1036\patch_jars 目录里的所有jar文件
-
进入 \patch_wls1036\registry目录,打开 patch-registry.xml 文件, 删除从到之间的全部内容(含这两行)。
例如:
<?xml version="1.0" encoding="UTF-8"?> WebLogic Server 10.3.6.0 并且删除patch-backup.xml文件。- 重新执行安装21Y4补丁的命令。
方案三
- 打印跟踪日志bsu.cmd -prod_dir=D:\Oracle\Middleware\wlserver_10.3 -patch_download_dir=D:\Oracle\Middleware\utils\bsu\cache_dir -view -status=applied -log=bsu_view_trace.log -log_priority=trace
- bsu.cmd -report > bsu.report.log
打印跟踪日志之后发现报错磁盘空间不足,但是C盘还有3.7G,D盘还有10G以上的空间 - 尝试在bsu.cmd中添加参数-Djava.io.tmpdir=D:\tmp,补丁程序可以识别。 从: “%JAVA_HOME%\bin%JAVA%” %MEM_ARGS% -jar patch-client.jar %* 到: “%JAVA_HOME%\bin%JAVA%” %MEM_ARGS% -Djava.io.tmpdir=D:\tmp -jar patch-client.jar %* (注意D盘下对应要创建tmp目录)
- 测试发现当c盘磁盘空间满了以后就会报错,遇到无法识别的补丁程序ID。因为程序会复制modules/com.bea.cie.patch-common_3.3.0.0.jar中的一个临时文件到\Users\ADMINI~1\AppData\Local\Temp\2\16541669845476893839097646782720.tmp,此次问题c盘还有3.7G空间,怀疑是360杀毒软件造成的权限问题。