并行运行过程 - Oracle PL/SQL

2024-03-15

我正在尝试使用 dbms_scheduler 并行运行存储过程 - Oracle PL/SQL,但出现类似未知作业的错误,我也尝试过 dbms_job,这里出现错误 - 必须声明标识符 dbms_jobs。有人可以帮我吗? 以下是我尝试过的两种方法:

CREATE PACKAGE BODY pkg IS
CREATE PROCEDURE do_parallel_execution
IS
BEGIN
   DBMS_SCHEDULER.RUN_JOB('pkg1.proc1', false);
   DBMS_SCHEDULER.RUN_JOB('pkg1.proc2', false);
   DBMS_SCHEDULER.RUN_JOB('pkg1.proc3', false);
END;

CREATE PACKAGE BODY pkg IS
CREATE PROCEDURE run_in_parallel
IS
   l_jobno pls_integer;
BEGIN
   dbms_job.submit(l_jobno, 'pkg1.proc1; end;' );
   dbms_job.submit(l_jobno, 'pkg1.proc2; end;' );
  -- dbms_job.submit(l_jobno, 'pkg1.proc3; end;' );
END;

其中 pkg1 定义了所有 3 个过程。 谢谢你!


要并行执行其他不相关的过程,请使用调度程序作业链:

创建程序:

create or replace package test as
    procedure test1;
    procedure test2;
    procedure test3;
end test;
/

create or replace package body test as
    procedure test1 is
    begin
        sys.dbms_session.sleep(5);
    end test1;

    procedure test2 is
    begin
        sys.dbms_session.sleep(5);
    end test2;

    procedure test3 is
    begin
        sys.dbms_session.sleep(5);
    end test3;
end test;
/

为每个过程创建调度程序:

BEGIN
    DBMS_SCHEDULER.create_program(
        program_name => 'TEST1_PROGRAM',
        program_action => 'TEST.TEST1',
        program_type => 'STORED_PROCEDURE',
        number_of_arguments => 0,
        comments => NULL,
        enabled => FALSE);

    DBMS_SCHEDULER.ENABLE(name=>'TEST1_PROGRAM');    

    DBMS_SCHEDULER.create_program(
        program_name => 'TEST2_PROGRAM',
        program_action => 'TEST.TEST2',
        program_type => 'STORED_PROCEDURE',
        number_of_arguments => 0,
        comments => NULL,
        enabled => FALSE);

    DBMS_SCHEDULER.ENABLE(name=>'TEST2_PROGRAM');    

    DBMS_SCHEDULER.create_program(
        program_name => 'TEST3_PROGRAM',
        program_action => 'TEST.TEST3',
        program_type => 'STORED_PROCEDURE',
        number_of_arguments => 0,
        comments => NULL,
        enabled => FALSE);

    DBMS_SCHEDULER.ENABLE(name=>'TEST3_PROGRAM');    
END;
/

创建调度程序链:

BEGIN
  -- one step for each program
  SYS.DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
     chain_name          => 'TEST_CHAIN'
    ,step_name           => 'CHAIN_STEP1'
    ,program_name        => 'TEST1_PROGRAM');

  SYS.DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
     chain_name          => 'TEST_CHAIN'
    ,step_name           => 'CHAIN_STEP2'
    ,program_name        => 'TEST2_PROGRAM');

  SYS.DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
     chain_name          => 'TEST_CHAIN'
    ,step_name           => 'CHAIN_STEP3'
    ,program_name        => 'TEST3_PROGRAM');

  -- one rule with condition "true" to start each step immediately
  SYS.DBMS_SCHEDULER.DEFINE_CHAIN_RULE  (
      CHAIN_NAME  => 'TEST_CHAIN',
      rule_name  => 'TEST_RULE1',
      condition => 'TRUE',
      action => 'START "CHAIN_STEP1"');   

  SYS.DBMS_SCHEDULER.DEFINE_CHAIN_RULE  (
      CHAIN_NAME  => 'TEST_CHAIN',
      rule_name  => 'TEST_RULE2',
      condition => 'TRUE',
      action => 'START "CHAIN_STEP2"');   

  SYS.DBMS_SCHEDULER.DEFINE_CHAIN_RULE  (
      CHAIN_NAME  => 'TEST_CHAIN',
      rule_name  => 'TEST_RULE3',
      condition => 'TRUE',
      action => 'START "CHAIN_STEP3"');   

  -- one rule to close out the chain after all steps are completed    
  SYS.DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
     chain_name          => 'TEST_CHAIN',
     rule_name           => 'TEST_RULE4',
     condition           => 'CHAIN_STEP1 Completed AND CHAIN_STEP2 Completed AND CHAIN_STEP3 Completed',
     action              => 'END 0');

