记一次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那活儿(上海新炬王翦团队)