如何在Oracle中检查JDK版本?

19

我们的Oracle数据库中有一个Java类,最近这个Java类中的一行代码出现了错误:

static BASE64Encoder B64 = new BASE64Encoder();

我们发现了错误。

java.lang.ExceptionInInitializerError

出错在这一行代码上。

我不确定数据库端有什么改变,因为我们没有SYS权限或者主机访问权限。

我想要检查运行在我们的Oracle数据库中的JDK版本--

Oracle Database 11g企业版发布11.2.0.3.0 - 64位生产环境。

谢谢。


1
你可以查看这个链接:http://www.oracle.com/technetwork/database/enterprise-edition/faq-jvm-java-stored-procedures-097205.html#_How_to_check - Prashant
1
选择 * 从 all_registry_banners 不会给我 JDK 版本。 - Ravi Gupta
3个回答

35
SELECT  dbms_java.get_ojvm_property(PROPSTRING=>'java.version') FROM dual

13

解决方案1)在数据库主机上执行

cd $ORACLE_HOME/jdk/bin
java -version

解决方案2) 创建一个PL/SQL函数来返回Java系统属性

create function get_java_property(prop in varchar2)
return varchar2 is
language java name 'java.lang.System.getProperty(java.lang.String) return java.lang.String';

然后运行一个查询以查找Java版本

select get_java_property('java.version') from dual;

解决方案3)检查来自SteveK的答案。


我没有主机访问权限,而且没有内置的SQL命令可以完成这个任务吗? - Ravi Gupta
如果您有创建PL/SQL函数的授权,请使用我发布的第二个解决方案。否则,如果您无法访问数据库主机或没有创建PL/SQL函数的授权,则可以依赖于认证版本列表或询问管理服务器的人员。 - SubOptimal
谢谢您的回复,我可以创建一个函数。 - Ravi Gupta
$ORACLE_HOME/jdk/bin中的Java版本不一定与嵌入式JVM版本相同。 - Karsten Spang
@KarstenSpang,您能否提供一个官方Oracle数据库设置的例子,其中不是这种情况呢?(也许在过去五年中已经出现了这种情况。) - SubOptimal

13
认证版本如下:

Oracle 12.2 / 18.1 JVM为1.8

Oracle 12c数据库嵌入式JVM支持JDK 1.6和1.7

Oracle 11g >= 11.2.0.4 数据库嵌入式JVM支持JDK 1.6

Oracle 11g 数据库嵌入式JVM支持JRE 1.5

Oracle 10g 数据库嵌入式JVM支持JRE 1.4

Oracle 9i 数据库嵌入式JVM支持JRE 1.3


你在哪里找到这个信息的?我在网上搜索了很久,但只有找到了你的帖子,而且它是绝对正确的...但你是从哪里复制来的呢? - kupa
1
@kupa 我真的不记得来源了,可能有多个,这里简要说明一下。 - Ankur Singhal
我试图通过update_javavm_binaries.pl更新jdk到8,但看到有效选项为:6 7。然后尝试在/u01/app/oracle/product/12.1.0/dblb/javavm/jdk内使jdk 8可用,但无法实现。我在metalink和谷歌上搜索支持矩阵,但找不到。您的帖子让我清楚地知道了我的错误。非常感谢! - kupa
2
对于任何偶然发现此内容的人,源代码为342810.1。 - mmmmmpie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接