# 记一次19c安装jvm组件过程

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 其他
> 标签: 存储, Java
> 原文链接: http://117.50.162.249:3000/yun/articles/1376

---

# 记一次19c安装jvm组件过程

> 来源: https://www.ucloud.cn/yun/129534.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

记一次19c安装jvm组件过程

## **点击上方“IT那活儿”，关注后了解更多内容，不管IT什么活儿，干就完了！！！**

## 问题现象 开发反馈在一套19.5的库上新上的存储过程报错，如下图： ![](https://ucloud-blog.cn-bj.ufileos.com/articles/129534/images/129534_000.png)

## 分析过程

这个ORA-29538提示java未安装，查看视图发现jvm组件未安装。

```
SQL> col COMP_NAME for a30SQL> select COMP_NAME,status from dba_registry;
```

大概率可以猜测在建库时把相关组件给筛选掉了。

如下图，选择Custom Database选项：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129534/images/129534_001.png)

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

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129534/images/129534_002.png)

## 解决方案

可以通过跑相关的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*

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129534/images/129534_003.png)

## 本文作者：金震宇

## 本文来源：IT那活儿（上海新炬王翦团队）

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129534/images/129534_004.png)