分享
 
 
 

使用dbms_job包来实现数据库后台进程

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

1建立实现任务的过程

在schema manager或SQL PLUS里建立如下过程

CREATE OR REPLACE PROCEDURE "CUSTOMER"."T_JOBTEST" as

begin

update emp set active =0

where active =1

and date_published

end ;

2 向任务队列中加入任务

在SQL PLUS中执行下列script

VARIABLE jobno number;

begin

DBMS_JOB.SUBMIT(:jobno, 't_jobtest();', SYSDATE, 'SYSDATE + 1');

commit;

end;

该任务立即执行(SYSDATE),并且每隔一天执行一次('SYSDATE + 1')。

3 查询此任务是否加入任务队列

在SQL PLUS中执行下列script

SELECT job, next_date, next_sec, failures, broken

FROM user_jobs;

------------------

DBMS_JOB 包介绍

调度任务队列里的任务要使用DBMS_JOB包中的过程。使用任务队列不需要非凡的数据库特权。任何可以使用这些过程的用户都可以使用任务队列。

Table 8-2 DBMS_JOB包中的过程

Procedure Description Described

SUBMIT

Submits a job to the job queue. 向任务队列提交一个任务

REMOVE

Removes a specified job from the job queue. 从任务队列中删除指定的任务

CHANGE

Alters a specified job. You can alter the job description, the time at which the job will be run, or the interval between executions of the job. 改变任务

WHAT

Alters the job description for a specified job. 改变指定任务的任务内容

NEXT_DATE

Alters the next execution time for a specified job. 改变指定任务的下一次执行时间

INTERVAL

Alters the interval between executions for a specified job. 改变指定任务的执行时间间隔。

BROKEN

Disables job execution. If a job is marked as broken, Oracle does not attempt to execute it. 禁止指定任务的执行

RUN

Forces a specified job to run. 强制执行指定的任务

Submitting a Job to the Job Queue 向任务队列提交一个任务

To submit a new job to the job queue, use the SUBMIT procedure in the DBMS_JOB package:

DBMS_JOB.SUBMIT( job OUT BINARY_INTEGER,

what IN VARCHAR2,

next_date IN DATE DEFAULT SYSDATE,

interval IN VARCHAR2 DEFAULT 'null',

no_parse IN BOOLEAN DEFAULT FALSE)

The SUBMIT procedure returns the number of the job you submitted. describes the procedure's parameters.

Table 8-3 DBMS_JOB.SUBMIT 的参数

Parameter Description

job

This is the identifier assigned to the job you created. You must use the job number whenever you want to alter or remove the job. For more information about job numbers, see "Job Numbers".

what

This is the PL/SQL code you want to have executed. 这里是你想执行的PL/SQL代码

For more information about defining a job, see "Job Definitions".

next_date

This is the next date when the job will be run. The default value is SYSDATE.

interval

This is the date function that calculates the next time to execute the job. The default value is NULL. INTERVAL must evaluate to a future point in time or NULL.

For more information on how to specify an execution interval, see "Job Execution Interval".

no_parse

This is a flag. The default value is FALSE.

If NO_PARSE is set to FALSE (the default), Oracle parses the procedure associated with the job. If NO_PARSE is set to TRUE, Oracle parses the procedure associated with the job the first time that the job is executed. If, for example, you want to submit a job before you have created the tables associated with the job, set NO_PARSE to TRUE.

As an example, let's submit a new job to the job queue. The job calls the procedure DBMS_DDL.ANALYZE_OBJECT to generate optimizer statistics for the table DQUON.ACCOUNTS. The statistics are based on a sample of half the rows of the ACCOUNTS table. The job is run every 24 hours:

VARIABLE jobno number;

begin

2 DBMS_JOB.SUBMIT(:jobno,

3 'dbms_ddl.analyze_object(''TABLE'',

4 ''DQUON'', ''ACCOUNTS'',

5 ''ESTIMATE'', NULL, 50);'

6 SYSDATE, 'SYSDATE + 1');

7 commit;

8 end;

9 /

Statement processed.

print jobno

JOBNO

----------

14144

Job Definition 任务定义任务定义就是SUBMIT过程中WHAT参数中指定的PL/SQL代码。

通常任务定义(内容)是一个过程的一个调用。这个过程能有任意数量的参数。

Note: In the job definition, use two single quotation marks around strings. Always include a semicolon at the end of the job definition. 在任务定义中,用2个单引号包围字符串。任务定义的末尾总是带一个分号。

Jobs and Import/EXPort Jobs can be exported and imported.

Thus, if you define a job in one database, you can transfer it to another

database. When exporting and importing jobs, the job's number, environment,

and definition remain unchanged.

任务是可以被卸出(exported )卸入(imported)的。

Job Execution Interval 任务的执行间隔The INTERVAL date function is evaluated immediately before a job is executed. If the job completes sUCcessfully, the date calculated from INTERVAL becomes the new NEXT_DATE. If the INTERVAL date function evaluates to NULL and the job completes successfully, the job is

deleted from the queue. If a job should be executed periodically at a set interval, use a date expression similar to 'SYSDATE + 7' in the INTERVAL

parameter. For example, if you set the execution interval to 'SYSDATE + 7' on Monday, but for some reason (such as a network failure) the job is not

executed until Thursday, 'SYSDATE + 7' then executes every Thursday, not Monday.

If you always want to automatically execute a job at a specific time, regardless of the last execution (for example, every Monday), the INTERVAL and NEXT_DATE parameters should specify a date expression similar to 'NEXT_DAY(TRUNC(SYSDATE), "MONDAY")'.

Table 8-5 lists some common date expressions used for job execution intervals.

Table 8-5 Common Job Execution Intervals Date Expression Evaluation 'SYSDATE + 7'

exactly seven days from the last execution 最后一次执行的7天之后执行 'SYSDATE + 1/48'

every half hour 每半个小时执行一次 'NEXT_DAY(TRUNC(SYSDATE),

''MONDAY'') + 15/24'

every Monday at 3PM 每个礼拜一的下午3点执行 'NEXT_DAY(ADD_MONTHS(TRUNC(SYSDATE, ''Q''), 3),

''THURSDAY'')'

first Thursday of each quarter 每个季度的第一个星期四 --------------------------------------------------------------------------------Note: When specifying NEXT_DATE or INTERVAL, remember that date literals and strings must be enclosed in single quotation marks. Also, the value of INTERVAL must be enclosed in single quotation marks. --------------------------------------------------------------------------------

Removing a Job from the Job Queue 删除任务队列中的任务

To remove a job from the job queue, use the REMOVE procedure in the DBMS_JOB package:

DBMS_JOB.REMOVE(job IN BINARY_INTEGER)

The following statement removes job number 14144 from the job queue:

DBMS_JOB.REMOVE(14144);

Syntax for WHAT

You can alter the definition of a job by calling the DBMS_JOB.WHAT procedure. Table 8-3 describes the procedure's parameters.

DBMS_JOB.WHAT( job IN BINARY_INTEGER,

what IN VARCHAR2)

--------------------------------------------------------------------------------

Note:

When you execute procedure WHAT, Oracle records your current environment. This becomes

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有