图文深入理解Oracle DB Scheduler(续)-调度的创建

news2024/10/9 16:28:46
  1. List item

今天是国庆假期最后一天。窗外,秋雨淅淅沥沥淅淅下个不停。继续深宅家中,闲来无事,就多写几篇博文。
本篇承接前一篇,继续图文深入介绍Oracle DB Scheduler。本篇主要介绍调度的创建。

1. 创建基于时间的作业

• 可以使用 DBMS_SCHEDULER 程序包的 CREATE_JOB 过程来创建作业。默认情况下将以禁用状态创建作业,仅当显式启用时,这些作业才生效并可以调度。
• 所有 Job 作业名称都采用以下形式:[schema.]name。默认情况下,将在当前方案中创建作业。作业将按作业所有者的权限来执行。
• 应该使用 SYSTIMESTAMP 并指定时区,这样当时间因夏时制更改时,作业能够自动调整其执行时间。
• 作业运行时使用的国家语言支持(NLS)环境与创建作业时的环境相同。
• job_type 参数指示作业将要执行的任务类型。可选的值包括:
–PLSQL_BLOCK:匿名 PL/SQL 块
–STORED_PROCEDURE:命名的 PL/SQL、Java 或外部过程
– EXECUTABLE:可以从操作系统 (OS) 命令行执行的命令
• job_action 参数可以是要运行的过程的名称、脚本的名称或操作系统命令的名称,也可以是匿名的PL/SQL 代码块,具体取决于 job_type 参数的值。
• EXECUTABLE 类型的外部作业:是指在数据库外部运行的作业。所有外部作业均以低权限的来宾用户运行,所以应确保其有权访问必要的文件和资源。大多数(但不是所有)平台都支持外部作业。对于不支持外部作业的平台,如果将 Job 作业或
Program 程序的属性设置为 EXECUTABLE 类型,将返回错误。

例:创建一个 Job 作业,从今晚起在每晚10:00 调用备份脚本。

BEGIN
DBMS_SCHEDULER.CREATE_JOB(job_name=>'HR.DO_BACKUP',
job_type => 'EXECUTABLE',
job_action =>
'/home/usr/dba/rman/nightly_incr.sh',
start_date=> SYSDATE,
repeat_interval=>'FREQ=DAILY;BYHOUR=23',
/* next night at 10:00 PM */
comments => 'Nightly incremental backups');
END;
/

2. 创建基于事件的调度

要创建基于事件的作业,要将事件消息入队到 Oracle Streams 队列中。必须设置:
• 一个队列说明(应用程序可将消息入队以启动作业)
• 一个事件的触发条件(与 Oracle Streams AQ 规则条件的语法相同),如果为 TRUE 则启动作业。
调度程序都会运行基于事件的作业。但是,将忽略作业已经运行后发生的事件;事件不会触发作业再次运行。
在这里插入图片描述

2.1 使用 Oracle Enterprise Manager创建基于事件的调度

在这里插入图片描述

2.2 CMD创建基于事件的调度

在命令行使用 CREATE_JOB 过程创建事件 Job,则必须设置以下两个附加属性:
• queue_spec:对队列的指定,包括应用程序将消息放入其中以引发作业启动事件的队列的名称;对于安全队列,则为<queue_name>、<agent_name> 对。
• event_condition:基于消息属性的条件表达式,此表达式的求值结果必须为 TRUE,消息才能启动作业。
例:创建一个作业,如果成批装载的数据文件在上午 10:00 之前到达文件系统,则运行此作业。

BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'ADMIN.PERFORM_DATA_LOAD',
job_type => 'EXECUTABLE',
job_action => '/loaddir/start_my_load.sh',
start_date => SYSTIMESTAMP,
event_condition => 'tab.user_data.object_owner =
''HR'' and tab.user_data.object_name = ''DATA.TXT''
and tab.user_data.event_type = ''FILE_ARRIVAL''
and tab.user_data.event_timestamp < 9 ',
queue_spec => 'HR.LOAD_JOB_EVENT_Q');
END;
/

2. 3 Job 作业的事件类型:

  1. 用户或应用程序生成的事件。如:作业完成、文件到达、帐户被锁定、以及库存到达下限阈值等。
  2. 调度程序生成的事件。如:作业开始、作业结束、作业超出其分配的运行时间等。

2. 4 由调度程序作业引发的事件:

• JOB_STARTED
• JOB_SCH_LIM_REACHED
• JOB_SUCCEEDED
• JOB_DISABLED
• JOB_FAILED
• JOB_CHAIN_STALLED
• JOB_BROKEN
• JOB_ALL_EVENTS
• JOB_COMPLETED
• JOB_RUN_COMPLETED
• JOB_STOPPED
• JOB_OVER_MAX_DUR
例:

