SYMPTOM
When installing 12.1.0.2 Oracle options from DBCA, there are memory issues during install JVM and Oracle multimedia, so the installation failed by leaving those two options with status ‘LOADING’, those two unhealthy options could not be removed cleanly by DBCA, so manual removing and reinstalling are required for fixing it.
SQL> select COMP_NAME,VERSION,STATUS,SCHEMA
from dba_registry
order by 3;
COMP_ID COMP_NAME VERSION STATUS SCHEMA
------- ------------------------ ------------ -------- ------
JServer JAVA Virtual Machine LOADING SYS
Oracle Multimedia LOADING ORDSYS
Oracle Database Catalog Views 12.1.0.2.0 VALID SYS
Oracle Database Packages and Types 12.1.0.2.0 VALID SYS
Oracle Workspace Manager 12.1.0.2.0 VALID WMSYS
Oracle Text 12.1.0.2.0 VALID CTXSYS
Oracle XML Database 12.1.0.2.0 VALID XDB
7 rows selected.
Please note your issue and situation might be different. Please raise a SR to Oracle Support to get advice for critical environment, otherwise it may cause issue worse and results in database unrecoverable which will need full database restore and recover, because manually removing and installing JVM and Multimedia is a highly destructive action according to Oracle Support.
Remove and Reinstall Oracle JVM
- Cold backup of whole database.
- Removing Oracle unhealthy JVM :
Shutdown the database instance
Create the following REMOVAL script, full_rmjvm.sql
Run it from a new SQL*Plus session
spool full_rmjvm.log
set echo on
connect / as sysdba
startup mount
alter system set "_system_trig_enabled" = false scope=memory;
alter system enable restricted session;
alter database open;
@?/rdbms/admin/catnojav.sql
@?/xdk/admin/rmxml.sql
@?/javavm/install/rmjvm.sql
truncate table java$jvm$status;
select * from obj$ where obj#=0 and type#=0;
delete from obj$ where obj#=0 and type#=0;
commit;
select owner, count(*) from all_objects
where object_type like '%JAVA%' group by owner;
select obj#, name from obj$
where type#=28 or type#=29 or type#=30 or namespace=32;
select o1.name from obj$ o1,obj$ o2
where o1.type#=5 and o1.owner#=1 and o1.name=o2.name and o2.type#=29;
shutdown immediate
set echo off
spool off
exit
-- End of File full_rmjvm.sql
- Check the log full_rmjvm.log, we can see JVM was not installed at all, in this case, we just reload it in next step.
SQL> Rem =====================================================================
SQL> Rem Check CATJAVA and JAVAVM status; conditionally abort the script
SQL> Rem =====================================================================
SQL>
SQL> WHENEVER SQLERROR EXIT;
SQL>
SQL> BEGIN
2 IF dbms_registry.status('CATJAVA') IS NULL THEN
3 RAISE_APPLICATION_ERROR(-20000,
4 'CATJAVA has not been loaded into the database.');
5 END IF;
6 IF dbms_registry.is_loaded('JAVAVM') != 1 THEN
7 RAISE_APPLICATION_ERROR(-20000,
8 'JServer is not operational in the database; ' ||
9 'JServer is required to remove CATJAVA from the database.');
10 END IF;
11 END;
12 /
BEGIN
*
ERROR at line 1:
ORA-20000: CATJAVA has not been loaded into the database.
ORA-06512: at line 3
- Install the JVM
Be sure the REMOVAL script, full_rmjvm.sql, completed successfully
Create the following INSTALL script, full_jvminst.sql
Run it from a new SQL*Plus session
-- Start of File full_jvminst.sql
spool full_jvminst.log;
set echo on
connect / as sysdba
startup mount
alter system set "_system_trig_enabled" = false scope=memory;
alter database open;
select obj#, name from obj$
where type#=28 or type#=29 or type#=30 or namespace=32;
@?/javavm/install/initjvm.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/xdk/admin/initxml.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/xdk/admin/xmlja.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/rdbms/admin/catjava.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
shutdown immediate
set echo off
spool off
exit
-- End of File full_jvminst.sql
- Check log and found no errors.
$ls -ltr full*jvm*
-rw-r--r--. 1 oracle oinstall 784 Nov 15 21:51 full_rmjvm.sql
-rw-r--r--. 1 oracle oinstall 2948 Nov 15 21:52 full_rmjvm.log
-rw-r--r--. 1 oracle oinstall 855 Nov 15 21:58 full_jvminstall.sql
-rw-r--r--. 1 oracle oinstall 9885882 Nov15 22:06 full_jvminst.log
$grep ORA- full_jvminst.log
129 dbms_output.put_line('retrying because of ORA-01545');
SQL> ## ORA-00028 it means that the database has not been restarted
SQL> ## ORA-29539: Java system classes already installed
SQL> ## ORA-29554: unhandled Java out of memory condition
17 -- If the class does not exist an ORA-29532 (Uncaught Java
27 -- If the class does not exist, an ORA-29532 (Uncaught Java
43 -- If the class does not exist an ORA-29532 (Uncaught Java
59 -- If the class does not exist an ORA-29532 (Uncaught Java
543 -- If the java schema object does not exist an ORA-29532 (Uncaught Java
32 -- exist, an ORA-29532 (Uncaught Java exception) will occur.
42 -- exist, an ORA-29532 (Uncaught Java exception) will occur.
58 -- exist an ORA-29532 (Uncaught Java exception) will occur.
74 -- exist an ORA-29532 (Uncaught Java exception) will occur.
SQL> -- in the current session it will cause an ORA-29549 (session state cleared)
SQL> ## ORA-01476: divisor is equal to zero
SQL>
- Validate the Installation
SQL> column owner format A30
-- Validation Query 1
select count(*), object_type
from all_objects
where object_type like '%JAVA%'
and owner = 'SYS'
group by object_type;
COUNT(*) OBJECT_TYPE
---------- ---------------
297 JAVA DATA
911 JAVA RESOURCE
27473 JAVA CLASS
2 JAVA SOURCE
SQL> select owner, count(*)
from all_objects
where object_type like '%JAVA%'
and owner = 'SYS'group by owner;
OWNER COUNT(*)
------ ---------
SYS 28683
SQL> select owner, object_type, count(*)
from all_objects
where object_type like '%JAVA%'
and status <> 'VALID'
and owner = 'SYS'
group by owner, object_type;
no rows selected
SQL>select comp_id,COMP_NAME,VERSION,STATUS,SCHEMA
from dba_registry
order by 3;
COMP_ID COMP_NAME VERSION STATUS SCHEMA
------- ---------------------------------- ---------- ------ ------
CATALOG Oracle Database Catalog Views 12.1.0.2.0 VALID SYS
CONTEXT Oracle Text 12.1.0.2.0 VALID CTXSYS
OWM Oracle Workspace Manager 12.1.0.2.0 VALID WMSYS
XDB Oracle XML Database 12.1.0.2.0 VALID XDB
CATJAVA Oracle Database Java Packages 12.1.0.2.0 VALID SYS
CATPROC Oracle Database Packages and Types 12.1.0.2.0 VALID SYS
JAVAVM JServer JAVA Virtual Machine 12.1.0.2.0 VALID SYS
XML Oracle XDK 12.1.0.2.0 VALID SYS
ORDIM Oracle Multimedia LOADING ORDSYS
9 rows selected.
Reinstall Oracle Multimedia
Install Oracle Mutlmedia according to “Multimedia User’s Guide” section B Managing Oracle Multimedia Installations
- Check the prerequisites are existed including PL/SQL, Oracle JVM, Oracle XML Database, and Oracle XDK.
SQL> select version,status
from dba_registry
where comp_id='JAVAVM';
SQL> select version, status from dba_registry where comp_id='XDB';
SQL> select version, status from dba_registry where comp_id='XML';
-
Go to /rdbms/admin directory and run catcon.pl script to create the users and grant the appropriate privileges. The first parameter is the tablespace for Oracle Multimedia; the second parameter is the tablespace for Oracle Spatial and Graph.
$ perl catcon.pl -u SYS -d $ORACLE_HOME/ord/admin -b ordinst ordinst.sql '--pSYSAUX' '--pSYSAUX'
catcon: ALL catcon-related output will be written to ordinst_catcon_14555.lst
catcon: See ordinst*.log files for output generated by scripts
catcon: See ordinst_*.lst files for spool files, if any
Enter Password:
catcon.pl: completed successfully
- Run the script to install the Oracle Multimedia types and packages.
$ perl catcon.pl -u SYS -d $ORACLE_HOME/ord/im/admin -b catim catim.sql
catcon: ALL catcon-related output will be written to catim_catcon_14649.lst
catcon: See catim*.log files for output generated by scripts
catcon: See catim_*.lst files for spool files, if any
Enter Password:
catcon.pl: completed successfully
- Verify the installation of Oracle Multimedia.
SQL> CONNECT sys as sysdba
SQL> execute sys.validate_ordim;
PL/SQL procedure successfully completed.
If the validation procedure detects invalid objects, it lists the first few invalid objects and sets the registry entry to INVALID; otherwise, it silently sets the Oracle Multimedia registry entry VALID.
SQL> select version, status
from dba_registry
where comp_id='ORDIM';
VERSION STATUS
------------ -------
12.1.0.2.0 VALID
- Check options validations.
SQL>select comp_id,COMP_NAME,VERSION,STATUS,SCHEMA
from dba_registry
order by 4;
COMP_ID COMP_NAME VERSION STATUS SCHEMA
--------- --------------------- ------------ ---------- ------ ------
ORDIM Oracle Multimedia 12.1.0.2.0 VALID ORDSYS
CONTEXT Oracle Text 12.1.0.2.0 VALID CTXSYS
OWM Oracle Workspace Manager 12.1.0.2.0 VALID WMSYS
XDB Oracle XML Database 12.1.0.2.0 VALID XDB
CATJAVA Oracle Database Java Packages 12.1.0.2.0 VALID SYS
CATPROC Oracle Database Packages and Types 12.1.0.2.0 VALID SYS
JAVAVM JServer JAVA Virtual Machine 12.1.0.2.0 VALID SYS
XML Oracle XDK 12.1.0.2.0 VALID SYS
CATALOG Oracle Database Catalog Views 12.1.0.2.0 VALID SYS
9 rows selected.
SQL> select count(*) from dba_objects where status!='VALID';
COUNT(*)
----------
0