当前位置: 首页 > news >正文

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

  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基本知识和排障案例及经验、性能调优等。

相关文章:

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

List item 今天是国庆假期最后一天。窗外&#xff0c;秋雨淅淅沥沥淅淅下个不停。继续深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。 本篇承接前一篇&#xff0c;继续图文深入介绍Oracle DB Scheduler。本篇主要介绍调度的创建。 1. 创建基于时间的作业 • 可以…...

基于Springboot的宠物咖啡馆平台的设计与实现(源码+定制+参考)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

Conda答疑

文章目录 优雅的使用Conda管理python环境1. conda info -e 和conda env list区别2.conda创建环境 创建的新环境在哪个文件夹下3. 自定义路径4. anaconda 新建环境 包是来自哪里4.1. 默认 Anaconda 仓库4.2. Conda-Forge4.3. 镜像源4.4. 自定义频道4.5. 总结 5. conda config --…...

Python 工具库每日推荐【PyPDF2】

文章目录 引言Python PDF 处理库的重要性今日推荐:PyPDF2 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:PDF文件合并案例分析高级特性加密和解密PDF添加水印扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计模式 专栏…...

Nacos的应用

什么是nacos&#xff1f; Nacos是一个开源的动态服务发现&#xff0c;配置管理和服务治理平台。主要用于构建原生应用和微服务架构。它是阿里巴巴开源的项目&#xff0c;整合了配置管理&#xff0c;服务管理&#xff0c;服务发现的功能&#xff0c;核心价值在于帮助用户在云平…...

CSS圆角

在制作网页的过程中&#xff0c;有时我们可能需要实现圆角的效果&#xff0c;以前的做法是通过切图&#xff08;将设计稿切成便于制作成页面的图片&#xff09;&#xff0c;使用多个背景图像来实现圆角。在 CSS3 出现之后就不需要这么麻烦了&#xff0c;CSS3 中提供了一系列属性…...

信息安全工程师(37)防火墙概述

前言 防火墙是一种网络安全系统&#xff0c;旨在监控和控制网络流量&#xff0c;根据预定义的安全规则决定是否允许数据包的传输。 一、定义与功能 定义&#xff1a;防火墙是网络安全的第一道防线&#xff0c;由硬件设备和软件系统共同构成&#xff0c;位于外网与内网之间、公共…...

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

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

Observer(观察者模式)

1. 意图 定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 在观察者模式中&#xff0c;有两类对象&#xff1a;被观察者&#xff08;Subject&#xff09;和观察者&#xff08;Observer&#xf…...

Python深度学习进阶与前沿应用:注意力机制、Transformer模型、生成式模型、目标检测算法、图神经网络、强化学习等

近年来&#xff0c;伴随着以卷积神经网络&#xff08;CNN&#xff09;为代表的深度学习的快速发展&#xff0c;人工智能迈入了第三次发展浪潮&#xff0c;AI技术在各个领域中的应用越来越广泛。为了帮助广大学员更加深入地学习人工智能领域最近3-5年的新理论与新技术&#xff0…...

24.1 prometheus-exporter管理

本节重点介绍 : exporter 流派 必须和探测对象部署在一起的1对多的远端探针模式 exporter管控的难点 1对1 的exporter 需要依托诸如 ansible等节点管理工具 &#xff0c;所以应该尽量的少 1对1的exporter改造成探针型的通用思路 exporter 流派 必须和探测对象部署在一起的…...

【Arduino IDE安装】Arduino IDE的简介和安装详情

目录 &#x1f31e;1. Arduino IDE概述 &#x1f31e;2. Arduino IDE安装详情 &#x1f30d;2.1 获取安装包 &#x1f30d;2.2 安装详情 &#x1f30d;2.3 配置中文 &#x1f30d;2.4 其他配置 &#x1f31e;1. Arduino IDE概述 Arduino IDE&#xff08;Integrated Deve…...

『网络游戏』自适应制作登录UI【01】

首先创建项目 修改场景名字为SceneLogin 创建一个Plane面板 - 将摄像机照射Plane 新建游戏启动场景GameRoot 新建空节点重命名为GameRoot 在子级下创建Canvas 拖拽EventSystem至子级 在Canvas子级下创建空节点重命名为LoginWnd - 即登录窗口 创建公告按钮 创建字体文本 创建输入…...

用Manim简单解释奇异值分解(SVD)和图像处理方面的应

一&#xff0c;介绍 奇异值分解&#xff08;SVD&#xff09;是一种重要的矩阵分解技术&#xff0c;在统计学、信号处理和机器学习等领域有广泛应用。对于任意给定的矩阵 A&#xff08;可以是任意形状的矩阵&#xff09;&#xff0c;SVD将其分解为三个特定的矩阵的乘积&#x…...

红外变电站分割数据集,标注为json格式,总共有5类,避雷器(289张),绝缘子(919张),电流互感器(413张),套管(161张),电压互感器(153张)

红外变电站分割数据集&#xff0c;标注为json格式&#xff0c;总共有5类 避雷器&#xff08;289张&#xff09;&#xff0c;绝缘子&#xff08;919张&#xff09;&#xff0c;电流互感器&#xff08;413张&#xff09;&#xff0c;套管&#xff08;161张&#xff09;&#xff0…...

HBase 性能优化 详解

HBase 是基于 Hadoop HDFS 之上的分布式 NoSQL 数据库&#xff0c;具有高伸缩性和强大的读写能力。然而&#xff0c;由于其分布式架构和复杂的数据存储模式&#xff0c;在高并发、大规模数据场景下&#xff0c;HBase 性能优化至关重要。从底层原理和源代码层面理解 HBase 的特性…...

