[20171215]oracle执行java程序.txt

简介: [20171215]oracle执行java程序.txt --//我以前提到假如oracle调用执行java程序会在/dev/shm下建立一堆JOXSHM_EXT开头的文件(实际上在内存中) --//如果异常关闭数据库这些文件就会留在内存中.

[20171215]oracle执行java程序.txt

--//我以前提到假如oracle调用执行java程序会在/dev/shm下建立一堆JOXSHM_EXT开头的文件(实际上在内存中)
--//如果异常关闭数据库这些文件就会留在内存中.
--//参考链接:http://blog.itpub.net/267265/viewspace-2141564/

--//如果在运行中java component发生中断,也会导致java related packages执行发生错误.
--//通过例子演示以及解决方法.

1.环境:
SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

$ ls -l /dev/shm/
total 0

2.建立java程序例子,我不熟悉java,抄一个现成的例子:
create or replace and compile java source named "math_java"
as
public class math_java
{
    public static int sum_java(java.lang.Integer a, java.lang.Integer b)
    {
        java.lang.Integer sum;
        sum = a+b;
        return sum;
    }
}
/

CREATE OR REPLACE FUNCTION sum_java (a NUMBER, b NUMBER) RETURN NUMBER AS LANGUAGE JAVA NAME 'math_java.sum_java(java.lang.Integer, java.lang.Integer) return java.lang.Integer' ;
/

Function created.

$ ls -l /dev/shm/
total 16
-rwxrwx--- 1 oracle oinstall 4096 2017-12-15 15:39:05 JOXSHM_EXT_0_book_229441542
-rwxrwx--- 1 oracle oinstall 4096 2017-12-15 15:39:05 JOXSHM_EXT_1_book_229441542
-rwxrwx--- 1 oracle oinstall 4096 2017-12-15 15:39:06 JOXSHM_EXT_2_book_229441542
-rwxrwx--- 1 oracle oinstall 4096 2017-12-15 15:39:06 JOXSHM_EXT_3_book_229441542
--//可以发现现在/dev/shm存在一些文件.

SCOTT@book> select sum_java(5,7) from dual;
SUM_JAVA(5,7)
-------------
           12

--//ok计算正确.

3.现在删除/dev/shm的内容:

$ rm -f /dev/shm/JOXSHM_EXT_*_book_229441542

--//退出再执行(注不退出执行可以正确执行,估计文件描述没有释放的原因).
SCOTT@book> select sum_java(5,7) from dual;
select sum_java(5,7) from dual
     *
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 55861
Session ID: 274 Serial number: 7

SCOTT@book> SELECT DBMS_JAVA.GETVERSION FROM dual;
SELECT DBMS_JAVA.GETVERSION FROM dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 55886
Session ID: 94 Serial number: 3

4.如何解决:
--//我测试刷新共享池不行.
SCOTT@book> alter system flush shared_pool;
System altered.

SCOTT@book> select sum_java(5,7) from dual;
select sum_java(5,7) from dual
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 55900
Session ID: 106 Serial number: 7

--//重启数据库当然是一种解决问题的方法.
SYS@book> shutdown immediate ;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@book> startup
ORACLE instance started.

Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.
Database opened.

SCOTT@book> select sum_java(5,7) from dual;
SUM_JAVA(5,7)
-------------
           12


--//重复前面的删除操作:
SCOTT@book> select sum_java(6,7) from dual;
select sum_java(6,7) from dual
     *
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 56036
Session ID: 274 Serial number: 7

--//如果不重启,可以执行如下(以sys用户执行):
execute sys.dbms_registry.loaded('JAVAVM');
execute sys.dbms_registry.valid('JAVAVM');
alter system set java_jit_enabled=false scope=memory;
create or replace java system
/
alter system set java_jit_enabled=true scope=memory;


SYS@book> execute sys.dbms_registry.loaded('JAVAVM');
PL/SQL procedure successfully completed.

SYS@book> execute sys.dbms_registry.valid('JAVAVM');
PL/SQL procedure successfully completed.

SYS@book> alter system set java_jit_enabled=false scope=memory;
System altered.

SYS@book> create or replace java system
  2  /
Java created.
--//注:这步有点慢,大约1分钟上下.

SYS@book> alter system set java_jit_enabled=true scope=memory;
System altered.

SCOTT@book> select sum_java(6,7) from dual;
SUM_JAVA(6,7)
-------------
           13

SCOTT@book> SELECT DBMS_JAVA.GETVERSION FROM dual;
GETVERSION
-----------
11.2.0.4.0
          
--//OK,现在能正常使用java程序了.

目录
相关文章
|
1月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
2月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
1月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
53 2
|
1月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
105 1
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
40 1
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
45 5
|
2月前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
2月前
|
Java
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
这篇文章介绍了Java中FileInputStream和FileOutputStream的使用,包括如何读取和写入txt文件以及如何拷贝图片文件。
Java-FileInputStream和FileOutputStream的使用,txt文件及图片文件的拷贝
|
1月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
31 0
|
2月前
|
监控 Java 数据库
Java程序如何进行不停机更新?
Java程序如何进行不停机更新?
107 1

推荐镜像

更多
下一篇
无影云桌面