job chain job classs oracle,使用基于相关性、事件以及时间的计划

使用基于相关性、事件以及时间的计划

使用基于相关性、事件以及时间的计划

目的

本教程介绍了如何使用 Oracle Scheduler 执行基于以下条件的任务:

bullet.gif

其他任务的结果(相关性计划)

bullet.gif

事件,如文件到达(基于事件的计划)

bullet.gif

复杂计划(基于时间的计划)

所需时间

大约 1 个小时

主题

本教程包括下列主题:

查看屏幕截图

view_image.gif将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注意:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。您可以单击单个屏幕截图将其隐藏。

概述

Oracle 数据库包括一个功能丰富的作业调度程序。您可以制定作业计划,使其在指定日期和时间(例如,每个周日晚上 11:00)或在指定事件发生时(例如,当库存低于某个级别时)运行。您可以定义自定义日历(例如,一个财年),以便制定一个计划(例如,每个财政季度的最后一个工作日)。调度程序还包括程序链,这些程序链称为步骤集合,可以互相配合来完成某项任务。程序链中的步骤可以是一个程序、子程序链或事件,您可以指定规则来确定每一步的运行时间以及各步之间的相关性。

在本教程中,您将学习如何使用调度程序简化数据库管理员和应用程序

开发人员所需的复杂任务的计划。

前提条件

开始学习本教程之前,您应该先完成

以下步骤:

设置 HR 用户的权限

用户需要拥有特定的权限才能使用 Oracle Scheduler。在本教程中,用户还需要访问特定的程序包。在本部分中,您需要向 HR 用户授予所有必需的权限。执行以下步骤:

1.

打开一个浏览器,输入以下 URL:

http://:1158/em

输入 sys 作为用户名,指定口令 oracle,以 SYSDBA 的身份连接,然后单击 Login。

注意:如果您是第一次访问企业管理器,那么请向下滚动至页面底部,并单击 I agree。

2.

单击 Administration 选项卡。

3.

向下滚动至 Users and Privileges。

view_image.gif

4.

在 Users and Privileges 下,单击Users。

view_image.gif

5.

在 Object Name 文本框中输入 HR,并单击 Go。

view_image.gif

6.

单击 Edit。

view_image.gif

7.

单击 System Privileges。

view_image.gif

8.

单击 Edit List。

view_image.gif

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

view_image.gif

10.

单击 Object Privileges。

view_image.gif

11.

从 Select Object Type 下拉列表中选择 Package,并单击 Add。

view_image.gif

12.

单击搜索指示灯图标。

view_image.gif

13.

对于 Schema 项,从下拉列表中选择 SYS,并在 Search Package Name 中输入 dbms_aq。单击 Go。

view_image.gif

14.

选择 DBMS_AQ 和 DBMS_AQADM 复选框,然后单击 Select。

view_image.gif

15.

在 SYS.DBMS_AQADM 之后的 Select Package Objects 域中,输入“,SYS.DBMS_LOCK”,然后从 Available Privileges 中选择 EXECUTE,并利用 Move 链接将其移到 Selected Privileges 中。单击 OK。

view_image.gif

16.

单击 Apply。

view_image.gif

17.

单击 Logout。

view_image.gif

创建使用程序的作业

程序提供了一种抽象。操作在程序而不是作业本身中指定。随后,作业指向该程序。例如,如果 shell 脚本名称或位置更改,则不必更改每个作业,而只需更改一个程序。在本部分中,您将创建一个程序和两个分别指向此程序的作业,这需要完成以下任务:

启动 OracleJobSchedulerORCL 服务

执行以下步骤:

1.

打开窗口,查看 Windows 服务。如果您使用的是 Windows XP,请遵循以下路径:

开始 > 控制面板 > 管理工具 > 服务

2.

在服务列表中找到 OracleJobSchedulerORCL 服务。如果该服务已禁用,则右键单击该服务并选择属性。

view_image.gif

3.

该服务的可执行文件路径应该指向 Oracle 主目录,这可能与此处所示的目录不同。

将该服务的“启动类型”更改为手动。

view_image.gif

4.

单击应用。

view_image.gif

5.

单击启动以启动该服务。

view_image.gif

6.

启动服务后,单击确定。

view_image.gif

7.

关闭“服务”窗口和“管理工具”窗口。

view_image.gif

创建程序

在本步骤中,您将创建一个调用 test1.bat 脚本的程序。该脚本可将一个文件的内容复制到另一个文件中。

执行以下步骤:

1.

作为 hr 用户登录企业管理器。单击 Login。

view_image.gif

2.

