1 Creating a File Watcher and an Event-Based Job
1.1 执行以下任务概览
- 创建调度程序凭据对象并授予执行权限。
- 创建一个文件监视程序并授予执行权限。
- 创建带有引用事件消息的元数据参数的调度器程序对象。
- 创建引用文件监视程序的基于事件的作业。(可选地,允许作业为文件到达事件的每个实例运行。)
- 启用文件监视程序、程序和作业。
1.2 详细描述
执行以下任务创建文件监视器,并创建基于事件的作业,当指定的文件到达时开始:
- 创建调度程序凭据对象(凭据),通过凭据对主机操作系统进行身份验证以访问文件,并将凭据的执行授权给拥有文件监视程序将启动的基于事件的作业的模式。
- 创建文件监视程序,并将对文件监视程序的执行授权给拥有引用文件监视程序的基于事件的作业的任何模式。
- 创建带有引用事件消息的元数据参数的调度器程序对象。
使用EVENT_MESSAGE属性定义元数据参数。
使用SYS.的参数创建存储过程。SCHEDULER_FILEWATCHER_RESULT程序调用的类型。存储过程必须有一个SYS。SCHEDULER_FILEWATCHER_RESULT type,事件消息的数据类型。该参数的位置必须与定义的元数据参数的位置匹配。这个过程可以访问这个抽象数据类型的属性来了解到达的文件。
4.创建引用文件监视程序的基于事件的作业。您可以使用DBMS_SCHEDULER。SET_ATTRIBUTE过程,使作业能够为文件到达事件的每个实例运行,即使作业已经在处理前一个事件。将PARALLEL_INSTANCES属性设置为TRUE。
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(’’,‘PARALLEL_INSTANCES’, TRUE);
END;
这使得作业可以作为轻量级作业运行,从而可以快速启动作业的多个实例。如果PARALLEL_INSTANCES设置为默认值FALSE,那么在基于事件的作业正在处理另一个任务时发生的文件监视事件将被丢弃。 - 启用文件监视程序、程序和作业。
2 Enabling File Arrival Events from Remote Systems
执行以下任务以在远程系统中启用文件到达事件:
设置数据库以运行远程外部作业。
在第一个远程系统上安装、配置、注册和启动调度程序代理。
对每个额外的远程系统重复步骤2。
为了接收来自远程系统的文件到达事件,必须在该系统上安装调度程序代理,并且必须向数据库注册代理。远程系统不需要Oracle数据库实例来生成文件到达事件
3 Scheduling Remote Database Jobs
- 创建一个作业,在同一主机或远程主机上的另一个数据库实例上运行存储过程和匿名PL/SQL块。
- 目标数据库可以是任何版本的Oracle数据库。
- DBMS_SCHEDULER.CREATE_DATABASE_DESTINATION and DBMS_SCHEDULER.CREATE_CREDENTIAL可用于远程数据库作业。
作业类型为PLSQL_BLOCK和STORED_PROCEDURE的作业可以成为目标属性和凭据属性的SET_ATTRIBUTE调用的主题。
现在可以创建一个作业,在同一主机或远程主机上的另一个数据库实例上运行存储过程和匿名PL/SQL块。目标数据库可以是任何版本的Oracle数据库。
没有新的过程来支持远程数据库作业,而是对现有的DBMS_SCHEDULER过程进行了更改以支持此功能。
4 Creating Remote Database Jobs
步骤概览:
为远程作业设置原始数据库。
使用DBMS_SCHEDULER.CREATE_JOB创建作业。
使用DBMS_SCHEDULER.CREATE_CREDENTIAL创建凭据。
使用DBMS_SCHEDULER.SET_ATTRIBUTE设置作业CREDENTIAL_NAME属性。
使用DBMS_SCHEDULER设置作业目标属性。设置属性。
使用DBMS_SCHEDULER.ENABLE启用作业。
5 Scheduling Multiple Destination Jobs
这使能够指定几个任务应该在其上执行的目标。
它提供了从创建作业的数据库监视和控制作业的能力。
在运行时,多个目标作业被视为作业的集合,这些作业是彼此几乎相同的副本。
所有作业都将基于作业开始日期中指定的时区执行,或者使用源数据库的时区。
多目标作业特性允许指定作业应该在其上执行的多个目标。可以从创建作业的数据库监视和控制作业。包括以下功能:
指定作业必须在其上执行的多个数据库或机器
将调度在多个目标上的作业修改为单个实体
停止或删除在一个或多个远程目标上运行的作业
查找所有作业目标上作业实例的状态
注意,在该特性的初始版本中,所有目的地将基于作业开始日期中指定的时区运行,或者默认为源数据库的时区。
6 查看调度程序元数据
作业表是所有作业的容器,每个数据库有一个表。job表存储所有作业的信息,例如所有者名称或日志记录级别。可以在*_SCHEDULER_JOBS视图中找到此信息。
作业是数据库对象,因此会累积并占用太多空间。为了避免这种情况,默认情况下作业对象会在完成后自动删除。此行为由AUTO_DROP作业属性控制。
DBA和特权用户可以使用许多视图,它们提供有关调度器、作业、调度、窗口等的基本操作信息。这些视图包括:
*_SCHEDULER_PROGRAM_ARGS:显示为所有程序定义的所有参数以及如果存在的默认值 *_SCHEDULER_JOBS:显示所有的作业,包括启用和禁用 *_SCHEDULER_JOB_RUN_DETAILS显示所有完成(失败或成功)的作业运行。每个作业实例都有一行。每行包含关于该实例的作业执行的信息。ERROR#列显示了遇到的第一个错误的编号 *_SCHEDULER_GLOBAL_ATTRIBUTE:显示Scheduler属性的当前值 *_SCHEDULER_JOB_ARGS:显示所有作业的所有set参数值 *_SCHEDULER_JOB_CLASSES:显示所有作业类 对工作链: *_SCHEDULER_RUNNING_CHAINS:显示所有活动链 *_SCHEDULER_CHAIN_STEPS:显示所有链的所有步骤 *_SCHEDULER_CHAINS:显示所有的链 *_SCHEDULER_CHAIN_RULES:显示所有链的所有规则 对于windows和其他高级对象: *_SCHEDULER_WINDOWS显示所有窗口。 显示所有窗口组。 *_SCHEDULER_WINGROUP_MEMBERS显示所有窗口组的成员,一行代表每个组成员。 *_SCHEDULER_JOB_LOG显示所有job的状态变化。 *_SCHEDULER_JOB_ROLES根据数据库角色显示所有的作业。 轻量级作业和常规作业一样,可以通过相同的视图看到: *_SCHEDULER_JOBS:显示所有的job,包括JOB_STYLE= '轻量级' *_SCHEDULER_JOB_ARGS:也显示轻量级作业的所有set参数值 因为轻量级作业不是数据库对象,所以它们在*_OBJECTS视图中不可见。 从Oracle Database 11g Release 2开始: *_SCHEDULER_NOTIFICATIONS显示哪些邮件通知已经设置。 *_SCHEDULER_FILE_WATCHERS显示文件监控器配置信息。 多个目标任务的显示信息如下所示: * _scheduler_dest:显示所有远程作业可以被调度的目标。视图既包含外部目的地(用于远程外部作业),也包含远程数据库作业的数据库目的地。 * _scheduler_external_dest:显示所有已经注册到数据库的代理,可以用作远程外部作业的目的地。 * _scheduler_db_dessts:显示所有可以调度远程数据库任务的数据库。 *_SCHEDULER_GROUPS:显示模式中的组或数据库中的所有组。 *_SCHEDULER_GROUP_MEMBERS:显示模式中的组成员或数据库中的所有组成员。 * _scheduler_job_dest:显示远程数据库的作业状态。
复制
注意:在上面列出的视图中,视图名称开头的星号可以用DBA、ALL或USER替换。
7 练习题
选择关于Oracle调度器的语句为真。
A 创建远程数据库作业是一项手动任务,需要使用特定于操作系统的命令。
B 调度程序凭据是一个对象,要使用它对主机操作系统进行身份验证以进行文件访问。
C 可以指定几个目标,作业应该在这些目标上执行,并从创建作业的数据库监控它们。
答案:BC