一.JAVAVM 组件 说明

 

有关Oracle 所有组件的概述,参考:

​Oracle 8i/9i/10g/11g 组件(Components) 说明​

​http://www.cndba.cn/Dave/article/1445​

 

现在我们查看组件的信息:

SQL> col comp_id for a15

SQL> col version for a15

SQL> col comp_name for a30

SQL> select comp_id,comp_name,version from dba_registry ;

 

COMP_ID         COMP_NAME                      VERSION

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

XDB             Oracle XML Database            11.2.0.3.0

AMD             OLAP Catalog                   11.2.0.3.0

EM              Oracle Enterprise Manager      11.2.0.3.0

SDO            Spatial                        11.2.0.3.0

ORDIM           Oracle Multimedia              11.2.0.3.0

CONTEXT         Oracle Text                    11.2.0.3.0

ODM             Oracle Data Mining             11.2.0.3.0

EXF             Oracle Expression Filter       11.2.0.3.0

RUL             Oracle Rules Manager           11.2.0.3.0

OWM             Oracle Workspace Manager       11.2.0.3.0

CATALOG         Oracle Database Catalog Views  11.2.0.3.0

 

COMP_ID         COMP_NAME                      VERSION

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

CATPROC         Oracle Database Packages and T11.2.0.3.0

                ypes

 

JAVAVM          JServer JAVA Virtual Machine   11.2.0.3.0

XML             Oracle XDK                     11.2.0.3.0

CATJAVA         Oracle Database Java Packages  11.2.0.3.0

XOQ             Oracle OLAP API                11.2.0.3.0

APS             OLAP Analytic Workspace        11.2.0.3.0

 

17 rows selected.

 

MOS 对JAVAVM组件的描述:

JVM is aplatform-independent execution environment that converts Java bytecode intomachine language and executes it. Most programming languages compile sourcecode directly into machine code that is designed to run on a specificmicroprocessor architecture or operating system, such as Windows or UNIX.

--JVM 是一个独立的执行环境平台,其可以直接将Java源码编译成机器码,然后在特定的处理器架构或者系统下执行。

 

A JVM -- amachine within a machine -- mimics a real Java processor, enabling Javabytecode to be executed as actions or operating system calls on any processorregardless of the operating system.

--JVM 是机器中的机器,其有执行的Java 进程软件,可以执行Java bytecode。因为其是一个虚拟的machine,因此可以在任何操作系统上安装JVM并执行Java bytecode。

 

For example,establishing a socket connection from a workstation to a remote machineinvolves an operating system call. Since different operating systems handlesockets in different ways, the JVM translates the programming code so that thetwo machines that may be on different platforms are able to connect. 

 

Oracle JServerOption is a Java Virtual Machine (Java VM) which runs within the Oracle databaseserver's address space. Oracle also provides a JServer Accelerator to compileJava code natively. This speeds up the execution of Java code by eliminatinginterpreter overhead. 

--Oracle JServer 是Java VM 一个可选的组件,其运行在Oracle DB 的address space。 Oracle 也提供一个JServerAccelerator 来在本地编译Java Code。

 

NCOMP 说明:

The Javalanguage was designed for a platform-independent,  secure developmentmodel. Translating Java  bytecodes into machine instructions degradesperformance.  To regain some of the performance loss, you may chooseto  natively compile certain classes.

 

For example, youmay decide to natively compile code with CPU intensive classes and thiscan be achived using NCOMP.

 

In 10g one caninstall NCOMP from companion CD if they are really using JAVA intensiveapplication an facing any performance issues because of the reason given above.

 

MOS 文档说明:

How to use JServer Accelerator and theNCOMP Utility [ID 134985.1]

 

JVM 组件使用的用户:

SYS 

 

官方文档对JVM说明:


​Overviewof the Java Virtual Machine (JVM)​

Master Note for Oracle JVM [ID 1098505.1]

 

 

二.JVM 重建

MOS 相关文档:

​Note.153271.1​​​ Howto manually install JVM into 8i database 
​​​Note.126029.1​​​ Howto Remove the Jserver (JVM) in versions 8.1.5 and 8.1.6 of the rdbms 
​​​Note.175472.1​​​ Howto Reload the JVM in 8.1.7.X 
​​​Note.202914.1​​​ Howto Reload the JVM in 9.0.1.X 
​​​Note.209870.1​​​ Howto Reload the JVM in 9.2.0.X 
​​​Note.276554.1​​​ Howto Reload the JVM in 10.1.0.X and 10.2.0.X 
​​​Note.457279.1​​​ Howto Reload the JVM in 11.1.0.x 
​​​Note.1112983.1​​ Howto Reload the JVM in 11.2.0.x

 

2.1 Oracle 10g Reload

(1) Verify that the ORACLE_HOMEand ORACLE_SID environment variables are set correctly in the environment, andthat the following system requirements are available: 

--验证ORACLE_HOME,ORACLE_SID等环境变量,及如下的要求:

      The SharedPool has at least 50Mb of free space. 
      The Java Pool has at least 20Mb of free space 
      The SYSTEM tablespace has at least 70Mb of freespace 
      The SYSTEM RBS has at least 100Mb of free space 

 

The initjvm.sqlscript in 10g will check these resources are available when it is run, and ifthey aren't available the execution of the script will terminate with an errorindicating which resource needs to be increased.

--在Oracle 10g中,initjvm.sql 会检查这些要求,只有符合才能继续。

 

(2).  Verify that theJAccelerator (NCOMP) is installed in the Oracle home.  The JAccelerator(NCOMP) is a recommended installation component in 10g when using the JVM asspecified in the patchset release notes.  Failure to install theJAccelerator (NCOMP) will result in an ORA-29558 error being signaled duringthe JVM installation and dramatically reduced performance when executing Javacode, see ​​Note:293658.1​​. 

    --验证JAccelerator(NCOMP)安装。 JAccelerator 是推荐安装的。如果没有安装JAccelerator,那么在JVM安装时会触发ORA-29558错误。

 

(3).  Shutdown the instance andthen create and run the following sql script from a new sqlplus session:

--shutdown 实例,然后执行如下脚本:

-- Start of File full_rmjvm.sql 
 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/catnoexf.sql 
 @?/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 ando2.type#=29; 
 shutdown immediate 
 set echo off 
 spool off 
 exit 
-- End of File full_rmjvm.sql 

 

The actions above are required to resolvesome known issues, such as ​​bug:1365707​​. 

 

IMPORTANT NOTES 

注意事项:

a)  TheSHUTDOWN command is needed here to ensure that the database is synchronized todisk after running rmjvm.sql.  Failure to perform this action can resultin spurious errors such as:

ORA-29549: class%s.%s has changed, Java session state cleared 
when running initjvm.sql. 

b)  The EXIT command is needed here to ensure that the sqlplus sessionresynchronizes its cache with the database, again to prevent spurious errorsoccurring when running the JVM initialization scripts. 

 

(4).  Check that the previousscript completed ok.  You can ignore object doesn't exist type errors heresuch as: 

--确认之前的脚本执行完毕,可以忽略类似如下的错误:

ORA-04043: object XMLGEN does not exist 
ORA-01432: public synonym to be dropped does not exist 

raised when running rmxml.sql.  Also, ORA-39705 errors from the executionof catnoexf.sql, e.g.:
ORA-39705: component 'EXF' not found in registry

can be ignored, as these are expected.

 

The last threeselect statements should show no java objects remaining, and that theSYS.JAVA$CLASS$MD5$TABLE was removed successfully before proceeding. 

 

In some cases you may see some rowsreturned by the last but one query, e.g:

SQL> select obj#, name fromobj$ where type#=28 or type#=29 or type#=30 or namespace=32;

OBJ# NAME 
---------- ------------------------------ 
44909 JAVA$POLICY$SHARED$00000001 
44910 JAVA$POLICY$SHARED$00000002 
2 rows selected. 

 

These can besafely ignored if they only reference object names of the form'JAVA$POLICY$SHARED$<sequence number>', providing they no longer appearonce the instance is restarted.  If any other rows are returned, or if youhave any doubts, stop at this point and contact Oracle Support supplying thelog file generated above.

If you encounteran OCI-21500 "internal error code, arguments: [koxsihread1]" error,then please see ​​Note:350972.1​​ toresolve that error.

 