DBMS_SCHEDULER.SET_ATTRIBUTE('hr.do_backup',
'raise_events'
, DBMS_SCHEDULER.JOB_FAILED);
/

3.创建复杂调度

可以使用调度的组合来创建更复杂的调度。在组合调度中,可以向日历表达式中添加特定日期,或者从日历表达式中排除特定日期。定义调度的重复间隔时可以使用下列选项:
• INCLUDE:向日历表达式结果中添加日期列表
• EXCLUDE:从日历表达式结果中删除日期列表
• INTERSECT:只使用两个或多个调度共有的日期
在这里插入图片描述

3. 1 创建作业链(Job Chains)

• Chain(链)是为达到目标而组合链接在一起的一系列已命名的程序。被称为Dependency Scheduling(依存调度)。
• 在相互依赖的程序构成的链中,每个位置都称为一个 Steps(步骤)。通常情况下,链的一系列初始步骤启动之后,后续步骤的执行依赖于之前一个或多个步骤的完成。
• 例如:运行程序 A 然后运行程序 B,如果程序 A 和程序 B 成功完成,则只运行程序 C,否则运行程序 D。
• 要创建并使用链,要依次完成下列步骤,其中所有过程都是DBMS_SCHEDULER 程序包的一部分:

  1. 创建链对象
  2. 定义链步骤
  3. 定义链规则
  4. 启动链:
    – 启用链
    – 创建指向链的作业

• 使用 CREATE_CHAIN 过程创建链。链名称可以用方案名称来限定(如myschema.myname)。
• 使用 DEFINE_CHAIN_EVENT_STEP 过程定义链的步骤。可以指定步骤中发生的操作为下列项之一:
–程序
– 另一个链(嵌套链)
– 事件
• 使用 DEFINE_CHAIN_RULE 过程向链中添加规则。链规则定义各步骤运行的时间、以及各步骤之间的依赖关系。每个规则都有一个“条件”和一个“操作”:
–如果条件的求值结果为TRUE,则执行操作。条件中可以包含在 SQL WHERE 子句中有效的任何语法。条件通常基于前面一个或多个步骤的结果。
–操作是指定在触发规则时要执行的内容。可能的操作包括:启动或停止步骤、可以选择结束作业链的执行、返回一个值或者返回步骤名和错误代码。
•. 启动链包括两个操作:
–用 ENABLE 过程启用链。(链总是以禁用状态创建,在执行该链之前可向其中添加步骤和规则。)启用一个已启用的链不会返回错误。
– 要运行链,必须创建 ‘CHAIN’ 类型的作业。作业的操作必须引用链名称。

例:
在这里插入图片描述
在上图中,要考虑在批量数据加载期间出现的所有任务和条件:

  1. 必须有要加载的数据;
  2. 然后加载数据;
  3. 在数据加载完成后,需要重建在更新后的表上
    定义的索引;
  4. 然后针对新加载数据运行报表;
  5. 同时观察文件系统以确保在加载期间不会发生空间不足的情况;

4. 高级调度程序

在这里插入图片描述
注:灰色对象不是调度程序对象

4.1 作业类(Job Classes)

• 属于 SYS schema
• 可为类中的作业成员分配一组相同的属性值
• 使用 CREATE_JOB_CLASS 过程创建
• 使用 SET_ATTRIBUTE 过程指定作业的作业类(默认类:DEFAULT_JOB_CLASS)
• 可为作业成员设置资源使用者组(默认组:DEFAULT_CONSUMER_GROUP)
• 可将服务属性设置为所需的数据库服务名称,以便分配系统资源。
• 如果同时设置了 resource_consumer_group 和服务属性,并且指定的服务映射到资源使用者组,则优先使用 resource_consumer_group 属性中指定的资源使用者组。
• 可将作业分组以区分优先级,同一作业类中的单个作业可分配 1 到 5 之间的优先级值。
– 如果该类中的两个作业在同一时间启动,优先级较高的作业优先。
–如果为两个作业指定的优先级值相同,则启动较早的作业优先。
– 如果作业没有指定优先级值,则默认为 3。

4.2 窗口(Windows)

调度程序窗口:
• 可使用 CREATE_WINDOW 过程创建
• 可以在不同时间段启动 Job 或更改资源在 Job 之间的分配。Job 可以在 Window打开时启动,也可以设定在 Window 关闭时强制结束 Job 的运行。
• 多个 Window 的时间段设置可以互相重叠,但同一时间内只能启用一个 Window。可以为每个 Window 设置优先等级,当多个 Window 重叠时能够令最高等级的Window 优先启用。
区分作业优先级:
• 在类级别(通过资源计划分级)
• 在类内的作业级别(使用作业优先级的属性分级)
• 不同作业类中的作业的优先级,无法区分及保证优先执行次序。