输入 hr 作为用户名,输入 hr 作为口令,然后单击 Login。

view_image.gif

注意:如果您是第一次访问企业管理器,那么请向下滚动至页面底部,并单击 I agree。

3.

单击 Administration 选项卡。

view_image.gif

4.

在 Database Scheduler 下,选择 Programs。

view_image.gif

5.

单击 Create。

view_image.gif

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

view_image.gif

7.

输入以下参数信息,然后单击 Add Another Row。该参数指示 cmd.exe 程序在批量脚本完成后退出。

Name:arg1

Default:/q

view_image.gif

8.

输入以下参数信息,然后单击 Add Another Row。该参数将关闭 cmd.exe 程序的回应功能。

Name:arg2

Default:/c

view_image.gif

9.

输入以下参数信息,然后单击 OK。这是我们要执行的批量脚本。

Name:script_loc

Default:C:\wkdir\test1.bat

view_image.gif

10.

程序已经创建完毕。单击 Database Instance 路径式导航栏。

view_image.gif

创建使用程序的作业

现在,您将创建一个使用刚刚创建的程序的作业。执行以下步骤:

1.

在 Administration 页面的 Database Scheduler 下,选择 Jobs。

view_image.gif

2.

单击 Create。

view_image.gif

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

view_image.gif

4.

选择 Program Name 并单击搜索指示灯。

view_image.gif

5.

从列表中选择 HR.PROGEXE,并单击 Select。

view_image.gif

6.

单击 OK。

view_image.gif

7.

单击 OK 提交作业。

view_image.gif

8.

单击 Running 选项卡。

view_image.gif

9.

作业现在正在运行。您可能需要单击 Refresh 几次,直到作业不再出现在“Running Jobs”列表中。单击 History 选项卡。

view_image.gif

10.

作业已经成功运行。下一部分要求您以超级用户的身份登录。单击 Logout。

view_image.gif

授予程序访问权限

要让其他用户使用该程序,创建此程序的用户或超级用户需要共享它。执行以下步骤:

1.

单击 Login。

view_image.gif

2.

以 sys/oracle 和 SYSDBA 的身份登录,然后单击 Login。

view_image.gif

注意:用户 HR 可以向用户 OE 授予 progexe 程序的访问权限。应该以 SYS 的身份登录,因为您要向用户 OE 同时授予 CREATE EXTERNAL JOB、CREATE JOB 和 SELECT ANY DICTIONARY 权限,只有超级用户才能执行该任务。

3.

单击 Administration 选项卡。

view_image.gif

4.

向下滚动至 Users and Privileges。

view_image.gif

5.

单击 Users。

view_image.gif

6.

输入 OE 并单击 Go。

view_image.gif

7.

选择 OE 并单击 Edit。

view_image.gif

8.

单击 System Privileges 选项卡。

view_image.gif

9.

您需要向该用户授予其他权限。单击 Edit List。

view_image.gif

10.

按住 Ctrl 键的同时,从 Available System Privileges 列表中选择 CREATE EXTERNAL JOB、CREATE JOB 和 SELECT ANY DICTIONARY。释放 Ctrl 键并单击 Move,然后单击 OK。

view_image.gif

11.

现在,您需要将 progexe 的 EXECUTE 权限授予 OE 用户。单击 Object Privileges。

view_image.gif

12.

从 Select Object Type 下拉列表中选择 Programs,然后单击 Add。

view_image.gif

13.

选择 Select Package Objects 框旁边的 Search指示灯。

view_image.gif

14.

从 Schema 下拉列表中选择 HR,然后单击 Go。

view_image.gif

15.

选择 PROGEXE 并单击 Select。

view_image.gif

16.

从 Available Privileges 列表中选择 EXECUTE 并单击 Move,然后单击 OK。

view_image.gif

17.

从 Select Object Type 下拉列表中选择 Package,并单击 Add。

view_image.gif

18.

在 Select Package Objects 框中输入 SYS.DBMS_LOCK,并从权限列表中选择 Execute,然后单击 Move。然后单击 OK。

view_image.gif

19.

单击 Apply。

view_image.gif

20.

用户 OE 已经更新。您现在需要以 OE 的身份登录。单击 Logout。

view_image.gif

创建使用该程序但驻留在另一个模式中的作业

现在 OE 能够访问程序了,您可以创建和运行一个使用它的作业。执行以下步骤:

1.

单击 Login。

view_image.gif

2.

以 oe/oe 身份登录,并单击 Login。

view_image.gif

注意:如果您首次以该用户的身份访问企业管理器,那么请向下滚动至页面底部,并单击I agree。

3.

单击 Administration 选项卡。

