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补丁安装》文章
相关推荐
大黄说说9 分钟前
EF Core 避坑指南:查询慢、循环查询、并发更新问题如何解决
java·服务器·数据库
城管不管18 分钟前
重生——第五次面试2026.8.1一面
java·数据库·后端·ai·面试·职场和发展·agent
ocean'23 分钟前
防火墙策略路由
linux·服务器·数据库
纪念 22936 分钟前
数据库基础
数据库·笔记·学习方法
songgz37 分钟前
zVM统一OS与DB
jvm·数据库·vm
brave_zhao42 分钟前
mysql的安装
数据库·mysql
吴声子夜歌1 小时前
MongoDB 8.0——聚合
数据库·mongodb
冷凝娇1 小时前
【MySQL】2026总结(一)
数据库·mysql
changshuaihua0011 小时前
Redis 详解:Redis 与 MySQL 的区别、数据类型与缓存三大问题
数据库·redis·缓存
qetfw1 小时前
Debian 配置 AIDE 文件完整性检测:基线初始化、变更检查与数据库更新
linux·网络·数据库·debian