4.3 创建作业数组(Job Array)

使用 Job Array(作业数组)是一种效率较高的创建作业集的方式,也适用于轻量作业。使用流程示例如下:

  1. 声明用于存储作业定义的变量 sys.job 和一个作业数组变量 sys.job_array;
  2. 使用 SYS.JOB_ARRAY 构造器初始化作业数组,为数组中的每个作业创建一个位置;
  3. 调整作业数组大小以存储所需的作业数量;
  4. 创建每个作业,并将作业放入作业数组中。start_time 变量被省略并默认为 NULL,表示将立即运行该作业;
  5. 使用 CREATE_JOBS 过程将数组中的所有作业作为一个事务处理提交;
    创建 Job Array示例全部代码:
DECLARE
newjob sys.job;
newjobarr sys.job_array;
BEGIN
-- Create an array of JOB object types
newjobarr := sys.job_array();
-- Allocate sufficient space in the array
newjobarr.extend(100);
-- Add definitions for jobs
FOR i IN 1..100 LOOP
-- Create a JOB object type
newjob := sys.job(job_name => 'LWTJK' || to_char(i),
job_style => 'LIGHTWEIGHT',
job_template => 'PROG_1',
enabled => TRUE );
-- Add job to the array
newjobarr(i) := newjob;
END LOOP;
-- Call CREATE_JOBS to create jobs in one transaction
DBMS_SCHEDULER.CREATE_JOBS(newjobarr,
'TRANSACTIONAL');
END;
/

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB基本知识和排障案例及经验、性能调优等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解三种常用标准化:Batch Norm Layer Norm RMSNorm

Normalization Normalization现在已经成了神经网络中不可缺少的一个重要模块了&#xff0c;并且存在多种不同版本的归一化方法&#xff0c;其本质都是减去均值除以方差&#xff0c;进行线性映射后&#xff0c;使得数据满足某个稳定分布&#xff0c;如下图所示&#xff1a;  …

开放式耳机是什么意思?分享几款适合各类运动佩戴的蓝牙耳机

其实目前有很多热爱运动的人士常常会陷入一个纠结之中&#xff0c;那就是在进行爬山、骑行、步行、跑步或者健身等各类运动的时候&#xff0c;到底佩戴什么样的蓝牙耳机才最为合适呢&#xff1f;那就我个人而言&#xff0c;我觉得开放式耳机无疑会是运动人士的救星。因为作为一…

OJ在线评测系统 微服务高级 网关跨域权限校验 集中解决跨域问题 拓展 JWT校验和实现接口限流降级

微服务网关跨域权限校验 集中的去解决一下跨域 这段代码是用来配置跨源资源共享&#xff08;CORS&#xff09;过滤器的。它创建了一个 CorsConfiguration 实例&#xff0c;允许所有方法和头部&#xff0c;并支持凭证&#xff08;如 Cookies&#xff09;。setAllowedOriginPat…

基于SSM+小程序的教育培训管理系统(教育3)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 基于SSM小程序的教育培训管理系统&#xff08;教育3&#xff09; 1、项目介绍 1、管理员权限操作的功能包括增删改查网课信息&#xff0c;教师信息&#xff0c;学生信息&#xff0c;试卷&#xff0c;…

多元化网络团队应对复杂威胁

GenAI、ML 和 IoT 等技术为威胁者提供了新的工具&#xff0c;使他们更容易针对消费者和组织发起攻击。 从诱骗受害者陷入投资骗局的Savvy Seahorse &#xff0c;到使用 ChatGPT 之类的程序感染计算机并阅读电子邮件的自我复制 AI 蠕虫&#xff0c;新的网络威胁几乎每天都在出现…

【机器学习】探索机器学习在医疗影像分析中的应用

1. &#x1f680; 引言1.1 &#x1f680; 医疗影像分析的现状与发展趋势1.2 &#x1f4dc; 机器学习在医疗影像分析中的核心概念1.3 &#x1f3c6; 医疗影像分析在临床应用中的作用 2. &#x1f50d; 医疗影像分析的演变与创新2.1 &#x1f31f; 医疗影像分析的发展历程2.2 &am…

SQl注入文件上传及sqli-labs第七关less-7

Sql注入文件上传 1、sql知识基础 secure_file_priv 参数 secure_file_priv 为 NULL 时&#xff0c;表示限制mysqld不允许导入或导出。 secure_file_priv 为 /tmp 时&#xff0c;表示限制mysqld只能在/tmp目录中执行导入导出&#xff0c;其他目录不能导出导入。 secure_fil…

linux信号 | 信号的补充知识

