记一次19c安装jvm组件过程
AI 摘要 / TL;DR
记一次19c安装jvm组件过程 点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!! 问题现象 开发反馈在一套19.5的库上新上的存储过程报错,如下图: 分析过程 这个ORA 29538提示java未安装,查看视图发现jvm组件未安装。 大概率可以猜测在建库时把相关组件给筛选掉了。 如下图,选择
来源: https://www.ucloud.cn/yun/129534.html 作者: IT那活儿 发布日期: 发布于2023-01-11 13:20
记一次19c安装jvm组件过程
点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!
问题现象 开发反馈在一套19.5的库上新上的存储过程报错,如下图: 
分析过程
这个ORA-29538提示java未安装,查看视图发现jvm组件未安装。
SQL> col COMP_NAME for a30SQL> select COMP_NAME,status from dba_registry;
大概率可以猜测在建库时把相关组件给筛选掉了。
如下图,选择Custom Database选项:

在文中截图的第八步database components选项中,可以选择是否安装Oracle JVM组件:

解决方案
可以通过跑相关的jvm安装脚本,来解决此问题。具体步骤如下:
1. 查看当前组件状态,失效状态对象。
su - oraclespo /home/oracle/obj_stat.logcol COMP_NAME for a50select COMP_NAME,status from dba_registry;col object_name for a50col object_type for a20col owner for a15select owner,object_name,object_type from dba_objects where status=INVALIED;spo offexit
2. 停库。
3. 调整initjvm.sql:
cd $ORACLE_HOME/javavm/installcp initjvm.sql reinitjvm.sqlvi reinitjvm.sql
--原代码:
-- Now check whether create java system worked correctly, and if not, back-- out of everything done in this scriptvariable jvmrmaction varchar2(30)declareok int;bad int;begin:jvmrmaction := NONE;select count(*) into ok from obj$ where status=1 and type#=29;select count(*) into bad from obj$ where status!=1 and type#=29 and owner#=0;if bad > 0 or ok < 100 theninitjvmaux.abort_message(CREATE JAVA SYSTEM did not complete successfully:,number of java classes with status 1: || ok ||, with status != 1: || bad);initjvmaux.abort_message(Backing out of java installation...);:jvmrmaction := FULL_REMOVAL;initjvmaux.endaction;end if;end;/
--替换成如下代码:
-- Now check whether create java system worked correctly, and if not, log-- it for future reference in case there are invalid java objects in SYS.variable jvmrmaction varchar2(30)declareok int;bad int;begin:jvmrmaction := NONE;select count(*) into ok from obj$ where status=1 and type#=29;select count(*) into bad from obj$ where status!=1 and type#=29 and owner#=0;if bad > 0 or ok < 100 theninitjvmaux.abort_message(CREATE JAVA SYSTEM may not have completed successfully:,number of VALID java classes: || ok ||, and INVALID java classes: || bad);-- initjvmaux.abort_message(Backing out of java installation...);-- :jvmrmaction := FULL_REMOVAL;initjvmaux.endaction;end if;end;/
4. 运行创建jvm脚本,启动一个节点执行:
startupalter system enable restricted session;alter system set "_system_trig_enabled" = false scope=memory;alter system set "java_jit_enabled" = false scope=memory;-- start a log filespool full_jvminst.log;set echo on create or replace java system/
--上述命令执行报如下错误,可忽略继续执行:
--create or replace java system--*--ERROR at line 1:--ORA-00604: error occurred at recursive SQL level 1--ORA-00942: table or view does not exist@?/javavm/install/reinitjvm.sql@?/xdk/admin/initxml.sql@?/rdbms/admin/catjava.sqlshutdown immediateset echo offspool offexit
==>检查log,查看输出日志是否有报错。
5. 启库。
6. 验证命令:
su - oraclespool jvm_info.log
--查看最新组件信息:
SELECT SUBSTR(comp_name, 1, 30) comp_name, SUBSTR(version, 1, 20) version, status FROM dba_registry ORDER BY comp_name;COMP_NAME VERSION STATUS------------------------------ -------------------- ---------------JServer JAVA Virtual Machine 19.0.0.0.0 VALIDOracle Database Catalog Views 19.0.0.0.0 VALIDOracle Database Java Packages 19.0.0.0.0 VALIDOracle Database Packages and T 19.0.0.0.0 VALIDOracle Real Application Cluste 19.0.0.0.0 OPTION OFFOracle Text 19.0.0.0.0 VALIDOracle Workspace Manager 19.0.0.0.0 VALIDOracle XDK 19.0.0.0.0 VALIDOracle XML Database 19.0.0.0.0 VALIDSpatial 19.0.0.0.0 VALID
--其它的一些细节可以参考:
MOS

本文作者:金震宇
本文来源:IT那活儿(上海新炬王翦团队)