If you encounter an ORA-20000 "JServer is not operational in the database; JServer isrequired to remove CATJAVA from the database" error, then please see ​​Note:757771.1​​ toresolve that error. 

If the abovecommands completed successfully, then create and run the following sql script,ensuring that you disable any password verification scripts you have enabled,otherwise you may encounter ORA-28003/ORA-20001 errors when executing the catexf.sqlscript which uses a hard coded password for the EXFSYS user:

-- Start of Filefull_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; 
 @?/rdbms/admin/catexf.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 

 

If you encounter an OCI-21500"internal error code, arguments: [koxsihread1]" error, then pleasesee ​​Note:350972.1​​​ toresolve that error.

(5).  Once the database has beenrestarted, resolve any invalid objects by running the utlrp.sql script e.g.:TheJVM should now be fully installed (including the XDK & XSU).  The countof Java objects returned above should be around 14987 (on NT) for the SYSuser. 

In a full JVMinstallation depending upon the platform and products installed, the objectscan be broken down by owner as follows:

@?/rdbms/admin/utlrp.sql 

 

The JVM shouldnow be fully installed (including the XDK & XSU). The count of Java objectsreturned above should be around 14987 (on NT) for the SYS user.  In a fullJVM installation depending upon the platform and products installed, theobjects can be broken down by owner as follows:

SQL> select owner, count(*) fromall_objects where object_type like '%JAVA%' group by owner; 

OWNER COUNT(*) 
------------------------------ ---------- 
DMSYS 467 
EXFSYS 40 
MDSYS 117 
ORDSYS 1354 
SYS 14987 
WKSYS 20 

NOTE: These count totals may be slightly higher on 10gR2 than on 10g R1. 

 

If you previously had the InterMedia (ORDSYS), UltraSearch (WKSYS) Data Mining(DMSYS), Spatial (MDSYS) or (EXFSYS) options installed, then these will need tobe re-installed to reload their java dependencies. 

 

This can be achieved by executing thefollowing commands:

 spool jvm_refresh.log 
 connect / as sysdba 
 @?/ord/im/admin/iminst.sql; 
 connect / as sysdba 
 @?/dm/admin/dminst1.sql SYSAUX TEMP <Your $ORACLE_HOME/dm/admindirectory>; 
 connect / as sysdba 
 @?/md/admin/mdinst.sql; 
 connect / as sysdba 
 @?/dm/admin/dminst2.sql; 
 connect / as sysdba 
 @?/ultrasearch/admin/wk0deinst.sql SYS change_on_install ""; 
 connect / as sysdba 
 @?/ultrasearch/admin/wk0install.sql SYS change_on_installchange_on_install 
 SYSAUX TEMP "" PORTAL false; 
 connect / as sysdba 
 alter user WKSYS account unlock identified by change_on_install; 
 @?/ultrasearch/admin/wk0config.sql change_on_install 
   (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) 
   (HOST=<Your hostname>)(PORT=1521)) 
   (CONNECT_DATA=(SERVER=DEDICATED) 
   (SERVICE_NAME=<Your SID NAME>.<Your Domain Name>))) 
   false " "; 
 spool off 

 

2.2 Oracle 11gR2 Reload

 

(1). Verify the following systemrequirements are available: 

The Shared Pool has at least 96Mb of freespace. 
The Java Pool has at least 50Mb of free space 
The SYSTEM tablespace has at least 70Mb of free space 
The SYSTEM RBS has at least 100Mb of free space 

The initjvm.sqlscript in 11g will check these resources are available when it is run, and ifthey aren't available the execution of the script will terminate with an errorindicating which resource needs to be increased. 

 

(2). Shutdown the instance and thencreate and run the following sql script from a new sqlplus session: 

 

-- Start of File full_rmjvm.sql
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/catnoexf.sql
@?/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

 

The actions above are required to resolvesome known issues, such as: 

​Bug1365707​​ ORA-955 ON CREATE OR REPLACE JAVA SYSTEM (INITJVM) AFTER FULLREMOVAL 

Unpublished Bug 1744593 TRYING TO INSTALLJVM IN SAME SESSION AS IT WAS REMOVED FROM GENERATES ORA-29549 

 

IMPORTANT NOTES 

注意事项:

=============== 
a) The SHUTDOWN command is needed here to ensure that the database issynchronized to disk after running rmjvm.sql. Failure to perform this actioncan result in spurious errors when running initjvm.sql such as: 
ORA-29549: class %s.%s has changed, Java session state cleared 

 

b) The EXIT command is needed here toensure that the sqlplus session resynchronizes its cache with the database,again to prevent spurious errors occurring when running the JVM initializationscripts. 

c) There is a known unpublished bug 9711406 that causes ORA-600[17037] whenrunning the rmxml.sql portion of the removal scripts above. 
This can be fixed by applying patch for unpublished Base Bug 8940094 to any11.2.0.1 installations. This is fixed in 11.2.0.2. 
These errors will not prevent a successful removal/reinstall though so stepscan still be carried out without patch applied. 

(3). Check that the previous scriptcompleted successfully. 

 

You can ignore object doesn't exist typeerrors here such as: 
ORA-04043: object XMLGEN does not exist 
ORA-01432: public synonym to be dropped does not exist 

raised when running rmxml.sql. The lastthree select statements should show no java objects remaining. 

 

In some cases you may see some rows returnedby the last but one query, e.g: 

SQL> select obj#, name from obj$ 
2> where type#=28 or type#=29 or type#=30 or namespace=32; 

OBJ# NAME 
---------- ------------------------------ 
44909 JAVA$POLICY$SHARED$00000001 
44910 JAVA$POLICY$SHARED$00000002 

These objectscan be safely ignored if they only reference object names in the form ofJAVA$POLICY$SHARED$<sequence number>', providing they no longer appearonce the instance is restarted. If any other rows are returned, or if you haveany doubts, stop at this point and contact Oracle Support Services (OSS)supplying the log file generated above. 

If the above commands completed successfully, then create and run the following sqlscript: 

 

-- 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;
@?/rdbms/admin/catexf.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


If theinitjvm.sql script errors with an ORA-955 error executing the "create orreplace java system" command, then see the following note on Metalink fordetails on how to resolve this. 

​​​Note276457.1​​​ How to Resolve ORA-955 Errors When Running initjvm.sql 


(4). Once the database has beenrestarted, resolve any invalid objects. 

 

This can be performed by running theutlrp.sql script e.g.: 
@?/rdbms/admin/utlrp.sql 

The JVM shouldnow be fully installed. The count of Java objects returned above should bearound 21223 (on Windows XP) for the SYS user. 

In a full JVM installation the following default objects should exist. 

SQL> select owner, count(*) from all_objects 
2 where object_type like '%JAVA%' group by owner; 

OWNER COUNT(*) 
------------------------------ ---------- 

SYS 21313 

EXFSYS 48 

 

NOTE: Theseobject counts can vary by a few hundred on different Operating Systems anddifferent flavors of Operating Systems. As a general rule if the object countfor SYS is in the region of 21000 with no invalid SYS objects then this wouldbe considered a full JVM installation. 

If youpreviously had the InterMedia (ORDSYS), UltraSearch (WKSYS) Data Mining(DMSYS), Spatial (MDSYS) or (EXFSYS) options installed, then these will need tobe re-installed to reload their java dependencies. This can be achieved bycontacting the respective support teams for each product by logging a newService Request. 

 

 

三.常见问题参考

HOW DOES ORACLE STORE JAVA CLASSES INTODATABASE [ID 156439.1]

How To Find The Java Source Of A Java StoredProcedure [ID 265293.1]
How to Check Oracle JVM is Installed in the Database [ID 397770.1]

Simple Java Stored Procedure to Check thatthe Oracle JVM is Operating Correctly [ID 471867.1]

 

 

 

 

 

 

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

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

Blog:  ​http://www.cndba.cn/dave

Weibo: ​​http://weibo.com/tianlesoftware​

Twitter: ​​http://twitter.com/tianlesoftware​

Facebook: ​​http://www.facebook.com/tianlesoftware​

Linkedin: ​​http://cn.linkedin.com/in/tianlesoftware​

 


-------加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请----

DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

DBA 超级群:63306533(满);  DBA4 群:83829929   DBA5群: 142216823

DBA6 群:158654907    DBA7 群:172855474   DBA总群:104207940