前言&#xff1a;本节内容主要是一些linux信号的周边知识或者补充知识。 对于信号的学习&#xff0c; 学习了信号概念&#xff0c; 产生&#xff0c; 保存与捕捉就已经算是认识我们的信号了。 如果想要知道更多关于信号的知识也可以看一下本篇文章。 ps&#xff1a;本篇内容适…

CSS——文字渐入效果

CSS——文字渐入效果 昨天制作了文字的打字机效果&#xff08;CSS——文字打字机效果&#xff09;&#xff0c;然后我想到有些网页的文字效果是平滑渐入的&#xff0c;我就去思考这样的实现方式&#xff0c;其实就把之前的steps()函数去掉即可&#xff0c;但是我想换种实现方式…

电脑无法无线投屏的解决办法

在前司的时候经常遇到电脑无法使用无线投屏器的情况&#xff0c;今天就来聊聊如何解决。 1.不会连接。这种情况&#xff0c;经常发生在WIN10升级WIN11之后&#xff0c;一般是两种办法&#xff0c;一种是同时按键盘上的WINDOWS和K键&#xff0c;右下角就会出来连接的图标&#…

Day8:返回倒数第k个节点

题目&#xff1a; 实现一种算法&#xff0c;找出单向链表中倒数第k个节点。返回该结点的值。 示例&#xff1a; 输入&#xff1a;1->2->3->4->5和k2 输出&#xff1a;4 说明&#xff1a; 给定的k保证是有效的。 public int kthToLast(ListNode head,int k){…

《动手学深度学习》Pytorch 版学习笔记一:从预备知识到现代卷积神经网络

前言 笔者有一定的机器学习和深度学习理论基础&#xff0c;对 Pytorch 的实战还不够熟悉&#xff0c;打算入职前专项突击一下 本文内容为笔者学习《动手学深度学习》一书的学习笔记 主要记录了代码的实现和实现过程遇到的问题&#xff0c;不完全包括其理论知识 引用&#x…

GRASP七大基本原则+纯虚构防变异

问题引出 软件开发过程中&#xff0c;需要设计大量的类&#xff0c;使他们交互以实现特定的功能性需求。但是不同的设计方式&#xff0c;对程序的非功能性需求&#xff08;可扩展性&#xff0c;稳定性&#xff0c;可维护性等&#xff09;的实现程度则完全不同。 有没有一种统一…

动态规划算法——三步问题

1.题目解析 2.算法原理 本题可以近似看做泰波那契数列&#xff0c;即小孩到第一个台阶需要一步&#xff0c;到第二个台阶则是到第一个台阶的步数加上第一阶到第二阶的步数&#xff0c;同理第三阶就是第二阶的步数加上第二阶到第三阶的步数&#xff0c;由于小孩只能走三步&#…

基于STM32的智能垃圾桶控制系统设计

引言 本项目设计了一个基于STM32微控制器的智能垃圾桶控制系统&#xff0c;能够通过超声波传感器检测手部动作&#xff0c;自动打开或关闭垃圾桶盖&#xff0c;提升用户的便利性和卫生性。该项目展示了STM32微控制器在传感器检测、伺服电机控制和嵌入式智能控制中的应用。 环…

在不支持WSL2的Windows环境下安装Redis并添加环境变量的方法

如果系统版本支持 WSL 2 可跳过本教程。使用官网提供的教程即可 官网教程 查看是否支持 WSL 2 如果不支持或者觉得麻烦可以按照下面的方式安装 下载 点击打开下载地址 下载 zip 文件即可 安装 将下载的 zip 文件解压到自己想要解压的地方即可。&#xff08;注意&#x…

毕业设计选题:基于ssm+vue+uniapp的模拟考试小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

2024最新 Navicat Premium 17 简体中文版安装图文详细教程

Navicat 17 引入了一系列新特性&#xff0c;旨在提升用户体验和工作效率。以下是一些值得关注的新功能&#xff1a; ‌模型工作区的全面重新设计‌&#xff1a;包含了增强的图表设计、更强大的同步工具、数据字典支持等多项功能。这有助于在一个工作区中创建多个模型&#xff0…

集合论基础 - 离散数学系列(一)

目录 1. 集合的基本概念 什么是集合&#xff1f; 集合的表示方法 常见的特殊集合 2. 子集与幂集 子集 幂集 3. 集合的运算 交集、并集与补集 集合运算规则 4. 笛卡尔积 5. 实际应用 6. 例题与练习 例题1 练习题 总结 引言 集合论是离散数学的基础之一&#xff…

HarmonyOS第一课 04 应用程序框架基础-习题分析

判断题 1.在基于Stage模型开发的应用项目中都存在一个app.json5配置文件、以及一个或多个module.json5配置文件。T 正确(True) 错误(False) 这个答案是T - AppScope > app.json5&#xff1a;app.json5配置文件&#xff0c;用于声明应用的全局配置信息&#xff0c;比如应用…