Oracle OJVM组件总结

1、Oracle OJVM的作用

复制代码
Oracle JavaVM(OJVM)是 Oracle 数据库中的一个内置 Java 虚拟机组件,主要功能包括:
1)运行Java代码:允许在数据库内部执行Java存储过程、函数和触发器,实现与SQL的紧密集成。
2)支持Java应用:为使用Java开发的数据库应用(如 JDBC、Java 存储过程)提供运行时环境。
3)安全隔离:通过数据库的安全机制(例如权限控制)管理Java代码的访问权限。
4)性能优化:直接访问数据库数据,减少网络开销,适合数据密集型操作(如 ETL、复杂计算)。

2、Oracle OJVM安装情况

复制代码
OJVM是被默认安装的。可以用下面的SQL可以判定OJVM是否被安装。
SELECT version, status FROM dba_registry WHERE comp_id='JAVAVM';
VERSION                        STATUS

------------------------------ --------------------------------------------

19.0.0.0.0                     VALID
备注:如果status的值是VALID则代表安装,否则则意味没有被安装。

3、Oracle OJVM是否被使用

复制代码
OJVM即使默认被安装,但是很多情况下,基本都是不会被使用。可以使用下面的SQL来确认OJVM是否被使用:

select count(*) from x$kglob where kglobtyp=29 or kglobtyp=56;

如果count的值为0,则表示组件虽然被默认安装,但是从未使用。
查询示例:
SQL> select count(*) from x$kglob where KGLOBTYP = 29 OR KGLOBTYP = 56;

  COUNT(*)
----------
     0

4、如何禁用Oracle OJVM组件

复制代码
数据库打上PSU补丁(或者RU补丁后),升级数据字典后,执行如下两个命令禁用OJVM:
1、@?/rdbms/admin/dbmsjdev.sql
2、exec dbms_java_dev.disable;

备注:dbmsjdev.sql脚本会创建DBMS_JAVA_DEV包,DBMS_JAVA_DEV可以禁用和启用Java classes类对象授权给public公共用户,从而达到禁用和启用的作用。

5、如何卸载Oracle OJVM组件

复制代码
删除OJVM组件
可以参考文章:
https://mikedietrichde.com/2017/08/07/javavm-xml-clean-oracle-database-11-2-12-2/
https://www.modb.pro/db/101439
备注:
请操作前在测试环境中做充分测试,请勿在生产环境中进行尝试。
不建议在已经运行一段时间的生产环境中做此操作。

6、如何重建Oracle OJVM组件

复制代码
简要步骤:
alter system set java_jit_enabled = FALSE;
alter system set "_system_trig_enabled"=FALSE;
-- Keep a Note of original JOB_QUEUE_PROCESSES value before this
alter system set JOB_QUEUE_PROCESSES=0;
create or replace java system
/
alter system set java_jit_enabled = true;
alter system set "_system_trig_enabled"=TRUE;
alter system set JOB_QUEUE_PROCESSES=10;
@?/rdbms/admin/utlrp.sql

具体参考官方文档:Safe repair/reinstall of the JVM Component in 11.2 and up (Doc ID 2314363.1)
建议做好充分测试,再尝试。

7、OJVM的补丁集

复制代码
OJVM PSU主要是针对oracle java VM。
从2014年10月开始Oracle JavaVM组件作为一个单独的部分来进行安装。之前是包含在oracle rdbms psu中。
只要oracle db中安装jvm组件,就需要安装对应版本的oracle JavaVM PSU。如果只是打了rdbms的PSU,安全漏洞检查就会检查出jvm的安全漏洞。特别是OJVM的"反序列化"漏洞,基本一直没有消停过。

补丁安装方式,可以参考我的《Oracle 11g单库环境PSU补丁安装》和《Oracle 19c单库环境RU补丁安装》文章
相关推荐
lusklusklusk22 分钟前
Oracle数据库基础之2_体系结构
数据库·oracle
可乐ea41 分钟前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
东方护航数据恢复(深圳)1 小时前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
lusklusklusk2 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
PHP实战开发录3 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
红红谈说4 小时前
标签化推送与已读统计怎么做?一次通知链路的工程复盘
数据库·消息推送·数字乡村·集合运算·已读回执·标签体系·写入放大
Shadow(⊙o⊙)5 小时前
MySQL索引
数据库·mysql
fb_123455 小时前
MySQL运维实战:备份恢复+主从复制+读写分离+MHA高可用(超详细手把手教程)
运维·mysql·oracle
倔强的石头_7 小时前
多环境配置治理:开发、测试、生产连接信息如何隔离
数据库
杨云龙UP7 小时前
一次数据库查询缓慢故障复盘:大表数据增长、SQL全表扫描导致系统响应异常
linux·运维·服务器·数据库·sql·mysql