使用基于相关性、事件以及时间的计划
使用基于相关性、事件以及时间的计划
目的
本教程介绍了如何使用 Oracle Scheduler 执行基于以下条件的任务:
其他任务的结果(相关性计划)
事件,如文件到达(基于事件的计划)
复杂计划(基于时间的计划)
所需时间
大约 1 个小时
主题
本教程包括下列主题:
查看屏幕截图
将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注意:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。您可以单击单个屏幕截图将其隐藏。
概述
Oracle 数据库包括一个功能丰富的作业调度程序。您可以制定作业计划,使其在指定日期和时间(例如,每个周日晚上 11:00)或在指定事件发生时(例如,当库存低于某个级别时)运行。您可以定义自定义日历(例如,一个财年),以便制定一个计划(例如,每个财政季度的最后一个工作日)。调度程序还包括程序链,这些程序链称为步骤集合,可以互相配合来完成某项任务。程序链中的步骤可以是一个程序、子程序链或事件,您可以指定规则来确定每一步的运行时间以及各步之间的相关性。
在本教程中,您将学习如何使用调度程序简化数据库管理员和应用程序
开发人员所需的复杂任务的计划。
前提条件
开始学习本教程之前,您应该先完成
以下步骤:
设置 HR 用户的权限
用户需要拥有特定的权限才能使用 Oracle Scheduler。在本教程中,用户还需要访问特定的程序包。在本部分中,您需要向 HR 用户授予所有必需的权限。执行以下步骤:
1.
打开一个浏览器,输入以下 URL:
http://:1158/em
输入 sys 作为用户名,指定口令 oracle,以 SYSDBA 的身份连接,然后单击 Login。
注意:如果您是第一次访问企业管理器,那么请向下滚动至页面底部,并单击 I agree。
2.
单击 Administration 选项卡。
3.
向下滚动至 Users and Privileges。
4.
在 Users and Privileges 下,单击Users。
5.
在 Object Name 文本框中输入 HR,并单击 Go。
6.
单击 Edit。
7.
单击 System Privileges。
8.
单击 Edit List。
9.
为 HR 用户添加以下权限。从 Available System Privileges 框中选择以下权限。单击 Move,将权限移到 Selected System Privileges 框中。单击 OK。
CREATE EVALUATION CONTEXT
CREATE EXTERNAL JOB
CREATE JOB
CREATE PROCEDURE
CREATE RULE
CREATE RULE SET
SELECT ANY DICTIONARY
10.
单击 Object Privileges。
11.
从 Select Object Type 下拉列表中选择 Package,并单击 Add。
12.
单击搜索指示灯图标。
13.
对于 Schema 项,从下拉列表中选择 SYS,并在 Search Package Name 中输入 dbms_aq。单击 Go。
14.
选择 DBMS_AQ 和 DBMS_AQADM 复选框,然后单击 Select。
15.
在 SYS.DBMS_AQADM 之后的 Select Package Objects 域中,输入“,SYS.DBMS_LOCK”,然后从 Available Privileges 中选择 EXECUTE,并利用 Move 链接将其移到 Selected Privileges 中。单击 OK。
16.
单击 Apply。
17.
单击 Logout。
创建使用程序的作业
程序提供了一种抽象。操作在程序而不是作业本身中指定。随后,作业指向该程序。例如,如果 shell 脚本名称或位置更改,则不必更改每个作业,而只需更改一个程序。在本部分中,您将创建一个程序和两个分别指向此程序的作业,这需要完成以下任务:
启动 OracleJobSchedulerORCL 服务
执行以下步骤:
1.
打开窗口,查看 Windows 服务。如果您使用的是 Windows XP,请遵循以下路径:
开始 > 控制面板 > 管理工具 > 服务
2.
在服务列表中找到 OracleJobSchedulerORCL 服务。如果该服务已禁用,则右键单击该服务并选择属性。
3.
该服务的可执行文件路径应该指向 Oracle 主目录,这可能与此处所示的目录不同。
将该服务的“启动类型”更改为手动。
4.
单击应用。
5.
单击启动以启动该服务。
6.
启动服务后,单击确定。
7.
关闭“服务”窗口和“管理工具”窗口。
创建程序
在本步骤中,您将创建一个调用 test1.bat 脚本的程序。该脚本可将一个文件的内容复制到另一个文件中。
执行以下步骤:
1.
作为 hr 用户登录企业管理器。单击 Login。
2.
输入 hr 作为用户名,输入 hr 作为口令,然后单击 Login。
注意:如果您是第一次访问企业管理器,那么请向下滚动至页面底部,并单击 I agree。
3.
单击 Administration 选项卡。
4.
在 Database Scheduler 下,选择 Programs。
5.
单击 Create。
6.
输入以下信息,然后单击 Add Another Row。
Name:progexe
Schema:HR
Enabled:Yes
Description:This is a program that runs an external executable
Type:EXECUTABLE
Executable Name:C:\WINDOWS\system32\cmd.exe
7.
输入以下参数信息,然后单击 Add Another Row。该参数指示 cmd.exe 程序在批量脚本完成后退出。
Name:arg1
Default:/q
8.
输入以下参数信息,然后单击 Add Another Row。该参数将关闭 cmd.exe 程序的回应功能。
Name:arg2
Default:/c
9.
输入以下参数信息,然后单击 OK。这是我们要执行的批量脚本。
Name:script_loc
Default:C:\wkdir\test1.bat
10.
程序已经创建完毕。单击 Database Instance 路径式导航栏。
创建使用程序的作业
现在,您将创建一个使用刚刚创建的程序的作业。执行以下步骤:
1.
在 Administration 页面的 Database Scheduler 下,选择 Jobs。
2.
单击 Create。
3.
输入以下信息,然后单击 Change Command Type。
Name:PROGEXE_JOB
Schema:HR
Enabled:Yes
Description:This job uses the program HR.PROGEXE
Logging Level:Log job runs only (RUNS)
Job Class:DEFAULT_JOB_CLASS
Auto Drop:FALSE
Restartable:TRUE
4.
选择 Program Name 并单击搜索指示灯。
5.
从列表中选择 HR.PROGEXE,并单击 Select。
6.
单击 OK。
7.
单击 OK 提交作业。
8.
单击 Running 选项卡。
9.
作业现在正在运行。您可能需要单击 Refresh 几次,直到作业不再出现在“Running Jobs”列表中。单击 History 选项卡。
10.
作业已经成功运行。下一部分要求您以超级用户的身份登录。单击 Logout。
授予程序访问权限
要让其他用户使用该程序,创建此程序的用户或超级用户需要共享它。执行以下步骤:
1.
单击 Login。
2.
以 sys/oracle 和 SYSDBA 的身份登录,然后单击 Login。
注意:用户 HR 可以向用户 OE 授予 progexe 程序的访问权限。应该以 SYS 的身份登录,因为您要向用户 OE 同时授予 CREATE EXTERNAL JOB、CREATE JOB 和 SELECT ANY DICTIONARY 权限,只有超级用户才能执行该任务。
3.
单击 Administration 选项卡。
4.
向下滚动至 Users and Privileges。
5.
单击 Users。
6.
输入 OE 并单击 Go。
7.
选择 OE 并单击 Edit。
8.
单击 System Privileges 选项卡。
9.
您需要向该用户授予其他权限。单击 Edit List。
10.
按住 Ctrl 键的同时,从 Available System Privileges 列表中选择 CREATE EXTERNAL JOB、CREATE JOB 和 SELECT ANY DICTIONARY。释放 Ctrl 键并单击 Move,然后单击 OK。
11.
现在,您需要将 progexe 的 EXECUTE 权限授予 OE 用户。单击 Object Privileges。
12.
从 Select Object Type 下拉列表中选择 Programs,然后单击 Add。
13.
选择 Select Package Objects 框旁边的 Search指示灯。
14.
从 Schema 下拉列表中选择 HR,然后单击 Go。
15.
选择 PROGEXE 并单击 Select。
16.
从 Available Privileges 列表中选择 EXECUTE 并单击 Move,然后单击 OK。
17.
从 Select Object Type 下拉列表中选择 Package,并单击 Add。
18.
在 Select Package Objects 框中输入 SYS.DBMS_LOCK,并从权限列表中选择 Execute,然后单击 Move。然后单击 OK。
19.
单击 Apply。
20.
用户 OE 已经更新。您现在需要以 OE 的身份登录。单击 Logout。
创建使用该程序但驻留在另一个模式中的作业
现在 OE 能够访问程序了,您可以创建和运行一个使用它的作业。执行以下步骤:
1.
单击 Login。
2.
以 oe/oe 身份登录,并单击 Login。
注意:如果您首次以该用户的身份访问企业管理器,那么请向下滚动至页面底部,并单击I agree。
3.
单击 Administration 选项卡。
4.
在 Database Scheduler 下,单击 Jobs。
5.
单击 Create。
6.
输入以下信息,然后单击 Change Command Type。
Name:PROGEXE_JOB2
Schema:OE
Enabled:Yes
Description:This job uses the program HR.PROGEXE
Logging Level:Log job runs only (RUNS)
Job Class:DEFAULT_JOB_CLASS
Auto Drop:FALSE
Restartable:TRUE
7.
选择 Program Name 并单击搜索指示灯。
8.
从列表中选择 HR.PROGEXE,并单击 Select。
9.
单击 OK。
10.
单击 OK。
11.
您的作业已经提交且正在运行。单击 History 选项卡。
12.
作业已经成功完成。单击 Logout。
相关性计划:创建简单的程序链
一个程序链是一组为了一个综合目标而链接在一起的程序。程序链的例子可能是“运行程序 A,然后运行程序 B,只有在程序 A 和 B 都成功完成时才运行程序 C,否则运行程序 D。”
相互依赖的程序链中的每一个位置称为一个步骤。一般而言,在启动程序链的初始几个步骤后,后续步骤的执行取决于之前一个或多个步骤的完成情况。每个步骤都可以指向以下 Scheduler 对象之一:
程序
另一个程序链(嵌套程序链)
事件
在这一部分中,您将创建一个简单的程序链,在该程序链中,将根据前一个任务的结果来启动作业。执行以下步骤:
1.
作为 hr 用户登录企业管理器。单击 Login。
2.
输入 hr 作为用户名,输入 hr 作为口令,然后单击 Login。
3.
单击 Administration 选项卡。
4.
在 Database Scheduler 下,选择 Chains。
5.
单击 Create。
6.
为 Job Chain 输入以下信息以后:
Name:Simplechain
Schema:HR
Enabled:Yes
Description:A simple chain
在 Steps 下面,在第一行中输入 Step1 作为步骤名称。保留 Type 为 Program,然后单击 Object Name 域旁边的搜索指示灯。
7.
选择程序 HR.PROGEXE,并单击 Select。
8.
在 Steps 部分的第二行中,输入以下信息。然后在 Rules 部分中单击 Create。
Step Name:Step2
Object Name:HR.PROGEXE
9.
创建启动程序链的规则。输入以下信息,然后单击 Continue。
Condition:true
Action:start step1
10.
向下滚动,并在 Rules 部分中再次单击 Create。
11.
为了在运行时查看程序链,可以将第二步延迟启动两分半钟。输入以下信息,然后单击 Continue。
Condition:step1 succeeded
Action:after 00:02:30 start step2
12.
现在创建一条规则,以定义终止程序链的条件。向下滚动至 Rules 部分,并单击 Create。
13.
输入以下信息,然后单击 Continue。
Condition:step2 completed
Action:end
14.
向下滚动,查看这个简单的程序链中的步骤和规则。然后单击 OK。
15.
已经创建了简单的程序链。
计划简单的程序链
您现在已经做好准备,可以创建一个指向该程序链的作业来计划程序链了。执行以下步骤:
1.
单击 Create Job Using Chain。
2.
输入以下信息,并单击 OK。
Name:ChainjobDescription:Job using a Simple Chain
3.
Chainjob 已经成功创建。单击 Running 选项卡,查看作业的状态。
4.
单击 Status 图标,查看运行步骤的状态。
5.
您将看到程序链中每一个步骤的状态。单击 Scheduler Jobs 路径式导航栏。
6.
单击 All 选项卡。
7.
单击 Refresh,直到该作业成功完成。
8.
在页面底部的 Related Links 下,单击 Chains。
相关性计划:创建复杂的程序链
在这一部分中,您将创建一个较复杂的程序链,它包含多个步骤以及更复杂的相关性。下图显示了这个复杂的程序链:
执行以下步骤:
1.
创建该程序链要使用的两个程序。通过单击开始,选择所有程序,选择 Oracle Home 安装、Application Development 程序组,然后选择 SQL*Plus,来开启 Windows 的 SQL*Plus。
在 User Name 域和 Password 域中输入 hr,然后单击 OK。
2.
连接以后,运行 wkdir 目录下的 prog1 SQL 脚本。
@C:\wkdir\prog1
该脚本包含以下 SQL 代码:
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name=>'prog1',
program_type=>'PLSQL_BLOCK',
program_action=>'begin dbms_lock.sleep(90); end;',
enabled=>TRUE);
END;
/
3.
现在,执行以下脚本来创建第二个程序。
@C:\wkdir\prog2
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name=>'prog2',
program_action=>'DECLARE
num_tables NUMBER;
BEGIN
SELECT COUNT(*) INTO num_tables FROM USER_TABLES;
IF num_tables < 1000 THEN
raise_application_error(-20100, ''Expecting at least 1000 tables'');
ELSE
NULL;
END IF;
END;',
program_type=>'PLSQL_BLOCK',
number_of_arguments=>0,
comments=>'',
enabled=>TRUE);
END;
4.
最小化 SQL*Plus 窗口,但不要关闭它。切换至企业管理器窗口。在 Scheduler Chains 屏幕中,单击 Create。
5.
在 Create Chain 部分下输入以下信息:
Name:complexchain
Schema:HR
Enabled:Yes
Description:Create a complex chain
在 Steps 部分中,输入以下信息,然后单击 Add 5 Steps。
步骤名称
类型
对象名称
Row 1
Step1
Program
HR.PROG1
Row 2
Step2
Program
HR.PROGEXE
Row 3
Step3
Program
HR.PROG2
Row 4
Step4
Program
HR.PROG1
Row 5
Step5
Program
HR.PROG1
6.
在第六行中,输入以下信息。
Step Name:Step6
Type:Program
Object Name:HR.PROG1
然后向下滚动至 Rules 部分,并单击 Create。
7.
创建启动程序链的规则。输入以下信息,然后单击 Continue。
Condition:true
Action:start step1
8.
在 Rules 部分中,再次单击 Create。
9.
输入以下信息,然后单击 Continue。
Condition:step1 succeeded
Action:start step2, step3
10.
在 Rules 部分中,再次单击 Create。
11.
输入以下信息,然后单击 Continue。
Condition:step3 error_code=20100
Action:start step5
12.
在 Rules 部分中,再次单击 Create。
13.
输入以下信息,然后单击 Continue。
Condition:step2 succeeded
Action:after 00:00:30 start step4
14.
在 Rules 部分中,再次单击 Create。
15.
输入以下信息,然后单击 Continue。
Condition:step4 completed
Action:start step6
16.
在 Rules 部分中,再次单击 Create。
17.
输入以下信息,然后单击 Continue。
Condition:(step5 completed and step6 completed) or step1 failed
Action:end
18.
您现在已经为该复杂程序链创建了步骤和规则。单击 OK。
19.
该复杂程序链创建成功。
修改和计划复杂的程序链
在这一部分中,您要修改在前一部分中创建的程序链,并添加另一个步骤,然后计划该程序链。下图显示了该程序链经修改后的情况。
要修改程序链,执行以下步骤:
1.
选择 Complexchain,并单击 Edit。
2.
输入以下信息来添加另一个步骤,然后向下滚动至 Rules 部分。
Step Name:Step7
Type:SUBCHAIN
Object Name:hr.simplechain
3.
单击 Create。
4.
输入以下信息,然后单击 Continue。
Condition:step2 succeededAction:start step7
5.
现在需要修改具有“step4 completed”条件的规则。向下滚动至 Rules 部分,选择该规则,然后单击 Edit。
6.
将条件更改为 step4 completed and step7 completed。单击 Continue。
7.
向下滚动以确认新的规则条件,然后单击 Apply。
8.
该复杂程序链修改成功。现在可以计划该程序链。单击 Scheduler Chains 路径式导航栏。
9.
选择 COMPLEXCHAIN,并单击 Create Job Using Chain。
10.
输入 complexchainjob 作为名称,并在 Description 域中输入 Job using a complex chain。然后单击 OK。
11.
complexchainjob 作业已经成功创建。单击 Running 选项卡,查看作业的状态。
12.
单击 Status 图标,查看运行步骤的状态。
13.
在不同时间刷新页面,您可能会看到步骤的状态改变。在浏览器中单击 Reload,刷新列表。当所有步骤都已执行时,单击 Scheduler Jobs 路径式导航栏。
14.
单击 All 选项卡。
15.
单击 Refresh。
16.
complexchainjob 作业成功运行。单击 Database Instance 路径式导航栏。
基于事件的计划:创建带有基于事件的计划的作业
基于事件的计划将根据实时事件来触发作业。事件被定义为任何状态变更或在系统中发生的情况(例如文件到达)。
在这一部分中,您将修改之前创建的 Chainjob,使之在文件到达文件系统时运行。当您的工作目录中出现 file1 时,该作业将运行。在本教程中,您将创建一个队列,当 file1 到达时,将向该队列加入一条消息。当消息加入到队列后,Scheduler 开始执行 Chainjob 作业。在本例中,您将创建一个有类型的队列,这意味着,您必须首先创建用户定义的类型,然后基于该用户定义的类型创建队列。队列将以表格形式存储在数据库中,因此您还必须创建一个队列表。执行下列任务:
创建目录对象
创建一个目录,以指定当文件到达文件系统时所处的位置。
1.
恢复 SQL*Plus 窗口,然后运行以下命令以添加一个目录。
CONNECT / AS SYSDBA
@C:\wkdir\add_dir.sql
create or replace directory file_arrival_directory as 'C:\wkdir';
grant read on directory file_arrival_directory to HR;
创建对象类型
创建一个对象类型,用于标识到达的文件。
1.
切换回企业管理器。在 Administration 选项卡中,向下滚动至 User Defined Types 部分,然后选择 Object Types。
2.
单击 Create。
3.
输入 mytype 作为名称,并在 Attributes 下单击 Add。
4.
输入 file_name 作为 Name,选择 VARCHAR2 作为 Type,并输入 80 作为 Length。然后单击 OK。
5.
单击 OK,创建对象类型。
6.
创建您的对象类型。单击 Database Instance 路径式导航栏。
创建有类型的事件队列
创建一个队列,以存储文件到达事件。
1.
单击 Maintenance 选项卡。
2.
在 Streams 下,单击Setup。
3.
单击 Messaging。
4.
单击 Create。
5.
选择 Normal Queue, Fixed Datatype,然后单击 Continue。
6.
输入 event_queue 作为名称,在 Queue Table 中单击 Create New。
7.
在 Name 域中输入 event_queue_table,在 Payload Type 下,选择 Object Type,并单击 Type 的搜索指示灯。
8.
输入 hr 作为 Schema,并单击 Go。
9.
选择 HR.MYTYPE,并单击 Select。
10.
单击 OK。
11.
单击 Finish 创建消息队列。
12.
这就创建了队列。单击 Database Instance 路径式导航栏。
创建带事件计划的作业
您首先将创建一个在文件到达系统时检测该事件的作业。当文件到达时,作业会将一条消息加入您在前一部分中创建的队列。然后将 Chainjob 修改为包含一个事件计划。最后,在工作目录中创建 file1,以模拟系统中的文件到达事件。
1.
单击 Administration 选项卡。
2.
单击 Jobs。
3.
单击 Create。
4.
在 Name 域中输入 file_detect,然后单击 Yes 启用。将以下脚本复制到 PL/SQL 区域中,然后单击 OK。
Declare
FileDescriptor utl_file.file_type;
my_msgid RAW(16);
props dbms_aq.message_properties_t;
enqopts dbms_aq.enqueue_options_t;
begin
LOOP
BEGIN
FileDescriptor := utl_file.fopen('FILE_ARRIVAL_DIRECTORY', 'file1', 'r');
EXIT;
EXCEPTION WHEN utl_file.INVALID_OPERATION THEN dbms_lock.sleep(1);
END;
END LOOP;
dbms_aq.enqueue(' event_queue', enqopts, props,
MYTYPE('file1'), my_msgid);
commit;
end;
5.
单击 Refresh,直到作业状态显示“RUNNING”。
6.
现在,将 Chainjob 的计划更改为事件计划。选择 Chainjob,并单击 Edit Job Definition。
7.
单击 Yes 启用,然后选择 Schedule 选项卡。
8.
对于 Schedule Type,选择 Event,然后单击 Change Queue。
9.
选择 HR.EVENT_QUEUE,并单击 Select。
10.
指定一个条件,检查队列中对象的 file_name 属性值是否为 'file1'。为此,在 Condition 域中输入 tab.user_data.file_name=''file1'',然后单击 Apply。
注意:单词 file1 两端各有两个单引号,而不是一个双引号字符。
11.
Chainjob 修改成功。单击 Scheduler Jobs 路径式导航栏。
12.
单击 Refresh。您现在可以看到,Chainjob 作业状态从 SUCCEEDED 更改为 SCHEDULED。
13.
直到将事件放到 HR.EVENT_QUEUE 中,该作业才会执行。要触发作业执行,请在 C:\wkdir 目录中创建一个名为 file1 的文件。
单击开始按钮,然后选择运行...,打开一个命令提示符窗口。在“运行”窗口中,在“打开”域中键入 cmd,然后单击确定。
14.
执行下列命令:
C:
cd wkdir
copy t1.txt file1
15.
关闭“运行”窗口,然后切换回企业管理器。单击 Running 选项卡。
16.
根据系统的速度,EM 将在该窗口中显示 file_detect 作业或 Chainjob。单击 Refresh 直到不再列出更多作业。
17.
作业完成。单击 History 选项卡。
18.
file_detect 和 Chainjob 作业已成功完成。单击 Database Instance 路径式导航栏。
基于时间的计划:创建基于时间的高级计划
在这一部分中,您将通过结合多个计划和使用日期过滤子句来创建复杂计划。
1.
恢复 SQL*Plus 窗口并运行以下脚本,以创建显示美国的每个主要节假日的计划。
connect hr/hr
@C:\wkdir\holiday_schedule.sql
该脚本将执行以下操作:
--Create US major holidays
begin
dbms_scheduler.create_schedule('Newyear', null,
'FREQ=DAILY;BYDATE=0101', null, 'New Year');
end;
/
begin
dbms_scheduler.create_schedule('MartinLutherKing', null,
'FREQ=MONTHLY;BYMONTH=JAN;BYDAY=3MON',
null, 'Martin Luther King Day');
end;
/
begin
dbms_scheduler.create_schedule('PresidentDay', null,
'FREQ=MONTHLY;BYMONTH=FEB;BYDAY=3MON',
null, 'President Day');
end;
/
begin
dbms_scheduler.create_schedule('MemorialDay', null,
'FREQ=MONTHLY;BYMONTH=MAY;BYDAY=-1MON',
null, 'Memorial Day');
end;
/
begin
dbms_scheduler.create_schedule('Independence', null,
'FREQ=DAILY;BYDATE=0704',
null, 'Independence Day');
end;
/
begin
dbms_scheduler.create_schedule('LaborDay', null,
'FREQ=MONTHLY;BYMONTH=SEP;BYDAY=1MON',
null, 'Labor Day');
end;
/
begin
dbms_scheduler.create_schedule('ColumbusDay', null,
'FREQ=MONTHLY;BYMONTH=OCT;BYDAY=2MON',
null, 'Columbus Day');
end;
/
begin
dbms_scheduler.create_schedule
('VeteransDay', null, 'FREQ=MONTHLY;BYMONTH=NOV;BYMONTHDAY=11',
null, 'Veterans Day');
end;
/
begin
dbms_scheduler.create_schedule
('Thanksgiving', null, 'FREQ=MONTHLY;BYMONTH=NOV;BYDAY=4THU',
null, 'ThanksGiving');
end;
/
begin
dbms_scheduler.create_schedule
('Xmas', null, 'FREQ=DAILY;BYDATE=1225', null, 'Christmas');
end;
/
2.
在该步骤中,您将创建以下计划:
Holidays: 将所有节假日计划合并到一个计划中
Weekends: 针对所有周末的计划
Weekdays: 仅包含工作日(从周一到周五)的计划
ClosedDays: 将周末与节假日合并在一起的计划
WorkDays: 针对所有工作日的计划(不包括节假日)
LastWorkDay:月份中的最后一个工作日(不包括节假日)
在 SQL*Plus 窗口中,运行以下脚本:
@C:\wkdir\composite_schedule.sql
该脚本将执行以下操作:
begin
dbms_scheduler.create_schedule('Holidays', null,
'Newyear,MartinLutherKing, PresidentDay,
MemorialDay, Independence, LaborDay, ColumbusDay,
VeteransDay, Thanksgiving, Xmas');
end;
/
-- Create Weekends schedule
begin
dbms_scheduler.create_schedule
('weekends',repeat_interval=> FREQ=DAILY;BYDAY=SAT,SUN');
end;
/
-- Create weekdays schedule
begin
dbms_scheduler.create_schedule ('weekdays',
repeat_interval=> 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI');
end;
/
-- Weekend and holiday schedule
begin
dbms_scheduler.create_schedule ('ClosedDays',
repeat_interval=> 'FREQ=DAILY;BYDAY=SAT,SUN;INCLUDE=holidays');
end;
/
-- Working Days
begin
dbms_scheduler.create_schedule
('WorkDays', null,'WEEKDAYS; exclude= HOLIDAYS');
end;
/
-- Last work day of the month
begin
dbms_scheduler.create_schedule
('LastWorkDay',null,'FREQ=MONTHLY;INCLUDE=WEEKDAYS;
EXCLUDE=HOLIDAYS; BYSETPOS=-1');
end;
/
3.
在该步骤中,您创建了一个定义财政季度(用户定义的频率)的计划。随后,您可以使用该计划为每个季度的最后一个工作日创建计划。
在 SQL*Plus 窗口中,运行以下脚本:
@C:\wkdir\user_defined_freq.sql
该脚本将执行以下操作:
-- Oracle's Fiscal year
begin
dbms_scheduler.create_schedule(schedule_name => 'FISCALYEAR',
start_date => to_timestamp_tz('01-JUN-2005 12:00:00','DD-MON-YYYYHH24:MI:SS'),
repeat_interval => 'freq=yearly;bydate=0301,0601,0901,1201;periods=4');
end;
/
-- Last workday in each quarter
begin
dbms_scheduler.create_schedule
('LastQtrWorkDay',null,'FREQ=FISCALYEAR;INCLUDE=WorkDays;bysetpos=-1');
end;
/
4.
现在,您可以使用企业管理器查看刚刚创建的计划。在 Administration 页面的 Database Scheduler 标题下,单击 Schedules。
5.
您将看到这些脚本创建的计划。从企业管理器中注销,然后可以关闭 SQL*Plus 窗口。
总结
在本教程中,您学习了如何:
创建使用程序的作业
创建、修改和计划程序链(相关性计划)
执行基于事件的作业(基于事件的计划)
创建基于时间的高级计划
将鼠标置于该图标上可以隐藏所有屏幕截图。