如何解决OWBSYS用户下存在无效JAVA CLASS对象的问题
你检出的这些前缀带哈希值的JAVA CLASS是Oracle Warehouse Builder(OWB)运行时依赖的内部动态生成类,归OWBSYS schema所有,无效原因和修复方案如下:
无效JAVA CLASS产生原因
- Oracle数据库升级、补丁安装完成后未同步重编译OWB相关组件,JAVA类依赖的核心运行库(JDK核心类、OWB专属运行包)版本发生变动,导致类加载时依赖链路断裂,被标记为无效。
- OWB组件卸载、重新部署过程中任务中断,部分类文件字节码写入不完整,或元数据已注册到数据字典但实际类文件丢失,加载失败后标记为无效。
- 数据库实例的JAVA池内存配置不足,或者JVM运行参数调整后,类首次加载失败就会被系统标记为INVALID状态。
- OWBSYS用户的必要权限被回收,缺少
JAVAUSERPRIV、JAVA_ADMIN等JAVA类加载、解析所需的权限,无法正常完成类校验导致对象无效。
修复方案
以下操作均需要使用SYSDBA权限执行:
- 批量重编译无效JAVA类
首先执行以下SQL生成批量重编译命令:
执行生成的所有ALTER命令,即可对每个无效JAVA类单独触发重新解析校验。SELECT 'ALTER JAVA CLASS "'||OBJECT_NAME||'" RESOLVE;' FROM ALL_OBJECTS WHERE STATUS='INVALID' AND OWNER='OWBSYS' AND OBJECT_TYPE='JAVA CLASS'; - 全schema重编译无效对象
如果单独重编译无效,可调用Oracle内置重编译工具批量处理整个OWBSYS的无效对象:-- 串行重编译,适合资源紧张的环境 EXEC UTL_RECOMP.RECOMP_SERIAL('OWBSYS'); -- 并行重编译,4为并行度,可根据服务器CPU核数调整,适合空闲时段执行 -- EXEC UTL_RECOMP.RECOMP_PARALLEL(4,'OWBSYS'); - 补全OWBSYS用户权限
若重编译后仍为无效状态,检查并补全OWBSYS的必要权限后再次重编译:GRANT JAVAUSERPRIV, JAVA_ADMIN, CREATE ANY PROCEDURE, CREATE ANY CLASS TO OWBSYS; GRANT EXECUTE ON SYS.DBMS_JAVA TO OWBSYS; - 重置OWBSYS schema
以上操作均无效的情况下,运行OWB安装目录下的重置脚本:- Linux/Unix环境:执行
OWB_HOME/owb/bin/unix/resetOWBSYS.sh - Windows环境:执行
OWB_HOME\owb\bin\win32\resetOWBSYS.bat
脚本会自动重置OWBSYS的所有元数据和运行类文件,完成后所有JAVA类会自动加载为有效状态。
- Linux/Unix环境:执行
内容的提问来源于stack exchange,提问作者Reja
相关产品推荐
相关产品推荐