END;
/

链流程现在如下所示(如 SQL Developer 所示):

现在创建一个调度程序作业来运行链:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => 'TEST_JOB',
            job_type => 'CHAIN',
            job_action => 'TEST_CHAIN',
            number_of_arguments => 0,
            start_date => NULL,
            repeat_interval => NULL,
            end_date => NULL,
            enabled => FALSE,
            auto_drop => FALSE,
            comments => '');

    DBMS_SCHEDULER.SET_ATTRIBUTE( 
             name => 'TEST_JOB', 
             attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_RUNS);

END;
/

并运行作业:

BEGIN
    DBMS_SCHEDULER.RUN_JOB(job_name => 'TEST_JOB', USE_CURRENT_SESSION => FALSE);
END;
/

现在查看作业的作业运行详细信息:

"LOG_ID" "LOG_DATE"                               "JOB_NAME" "JOB_SUBNAME" "STATUS"    "ERROR#" "ACTUAL_START_DATE"                                "RUN_DURATION"
"1548"   "14-JUN-20 12.15.46.744612000 AM -04:00" "TEST_JOB" "CHAIN_STEP3" "SUCCEEDED" "0"      "14-JUN-20 12.15.41.708043000 AM AMERICA/NEW_YORK" "+00 00:00:05.000000"
"1544"   "14-JUN-20 12.15.46.746544000 AM -04:00" "TEST_JOB" "CHAIN_STEP2" "SUCCEEDED" "0"      "14-JUN-20 12.15.41.690404000 AM AMERICA/NEW_YORK" "+00 00:00:05.000000"
"1546"   "14-JUN-20 12.15.46.748830000 AM -04:00" "TEST_JOB" "CHAIN_STEP1" "SUCCEEDED" "0"      "14-JUN-20 12.15.41.690891000 AM AMERICA/NEW_YORK" "+00 00:00:05.000000"
"1550"   "14-JUN-20 12.15.46.968592000 AM -04:00" "TEST_JOB" ""            "SUCCEEDED" "0"      "14-JUN-20 12.15.41.574115000 AM AMERICA/NEW_YORK" "+00 00:00:05.000000"

注意:

  • 该作业于“12.15.41.574115000”(ACTUAL_START_DATE,第 1550 行)开始。

  • 每个作业步骤在整个作业启动的几分之一秒内启动(如第 1544、1546 和 1548 行中每个步骤的 ACTUAL_START_DATE 中所记录),并在预期的 5 秒内完成。

  • 整个作业于“14-JUN-20 12.15.46.968592000”(LOG_DATE,第 1550 行)完成,完成所有三个步骤的总持续时间为 5 秒。

  • 请注意,规则处理可能会给链的总执行时间增加一点点开销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

