执行 Java 的 Oracle 作业

Posted

技术标签:

【中文标题】执行 Java 的 Oracle 作业【英文标题】:Oracle Jobs executing Java 【发布时间】:2010-10-22 19:19:09 【问题描述】:

是否可以从 Oracle (10g) 数据库中运行 java jar 文件?更具体地说,我希望使用

来安排一个 oracle 作业
dbms_scheduler.create_job(...)

运行时,作业将调用 Java 应用程序,该应用程序执行一个过程,该过程涉及通过 HTTP 与另一个应用程序通信、一些业务逻辑,然后使用 JDBC 对数据库执行存储过程。

通常,执行此操作的 chron 作业可以正常工作,但 java 应用程序需要作为给定的 Schema Owner 与数据库对话。出于各种隐私原因,我无法将用户凭据作为纯文本存储在应用程序配置中。

简而言之,我想知道是否有办法安排作业来执行 jar,传入安排作业的用户的凭据。

我不熟悉从 Oracle 数据库调度 Oracle 作业和运行 Java 代码,因此任何指向正确方向的指针都会很棒。尽管我确信它必须存在,但我也没有真正找到任何像样的文档来说明我正在尝试做的事情。

编辑:找到了一些文档,看起来我可以做类似的事情

DBMS_SCHEDULER.create_program (
    program_name        => 'recurring_java_task',
    program_type        => 'EXECUTABLE',
    program_action      => 'java -jar /path/to/recurring-task.jar',
    number_of_arguments => 2,
    enabled             => TRUE,
    comments            => 'Program to perform cleanup');

然后使用 dbms_scheduler.create_job(...)

为“recurring_java_task”创建一个作业。似乎参数是使用

设置的
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
   job_name                IN VARCHAR2,
   argument_position       IN PLS_INTEGER,
   argument_value          IN VARCHAR2);

不过,这仍然不能解决向 Java 应用程序提供连接凭据(用户名/密码)的问题。

【问题讨论】:

【参考方案1】:

您可以将 Java 放入数据库中。 Oracle 10.2 Java Dev Guide。这使用了一个特殊的 JDBC 连接字符串,它实际上引用了内部会话。有一些特殊的考虑,比如没有GUI渲染等。你也可以在pl/sql中调用和包装。

【讨论】:

这是我发现的唯一真正的解决方案,但没有传递凭据的授权问题。感谢您的参考!

以上是关于执行 Java 的 Oracle 作业的主要内容,如果未能解决你的问题,请参考以下文章

如何使用参数从 Oracle PL/SQL 执行 Java jar 文件?

sql 代理创建一个新的作业 执行SISS包

如何在 oracle 作业调度程序中启用程序?

通过MSSQl作业定时执行批处理BAT文件

SqlServer如何设置每秒执行存储过程

Oracle系列:触发器作业序列连接