The standard procedure for installing java in the oracle 12cR1 database is:
PERL5LIB=$ORACLE_HOME/rdbms/admin:$PERL5LIB; export PERL5LIB sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on Tue Nov 12 01:25:39 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> !perl /opt/oracle/product/base/12.1.0.1/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b initjvm /opt/oracle/product/base/12.1.0.1/javavm/install/initjvm.sql; !perl /opt/oracle/product/base/12.1.0.1/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b initxml /opt/oracle/product/base/12.1.0.1/xdk/admin/initxml.sql; !perl /opt/oracle/product/base/12.1.0.1/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b xmlja /opt/oracle/product/base/12.1.0.1/xdk/admin/xmlja.sql; !perl /opt/oracle/product/base/12.1.0.1/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b catjava /opt/oracle/product/base/12.1.0.1/rdbms/admin/catjava.sql; connect "SYS"/oracle as SYSDBA !perl /opt/oracle/product/base/12.1.0.1/rdbms/admin/catcon.pl -n 1 -l /home/oracle -b catxdbj /opt/oracle/product/base/12.1.0.1/rdbms/admin/catxdbj.sql;
having this done which jvm do we have available?
SQL> r 1* select comp_name,status,version from dba_registry COMP_NAME STATUS VERSION ---------------------------------------- -------------- ----------- Oracle XML Database VALID 12.1.0.1.0 Oracle Database Catalog Views VALID 12.1.0.1.0 Oracle Database Packages and Types VALID 12.1.0.1.0 Oracle Real Application Clusters OPTION OFF 12.1.0.1.0 JServer JAVA Virtual Machine VALID 12.1.0.1.0 Oracle XDK VALID 12.1.0.1.0 Oracle Database Java Packages VALID 12.1.0.1.0 create or replace and compile java source named "props" as public class props { public static void show_props() { System.getProperties().list(System.out); } } / show errors create or replace procedure java_props as language java name 'props.show_props()'; / show errors set serveroutput on size 10000 exec dbms_java.set_output(10000) exec java_props
this will print the following output on my 12c instance:
-- listing properties -- oracle.aurora.ncomp.lib.permission= java.protocol.handler.pkgs=oracle.aurora.rdbms.url sun.boot.library.path=/opt/oracle/product/base/12.1.0.1/lib java.vm.version=1.6.0 oracle.aurora.ncomp.lib.component.prefix=jtc java.vm.vendor=Oracle Corporation java.vendor.url=http://www.oracle.com/java/ path.separator=: java.vm.name=JServer VM file.encoding.pkg=sun.io java.vm.specification.name=Java Virtual Machine Specification user.dir=/opt/oracle/product/base/12.1.0.1 java.awt.graphicsenv=oracle.aurora.awt.OracleGraphicsEnvir... os.arch=x86_64 java.io.tmpdir=/tmp line.separator= java.vm.specification.vendor=Sun Microsystems Inc. java.naming.factory.url.pkgs=com.sun.jndi.url os.name=Linux oracle.aurora.ncomp.file.obj.suffix=o java.library.path=/usr/lib:/opt/oracle/product/base/12.... java.specification.name=Java Platform API Specification java.class.version=50.0 java.net.preferIPv4Stack=FALSE oracle.aurora.ncomp.file.dll.suffix=so java.util.prefs.PreferencesFactory=java.util.prefs.OraclePreferencesFactory os.version=2.6.39-400.210.2.el6uek.x86_64 user.home= file.encoding=UTF-8 java.specification.version=1.6 oracle.aurora.ncomp.lib.os.prefix=lib user.name= java.class.path= oracle.aurora.rdbms.SID=dbs300 java.vm.specification.version=1.0 oracle.server.version=12.1.0.1.0 java.home=/opt/oracle/product/base/12.1.0.1/jav... java.specification.vendor=Sun Microsystems Inc. user.language=en oracle.aurora.rdbms.oracle_home=/opt/oracle/product/base/12.1.0.1 awt.toolkit=oracle.aurora.awt.OracleToolkit oracle.aurora.vm.environment.name=rdbms java.version=1.6.0 java.vendor=Oracle Corporation java.awt.headless=true file.separator=/ sqlj.runtime=sqlj.framework.ide.aurora.rdbms.Oracl... java.compiler= sun.cpu.endian=little sun.io.unicode.encoding=UnicodeLittle oracle.jserver.version=12.1.0.1.0 oracle.aurora.system_subdirectory=lib
so the instance is running a version 1.6.0 jvm. and now, new with oracle 12c, there is a way to upgrade the jvm to 1.7.0:
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> !perl $ORACLE_HOME/javavm/install/update_javavm_binaries.pl y Invalid version y ... Valid options are: 6 7 SQL> !perl $ORACLE_HOME/javavm/install/update_javavm_binaries.pl 7 SQL> startup ORACLE instance started. Total System Global Area 1068937216 bytes Fixed Size 2296576 bytes Variable Size 398460160 bytes Database Buffers 662700032 bytes Redo Buffers 5480448 bytes Database mounted. Database opened. SQL> alter pluggable database all open; Pluggable database altered. SQL> !perl -I $ORACLE_HOME/rdbms/admin $ORACLE_HOME/rdbms/admin/catcon.pl -b update_jvm $ORACLE_HOME/javavm/install/update_javavm_db.sql
did it really work?
SQL> set serveroutput on size 10000 SQL> exec dbms_java.set_output(10000); PL/SQL procedure successfully completed. SQL> exec java_props BEGIN java_props; END; * ERROR at line 1: ORA-29548: Java system class reported: release of classes.bin in the database does not match that of the oracle executable ORA-06512: at "SYS.JAVA_PROPS", line 1 ORA-06512: at line 1
ups? looking at the alertlog:
Tue Nov 12 03:32:11 2013 joxcsys: release mismatch 12.1.0.1.0 1.7 in database (classes.bin) vs 12.1.0.1.0 1.6 in executable Tue Nov 12 03:32:56 2013 joxcsys: release mismatch 12.1.0.1.0 1.7 in database (classes.bin) vs 12.1.0.1.0 1.6 in executable
so, relinking the binaries is not optional, as stated in the documenatation:
SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. !$ORACLE_HOME/bin/relink all writing relink log to: /opt/oracle/product/base/12.1.0.1//install/relink.log startup
here we go:
SQL> set serveroutput on size 10000 SQL> exec dbms_java.set_output(10000); PL/SQL procedure successfully completed. SQL> exec java_props -- listing properties -- oracle.aurora.ncomp.lib.permission= java.protocol.handler.pkgs=oracle.aurora.rdbms.url sun.boot.library.path=/opt/oracle/product/base/12.1.0.1/lib java.vm.version=1.7.0 oracle.aurora.ncomp.lib.component.prefix=jtc java.vm.vendor=Oracle Corporation java.vendor.url=http://www.oracle.com/java/ path.separator=: java.vm.name=JServer VM file.encoding.pkg=sun.io java.vm.specification.name=Java Virtual Machine Specification user.dir=/opt/oracle/product/base/12.1.0.1 java.awt.graphicsenv=oracle.aurora.awt.OracleGraphicsEnvir... os.arch=x86_64 java.io.tmpdir=/tmp line.separator= java.vm.specification.vendor=Sun Microsystems Inc. java.naming.factory.url.pkgs=com.sun.jndi.url os.name=Linux oracle.aurora.ncomp.file.obj.suffix=o java.library.path=/usr/lib:/opt/oracle/product/base/12.... java.specification.name=Java Platform API Specification java.class.version=51.0 java.net.preferIPv4Stack=FALSE oracle.aurora.ncomp.file.dll.suffix=so java.util.prefs.PreferencesFactory=java.util.prefs.OraclePreferencesFactory os.version=2.6.39-400.210.2.el6uek.x86_64 user.home= file.encoding=UTF-8 java.specification.version=1.7 oracle.aurora.ncomp.lib.os.prefix=lib user.name= java.class.path= oracle.aurora.rdbms.SID=dbs300 java.vm.specification.version=1.0 oracle.server.version=12.1.0.1.0 java.home=/opt/oracle/product/base/12.1.0.1/jav... java.specification.vendor=Sun Microsystems Inc. user.language=en oracle.aurora.rdbms.oracle_home=/opt/oracle/product/base/12.1.0.1 awt.toolkit=oracle.aurora.awt.OracleToolkit oracle.aurora.vm.environment.name=rdbms java.version=1.7.0 java.vendor=Oracle Corporation java.awt.headless=true file.separator=/ sqlj.runtime=sqlj.framework.ide.aurora.rdbms.Oracl... java.compiler= sun.cpu.endian=little sun.io.unicode.encoding=UnicodeLittle oracle.jserver.version=12.1.0.1.0 oracle.aurora.system_subdirectory=lib PL/SQL procedure successfully completed.