view_image.gif

4.

在 Database Scheduler 下,单击 Jobs。

view_image.gif

5.

单击 Create。

view_image.gif

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

view_image.gif

7.

选择 Program Name 并单击搜索指示灯。

view_image.gif

8.

从列表中选择 HR.PROGEXE,并单击 Select。

view_image.gif

9.

单击 OK。

view_image.gif

10.

单击 OK。

view_image.gif

11.

您的作业已经提交且正在运行。单击 History 选项卡。

view_image.gif

12.

作业已经成功完成。单击 Logout。

view_image.gif

相关性计划:创建简单的程序链

一个程序链是一组为了一个综合目标而链接在一起的程序。程序链的例子可能是“运行程序 A,然后运行程序 B,只有在程序 A 和 B 都成功完成时才运行程序 C,否则运行程序 D。”

相互依赖的程序链中的每一个位置称为一个步骤。一般而言,在启动程序链的初始几个步骤后,后续步骤的执行取决于之前一个或多个步骤的完成情况。每个步骤都可以指向以下 Scheduler 对象之一:

bullet.gif

程序

bullet.gif

另一个程序链(嵌套程序链)

bullet.gif

事件

在这一部分中,您将创建一个简单的程序链,在该程序链中,将根据前一个任务的结果来启动作业。执行以下步骤:

1.

作为 hr 用户登录企业管理器。单击 Login。

view_image.gif

2.

输入 hr 作为用户名,输入 hr 作为口令,然后单击 Login。

view_image.gif

3.

单击 Administration 选项卡。

view_image.gif

4.

在 Database Scheduler 下,选择 Chains。

view_image.gif

5.

单击 Create。

view_image.gif

6.

为 Job Chain 输入以下信息以后:

Name:Simplechain

Schema:HR

Enabled:Yes

Description:A simple chain

在 Steps 下面,在第一行中输入 Step1 作为步骤名称。保留 Type 为 Program,然后单击 Object Name 域旁边的搜索指示灯。

view_image.gif

7.

选择程序 HR.PROGEXE,并单击 Select。

view_image.gif

8.

在 Steps 部分的第二行中,输入以下信息。然后在 Rules 部分中单击 Create。

Step Name:Step2

Object Name:HR.PROGEXE

view_image.gif

9.

创建启动程序链的规则。输入以下信息,然后单击 Continue。

Condition:true

Action:start step1

view_image.gif

10.

向下滚动,并在 Rules 部分中再次单击 Create。

view_image.gif

11.

为了在运行时查看程序链,可以将第二步延迟启动两分半钟。输入以下信息,然后单击 Continue。

Condition:step1 succeeded

Action:after 00:02:30 start step2

view_image.gif

12.

现在创建一条规则,以定义终止程序链的条件。向下滚动至 Rules 部分,并单击 Create。

view_image.gif

13.

输入以下信息,然后单击 Continue。

Condition:step2 completed

Action:end

view_image.gif

14.

向下滚动,查看这个简单的程序链中的步骤和规则。然后单击 OK。

view_image.gif

15.

已经创建了简单的程序链。

view_image.gif

计划简单的程序链

您现在已经做好准备,可以创建一个指向该程序链的作业来计划程序链了。执行以下步骤:

1.

单击 Create Job Using Chain。

view_image.gif

2.

输入以下信息,并单击 OK。

Name:ChainjobDescription:Job using a Simple Chain

view_image.gif

3.

Chainjob 已经成功创建。单击 Running 选项卡,查看作业的状态。

view_image.gif

4.

单击 Status 图标,查看运行步骤的状态。

view_image.gif

5.

您将看到程序链中每一个步骤的状态。单击 Scheduler Jobs 路径式导航栏。

view_image.gif

6.

单击 All 选项卡。

view_image.gif

7.

单击 Refresh,直到该作业成功完成。

view_image.gif

8.

在页面底部的 Related Links 下,单击 Chains。

view_image.gif

相关性计划:创建复杂的程序链

在这一部分中,您将创建一个较复杂的程序链,它包含多个步骤以及更复杂的相关性。下图显示了这个复杂的程序链:

执行以下步骤:

1.

创建该程序链要使用的两个程序。通过单击开始,选择所有程序,选择 Oracle Home 安装、Application Development 程序组,然后选择 SQL*Plus,来开启 Windows 的 SQL*Plus。

在 User Name 域和 Password 域中输入 hr,然后单击 OK。

view_image.gif

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;

/

view_image.gif

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;

view_image.gif

4.

最小化 SQL*Plus 窗口,但不要关闭它。切换至企业管理器窗口。在 Scheduler Chains 屏幕中,单击 Create。