并行运行过程 - Oracle PL/SQL 的相关文章

  • Oracle group by 中的字符串聚合

    我已经形成了一个大型查询 它使用以下数据条件获取大型数据集 Column1 Column2 M1 OTH M1 HHM M1 RES M2 HHM M2 RES M3 OTH M3 RES 我需要将其形成为 M1 OTH HHM RES M
  • SQL选择符号||是什么意思意思是?

    什么是 在 SQL 中做什么 SELECT a b AS letter 表示字符串连接 不幸的是 字符串连接不能在所有 sql 方言之间完全移植 ANSI SQL 中缀运算符 mysql concat 可变参数函数 caution 表示 逻
  • 在 Oracle 临时表上放置索引安全吗?

    我读过 不应分析临时表 因为它会破坏其他表的统计信息 指数怎么样 如果我在程序运行期间在表上放置索引 使用该表的其他程序会受到该索引的影响吗 索引是否会影响我的进程以及使用该表的所有其他进程 或者它会单独影响我的过程吗 所有的回复都不是权威
  • 从 oracle 中为每个组选择最新行

    我在留言簿中有一张包含用户评论的表格 列有 id user id 标题 评论 时间戳 我需要为每个用户选择最新行 我尝试使用 group by 执行此操作 但没有管理它 因为我无法在按 user id 分组的同一查询中选择任何其他内容 SE
  • 我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]

    这个问题在这里已经有答案了 我有一个很大的 csv 文件 需要很长时间才能阅读 我可以使用 parallel 或相关的包在 R 中并行读取此内容吗 我尝试过使用 mclapply 但它不起作用 根据OP的评论 fread来自data tab
  • 如何对Oracle进行SQL注入

    我正在对一个系统进行审计 开发人员坚称该系统可以防止 SQL 注入 他们通过去掉登录表单中的单引号来实现这一点 但后面的代码没有参数化 它仍然使用字面 SQL 如下所示 username username Replace var sql s
  • 想要从字符格式转换为带小数的数字格式

    想要将字符格式 00001000000 转换为10000 00 请帮我 我已经尝试过 select to number 00012300 9999999999 99 nls numeric characters from dual 这个脚本
  • Oracle Many OR 与 IN () 的 SQL 性能调优 [重复]

    这个问题在这里已经有答案了 我手头没有 解释计划 您能帮忙判断以下哪一个更有效吗 选项1 select from VIEW ABC where STRING COL AA OR STRING COL BB OR STRING COL BB
  • 处理异步并行任务的多个异常

    Problem 多个任务并行运行 所有任务 没有任务或其中任何任务都可能抛出异常 当所有任务完成后 必须报告所有可能发生的异常 通过日志 电子邮件 控制台输出 等等 预期行为 我可以通过 linq 使用异步 lambda 构建所有任务 然后
  • 在 C# 中多次使用单个参数的更好方法

    我刚开始使用准备好的语句从数据库查询数据 并且在实现 C 参数 特别是 OracleParameters 时遇到问题 假设我有以下 SQL string sql select from table1 t1 table2 t2 where t
  • 如何比较表中最后一个和倒数第二个条目的值?

    我在 Oracle 中有一个名为quotes 的表 其中包含两列 date 和value 我想比较表中最后一个条目和倒数第二个条目的值 在此示例中 我想获取日期13 1 和 11 1在一行中以及每个日期的值之间的差异 10 5 5 报价表
  • 数据库的创建日期

    这是一个问题 起源于this https stackoverflow com questions 2522626 check how old an oracle database is 2523227 2523227杰米提出的问题 我想我会
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • C# 的快速线程安全随机数生成器

    我需要在多个正在运行的线程中快速生成随机浮点数 我尝试过使用System Random 但它对于我的需求来说太慢了 并且它在多个线程中返回相同的数字 当我在单线程中运行应用程序时 它工作正常 此外 我需要确保生成的数字在 0 到 100 之
  • 如何在 Emgu CV 项目中利用 OpenCL

    我是使用 Emgu CV 的新手 并开始创建小型示例项目 例如面部检测 眼睛检测等 如果我可以利用 OpenCL 来加速使用 GPU 的过程 那就太好了 否则 当我降低scaleFactor时 它会导致大量的CPU利用率 我怎样才能做到这一
  • 如何在可能为空值的字段上创建唯一索引(Oracle 11g)?

    这是包含 3 列的示例表 ID UNIQUE VALUE UNIQUE GROUP ID 我希望可以允许以下记录 1 NULL NULL 2 NULL NULL or 3 NULL 7 4 123 7 or 注意 此条件不允许unique
  • 安装 OCI8:如何纠正“使用未定义常量 OCI_COMMIT_ON_SUCCESS”错误?

    我正在尝试在 RedHat 服务器 RHEL7 上为我的 Apache 服务器安装 OCI8 此时 当我尝试使用 Symphony 连接到我的服务器时 出现以下错误 异常 ErrorException 使用未定义的常量 OCI COMMIT
  • simpleJdbcCall 调用 Pl/SQL 过程 -- ORA-22922 不存在的 LOB 值

    我收到此 SQLException ORA 22922 不存在的 LOB 值 我的场景是 我正在调用一个采用结构数组的过程 该结构体包含三种类型 两种是日期 一种是 Clob 当我使用 Spring 的 simpleJdbcCall 设置
  • 满足条件时终止所有进程

    我正在使用星图来运行测试功能 当进程首次找到排列 5 2 4 3 1 时 终止所有进程的最佳 最安全方法是什么 import multiprocessing as mp import time def testing lts code st
  • Oracle Blob 在 PHP 页面中作为 img src

    我有一个网站当前使用文件服务器上的图像 这些图像显示在页面上 用户可以根据需要拖放每个图像 这是使用 jQuery 完成的 图像包含在列表中 每张图片都非常标准 img src network path image png height 8