杭电2041-2050

2041 这里进入递归专题了 #include<bits/stdc.h> #include<iostream> //简单递归 using namespace std; long long int M[45]; int main() {int n;M[1]1;M[2]1;for(int i3;i<45;i){M[i]M[i-1]M[i-2];}while(cin>>n){while(n--){int m;cin>>m;cout…...

Ambari搭建Hadoop集群 — — 问题总结

Ambari搭建Hadoop集群 — — 问题总结 一、部署教程&#xff1a; 参考链接&#xff1a;基于Ambari搭建大数据分析平台-CSDN博客 二、问题总结&#xff1a; 1. VMwear Workstation 查看网关 2. 资源分配 参考&#xff1a; 硬盘&#xff1a;master&#xff08;29 GB&#xff…...

如何用python抓取豆瓣电影TOP250

1.如何获取网站信息&#xff1f; &#xff08;1&#xff09;调用requests库、bs4库 #检查库是否下载好的方法&#xff1a;打开终端界面&#xff08;terminal&#xff09;输入pip install bs4, 如果返回的信息里有Successfully installed bs4 说明安装成功&#xff08;request…...

鸽笼原理与递归 - 离散数学系列(四)

目录 1. 鸽笼原理 鸽笼原理的定义 鸽笼原理的示例 鸽笼原理的应用 2. 递归的定义与应用 什么是递归&#xff1f; 递归的示例 递归与迭代的对比 3. 实际应用 鸽笼原理的实际应用 递归的实际应用 4. 例题与练习 例题1&#xff1a;鸽笼原理应用 例题2&#xff1a;递归…...

Ubuntu 20.04常见配置(含yum源替换、桌面安装、防火墙设置、ntp配置)

Ubuntu 20.04常见配置 1. yum源配置2. 安装桌面及图形化2.1 安装图形化桌面2.1.1 选择安装gnome桌面2.1.2 选择安装xface桌面 2.2 安装VNC-Server 3. ufw防火墙策略4. 时区设置及NTP时间同步4.1 时区设置4.2 NTP安装及时间同步4.2.1 服务端&#xff08;例&#xff1a;172.16.32…...

AI学习指南深度学习篇-生成对抗网络的基本原理

AI学习指南深度学习篇-生成对抗网络的基本原理 引言 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是近年来深度学习领域的一个重要研究方向。GANs通过一种创新的对抗训练机制&#xff0c;能够生成高质量的样本&#xff0c;其应用范围广泛&…...

什么是网络安全

网络安全是指通过采取必要措施&#xff0c;防范对网络的攻击、侵入、干扰、破坏和非法使用以及意外事故&#xff0c;使网络处于稳定可靠运行的状态&#xff0c;以及保障网络数据的完整性、保密性、可用性的能力。 网络安全涉及多个层面&#xff0c;包括硬件、软件及其系统中数…...

Redis list 类型

list类型 类型介绍 列表类型 list 相当于 数组或者顺序表 list内部的编码方式更接近于 双端队列 &#xff0c;支持头插 头删 尾插 尾删。 需要注意的是&#xff0c;Redis的下标支持负数下标。 比如数组大小为5&#xff0c;那么要访问下标为 -2 的值可以理解为访问 5 - 2 3 …...

Linux更改固定IP地址

1.VMware里更改虚拟网络 一: 二: 三:确定就好了 2.修改Linux系统的固定IP 一:进入此文件 效果如下: 执行以下命令: 此时IP已更改 3.远程连接 这个是前提!!! 更改网络编辑器后网络适配器可能会修改,我就是遇着这个,困住我了一会 一:可以以主机IP对应连接 连接成功 二:主机名连…...

Qt+大恒相机回调图片刷新使用方式

一、前言 上篇文章介绍了如何调用大恒SDK获得回调图片&#xff0c;这篇介绍如何使用这些图片并刷新到界面上。考虑到相机的帧率很高&#xff0c;比如200fps是很高的回调频率。那么我们的刷新频率是做不到这么快&#xff0c;也没必要这么快。一般刷新在60帧左右就够了。 二、思路…...

Docker 环境下 PostgreSQL 监控实战:从 Exporter 到 Prometheus 的部署详解

Docker 环境下 PostgreSQL 监控实战&#xff1a;从 Exporter 到 Prometheus 的部署详解 文章目录 Docker 环境下 PostgreSQL 监控实战&#xff1a;从 Exporter 到 Prometheus 的部署详解一 节点简述二 节点监控部署1&#xff09;创建 PostgreSQL 的 exporter 账号2&#xff09;…...

构建带有调试符号的srsRAN 4G

### 构建带有调试符号 首先确保已下载srsRAN 4G&#xff0c;并已创建并导航至构建文件夹&#xff1a; bash git clone https://github.com/srsran/srsran_4g.git cd srsRAN_4G mkdir build cd build 若srsRAN 4G已构建完成&#xff0c;应清除原有构建文件夹后继续。 可以使…...

算法题总结(十)——二叉树上

#二叉树的递归遍历 // 前序遍历递归LC144_二叉树的前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new ArrayList<Integer>(); //也可以把result 作为全局变量&#xff0c;只需要一个函数即可。…...

【MySQL】MySQL 数据库主从复制详解

目录 1. 基本概念1.1 主从架构1.2 复制类型 2. 工作原理2.1 复制过程2.2 主要组件 3. 配置步骤3.1 准备工作3.2 在主服务器上配置3.3 在从服务器上配置 4. 监控和维护4.1 监控复制状态4.2 处理复制延迟4.3 故障恢复 5. 备份策略5.1 逻辑备份与物理备份5.2 增量备份 6. 使用场景…...