view_image.gif

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

view_image.gif

6.

在第六行中,输入以下信息。

Step Name:Step6

Type:Program

Object Name:HR.PROG1

然后向下滚动至 Rules 部分,并单击 Create。

view_image.gif

7.

创建启动程序链的规则。输入以下信息,然后单击 Continue。

Condition:true

Action:start step1

view_image.gif

8.

在 Rules 部分中,再次单击 Create。

view_image.gif

9.

输入以下信息,然后单击 Continue。

Condition:step1 succeeded

Action:start step2, step3

view_image.gif

10.

在 Rules 部分中,再次单击 Create。

view_image.gif

11.

输入以下信息,然后单击 Continue。

Condition:step3 error_code=20100

Action:start step5

view_image.gif

12.

在 Rules 部分中,再次单击 Create。

view_image.gif

13.

输入以下信息,然后单击 Continue。

Condition:step2 succeeded

Action:after 00:00:30 start step4

view_image.gif

14.

在 Rules 部分中,再次单击 Create。

view_image.gif

15.

输入以下信息,然后单击 Continue。

Condition:step4 completed

Action:start step6

view_image.gif

16.

在 Rules 部分中,再次单击 Create。

view_image.gif

17.

输入以下信息,然后单击 Continue。

Condition:(step5 completed and step6 completed) or step1 failed

Action:end

view_image.gif

18.

您现在已经为该复杂程序链创建了步骤和规则。单击 OK。

view_image.gif

19.

该复杂程序链创建成功。

view_image.gif

修改和计划复杂的程序链

在这一部分中,您要修改在前一部分中创建的程序链,并添加另一个步骤,然后计划该程序链。下图显示了该程序链经修改后的情况。

要修改程序链,执行以下步骤:

1.

选择 Complexchain,并单击 Edit。

view_image.gif

2.

输入以下信息来添加另一个步骤,然后向下滚动至 Rules 部分。

Step Name:Step7

Type:SUBCHAIN

Object Name:hr.simplechain

view_image.gif

3.

单击 Create。

view_image.gif

4.

输入以下信息,然后单击 Continue。

Condition:step2 succeededAction:start step7

view_image.gif

5.

现在需要修改具有“step4 completed”条件的规则。向下滚动至 Rules 部分,选择该规则,然后单击 Edit。

view_image.gif

6.

将条件更改为 step4 completed and step7 completed。单击 Continue。

view_image.gif

7.

向下滚动以确认新的规则条件,然后单击 Apply。

view_image.gif

8.

该复杂程序链修改成功。现在可以计划该程序链。单击 Scheduler Chains 路径式导航栏。

view_image.gif

9.

选择 COMPLEXCHAIN,并单击 Create Job Using Chain。

view_image.gif

10.

输入 complexchainjob 作为名称,并在 Description 域中输入 Job using a complex chain。然后单击 OK。

view_image.gif

11.

complexchainjob 作业已经成功创建。单击 Running 选项卡,查看作业的状态。

view_image.gif

12.

单击 Status 图标,查看运行步骤的状态。

view_image.gif

13.

在不同时间刷新页面,您可能会看到步骤的状态改变。在浏览器中单击 Reload,刷新列表。当所有步骤都已执行时,单击 Scheduler Jobs 路径式导航栏。

view_image.gif

14.

单击 All 选项卡。

view_image.gif

15.

单击 Refresh。

view_image.gif

16.

complexchainjob 作业成功运行。单击 Database Instance 路径式导航栏。

view_image.gif

基于事件的计划:创建带有基于事件的计划的作业

基于事件的计划将根据实时事件来触发作业。事件被定义为任何状态变更或在系统中发生的情况(例如文件到达)。

在这一部分中,您将修改之前创建的 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;

view_image.gif

创建对象类型

创建一个对象类型,用于标识到达的文件。

1.

切换回企业管理器。在 Administration 选项卡中,向下滚动至 User Defined Types 部分,然后选择 Object Types。

view_image.gif

2.

单击 Create。

view_image.gif

3.

输入 mytype 作为名称,并在 Attributes 下单击 Add。

view_image.gif

4.

输入 file_name 作为 Name,选择 VARCHAR2 作为 Type,并输入 80 作为 Length。然后单击 OK。

view_image.gif

5.

单击 OK,创建对象类型。

view_image.gif

6.

创建您的对象类型。单击 Database Instance 路径式导航栏。

view_image.gif

创建有类型的事件队列

创建一个队列,以存储文件到达事件。

1.

单击 Maintenance 选项卡。

view_image.gif

2.