随机推荐

  • 从任务列表传递 PID 并使用任务列表终止进程

    我正在尝试让 Windows 进程符合某些特定标准 例如它们就像 123456 exe 并试图用任务列表杀死它们 我正在尝试这样做 FOR F usebackq tokens 2 skip 2 i IN tasklist findstr r
  • 错误代码:500 on React Native 0.56 for android

    我的项目是一个新的空反应本机项目 构建时一切都很酷 但在 Android 设备上我每次都会遇到红色的 错误 500 屏幕 我试过这段代码 yarn remove babel preset react native yarn add emai
  • 嵌套 php 包括使用“./”

    我有几个 PHP 文件包含 来自其他几个目录的其他文件 在其中包含的文件之一中 foo bar php 我希望 bar php 包含目录 foo 中包含的其他 3 个文件 然而 bar php 实际上被另一个目录中的另一个文件包含 该目录又
  • 当元素名称中包含冒号时,如何使用 LINQ 查询 XDocument?

    我正在尝试在 XDocument 对象中使用 LINQ to XML 如何查询下面示例中的结果元素
  • Symfony2 应用程序/控制台不生成实体关系/关联的属性或模式更新

    我正在阅读并遵循代码中有关使用数据库和原则的 Symfony2 书中所写的内容 http symfony com doc 2 0 book doctrine html http symfony com doc 2 0 book doctri
  • WCF 或 WSE 编辑安全标头

    我一直在尝试使用 WCF 或 WSE 更改肥皂安全元素 WCF 实现消息检查器并在 Beforerequestsent 中添加自定义代码 在后面的代码中设置以下自定义绑定后 我在参考 System ServiceModel Channels
  • 允许使用 itextsharp 在密码安全 pdf 中提取页面

    我不知道是否可以创建启用密码安全性的 pdf 并且还允许提取页面 我在 itextsharp 中没有找到任何允许启用页面提取的属性 有人有任何想法吗 这是我想要启用的属性 非常感谢 我查看了 ISO 32000 2 草案中的权限位 并将它们
  • @Autowired 说不建议进行现场注入[重复]

    这个问题在这里已经有答案了 谁能告诉我为什么 autowired 说不建议进行字段注入 并且 TextWriter 对象 文本 也说它无法自动装配 因为有多个文本编写器类型的 bean RestController public class
  • 如何在Java中解密aes-256-cbc

    我已经在 php ini 中对字符串进行了加密 从 php 和 node js 解密成功 另外还必须通过java来解密 帮我看一下java解密的例子吗 PHP 加密代码 encrypt encryption method aes 256 c
  • 更改 $*DISTRO 值以进行测试

    我需要测试一个功能包括这一行 https github com rakudo rakudo commit 0a2eef8fb0adb24164999a2b71c415fd11fe748a diff 4ce1542a6f014c9a003fe
  • jquery 深度链接 - 它如何影响分析?

    我正在考虑使用http www asual com jquery address http www asual com jquery address 但我想知道它如何影响谷歌分析 谷歌分析是页面底部的一段代码 我想深层链接仍然看起来像是初始
  • 生成球体的顶点

    在 DirectX 移动照明示例中 圆柱体是按以下方式生成的 for DWORD i 0 i lt 50 i FLOAT theta 2 D3DMX PI i 50 1 pVertices 2 i 0 position D3DMXVECTO
  • JavaScript 的类似 Python 的继承

    在 python 中我可以做这样的事情 main py class MainClass def init self self name some name def startDoingStuff self print I m doing s
  • 确定形成四边形的顶点顺序

    假设我在 2D 空间中有 4 个顶点 有谁知道一种有效的算法可以给我对应于简单四边形的顶点排序 也就是说 它将标记顶点1 2 3 4这样如果我跟随1 2 2 3 3 4我将绘制一个简单的 即不相交的 四边形 只需提供我可以谷歌搜索的标准算法
  • 如何在Java中实现Stream而不出现资源泄漏警告

    我希望实施Stream
  • C 是否具有函数参数名称的 __func__ 功能?

    C 标准是否支持类似的东西 func 对于函数参数的名称 不 C99标准有以下内容 6 10 8 预定义宏名称 以下宏名称应由实现定义 DATE FILE LINE STDC STDC HOSTED STDC MB MIGHT NEQ WC
  • 包括本地与远程 javascript 库

    我正在使用 jsSHA 1 3 1在这里下载 https github com Caligatio jsSHA downloads并用于我的本地主机上的学习项目 它给出的结果与我通过引用遥控器获得的副本略有不同 如下所示 现在 远程复制对我
  • 实例初始值设定项和*this*关键字[重复]

    这个问题在这里已经有答案了 尝试编译这段代码 public class Main public static void main String args new Main System out println x Error here in
  • Internet Explorer 中的淘汰赛验证错误?

    在我的剃刀观点中 使用knockout http knockoutjs com据说敲除验证 https github com ericmbarnard Knockout Validation我添加以下行 以实际开始使用 ko 验证 Scri
  • 并行运行过程 - Oracle PL/SQL

    我正在尝试使用 dbms scheduler 并行运行存储过程 Oracle PL SQL 但出现类似未知作业的错误 我也尝试过 dbms job 这里出现错误 必须声明标识符 dbms jobs 有人可以帮我吗 以下是我尝试过的两种方法