在 Streams 下,单击Setup。

view_image.gif

3.

单击 Messaging。

view_image.gif

4.

单击 Create。

view_image.gif

5.

选择 Normal Queue, Fixed Datatype,然后单击 Continue。

view_image.gif

6.

输入 event_queue 作为名称,在 Queue Table 中单击 Create New。

view_image.gif

7.

在 Name 域中输入 event_queue_table,在 Payload Type 下,选择 Object Type,并单击 Type 的搜索指示灯。

view_image.gif

8.

输入 hr 作为 Schema,并单击 Go。

view_image.gif

9.

选择 HR.MYTYPE,并单击 Select。

view_image.gif

10.

单击 OK。

view_image.gif

11.

单击 Finish 创建消息队列。

view_image.gif

12.

这就创建了队列。单击 Database Instance 路径式导航栏。

view_image.gif

创建带事件计划的作业

您首先将创建一个在文件到达系统时检测该事件的作业。当文件到达时,作业会将一条消息加入您在前一部分中创建的队列。然后将 Chainjob 修改为包含一个事件计划。最后,在工作目录中创建 file1,以模拟系统中的文件到达事件。

1.

单击 Administration 选项卡。

view_image.gif

2.

单击 Jobs。

view_image.gif

3.

单击 Create。

view_image.gif

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;

view_image.gif

5.

单击 Refresh,直到作业状态显示“RUNNING”。

view_image.gif

6.

现在,将 Chainjob 的计划更改为事件计划。选择 Chainjob,并单击 Edit Job Definition。

view_image.gif

7.

单击 Yes 启用,然后选择 Schedule 选项卡。

view_image.gif

8.

对于 Schedule Type,选择 Event,然后单击 Change Queue。

view_image.gif

9.

选择 HR.EVENT_QUEUE,并单击 Select。

view_image.gif

10.

指定一个条件,检查队列中对象的 file_name 属性值是否为 'file1'。为此,在 Condition 域中输入 tab.user_data.file_name=''file1'',然后单击 Apply。

注意:单词 file1 两端各有两个单引号,而不是一个双引号字符。

view_image.gif

11.

Chainjob 修改成功。单击 Scheduler Jobs 路径式导航栏。

view_image.gif

12.

单击 Refresh。您现在可以看到,Chainjob 作业状态从 SUCCEEDED 更改为 SCHEDULED。

view_image.gif

13.

直到将事件放到 HR.EVENT_QUEUE 中,该作业才会执行。要触发作业执行,请在 C:\wkdir 目录中创建一个名为 file1 的文件。

单击开始按钮,然后选择运行...,打开一个命令提示符窗口。在“运行”窗口中,在“打开”域中键入 cmd,然后单击确定。

view_image.gif

14.

执行下列命令:

C:

cd wkdir

copy t1.txt file1

view_image.gif

15.

关闭“运行”窗口,然后切换回企业管理器。单击 Running 选项卡。

view_image.gif

16.

根据系统的速度,EM 将在该窗口中显示 file_detect 作业或 Chainjob。单击 Refresh 直到不再列出更多作业。

view_image.gif

17.

作业完成。单击 History 选项卡。

view_image.gif

18.

file_detect 和 Chainjob 作业已成功完成。单击 Database Instance 路径式导航栏。

view_image.gif

基于时间的计划:创建基于时间的高级计划

在这一部分中,您将通过结合多个计划和使用日期过滤子句来创建复杂计划。

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;

/

view_image.gif

2.

在该步骤中,您将创建以下计划:

bullet.gif

Holidays:          将所有节假日计划合并到一个计划中

bullet.gif

Weekends:      针对所有周末的计划

bullet.gif

Weekdays:      仅包含工作日(从周一到周五)的计划

bullet.gif

ClosedDays:    将周末与节假日合并在一起的计划

bullet.gif

WorkDays:      针对所有工作日的计划(不包括节假日)

bullet.gif

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;

/

view_image.gif

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;

/

view_image.gif

4.

现在,您可以使用企业管理器查看刚刚创建的计划。在 Administration 页面的 Database Scheduler 标题下,单击 Schedules。

view_image.gif

5.

您将看到这些脚本创建的计划。从企业管理器中注销,然后可以关闭 SQL*Plus 窗口。

view_image.gif

总结

在本教程中,您学习了如何:

bullet.gif

创建使用程序的作业

bullet.gif

创建、修改和计划程序链(相关性计划)

bullet.gif

执行基于事件的作业(基于事件的计划)

bullet.gif

创建基于时间的高级计划

view_image.gif 将鼠标置于该图标上可以隐藏所有屏幕截图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值