使用Oracle的Scheduller定期执行任务

本文介绍了如何使用Oracle的Scheduler替代Solaris的Cron执行数据库任务,即使Oracle账户密码过期或账户被锁定,任务仍能正常执行。通过创建、测试、调整Scheduler任务,并展示了相关SQL操作来管理这些任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

f公司施行新的IT安全制度后,系统使用的帐号也要90天换一次密码。

原先通过Solaris的Cron执行的Oracle上的任务,在密码到期未改时,就停止执行了。(是否更改Solaris配置可以避免?没去深究)

此外,Oracle的账户密码更改后,要修改保存密码的Script文件。麻烦不说,系统安全上也有瑕疵。

 

其实,如果是纯粹在Oracle内部执行的任务,可以通过Oracle的Scheduller来实现。(要和OS打交道的任务是否可以?还没试过。)

在Oracle 10.2.0.3版测试后,发现密码更改(password change),密码失效(password expire),甚至帐号死锁(account locked)的情况下还可以照常执行任务。

 

1.    Create a table for test.

CREATE TABLE "AT_TEST"

  (          "NO" NUMBER(2,0),

              "MESSAGE" VARCHAR2(30),

              "CREATE_DATE" DATE

  )

/

 

15:07……

2.    Create test job via scheduller

BEGIN

DBMS_SCHEDULER.CREATE_JOB(

  job_name         => 'test',

  job_type         => 'PLSQL_BLOCK',

  job_action       => 'insert into AT_TEST values(10,'Test',sysdate);',

  start_date       => SYSDATE,

  repeat_interval  => 'freq=weekly; byday=mon,tue,wed,thu,fri; byhour=15-18; byminute=0,5,10,15,20,25,30,35,40,45,50,55; bysecond=0;',

  enabled          => TRUE

  );

END;

/

 

15:15……

3.    Change password

alter user at identified by abcde;

 

insert into AT_TEST values(20,'password changed.',sysdate);

 

15:20……

4.     Password expired

SQL> alter user at password expire;(by DBA)

 

insert into AT_TEST values(30,'password expired.',sysdate);

 

15:27

5.     Lock user account

SQL> alter user at account lock;(by DBA)

 

insert into AT_TEST values(40,'ID locked.',sysdate);

 

15:37……

6.     Disable Job

BEGIN

dbms_scheduler.disable('test');

END;

/

 

15:42……

7.     Check log

select t.*, to_char(CREATE_DATE,'hh24:mi:ss')  TIME from AT_TEST t order by CREATE_DATE;

 

NO

MESSAGE

CREATE_DATE

TIME

10

Test

10/17/2012

15:10:00

10

Test

10/17/2012

15:15:00

20

password changed.

10/17/2012

15:15:46

10

Test

10/17/2012

15:20:00

30

password expired.

10/17/2012

15:21:45

10

Test

10/17/2012

15:25:00

40

ID locked.

10/17/2012

15:27:45

10

Test

10/17/2012

15:30:00

10

Test

10/17/2012

15:35:00

 

   附:

Schedule确认SQL

select job_name,job_type,job_action,
to_char(start_date,'yyyy-mm-dd hh24:mi:ss') start_date,
to_char(NEXT_RUN_DATE,'yyyy-mm-dd hh24:mi:ss') Next_run_date,
repeat_interval,enabled,state from user_scheduler_jobs;

JOB_NAMEJOB_TYPEJOB_ACTIONSTART_DATENEXT_RUN_DATEREPEAT_INTERVAL
TESTPLSQL_BLOCKinsert into AT_TEST values(10,'Test',sysdate);2012-10-17 15:05:252012-10-17 15:45:00freq=daily; byhour=9,10,11,12,13,14,15,16,17,18,21; byminute=0,10,15,20,25,30,35,40,45,50,55; bysecond=0;
ENABLEDSTATE
FALSEDISABLED

 

使任务无效
BEGIN
dbms_scheduler.disable('test');
END;
/

使任务生效 

BEGIN
dbms_scheduler.enable('test');
END;
/

修改任属性(修改repeat_interval属性)

BEGIN
dbms_scheduler.set_attribute('test','repeat_interval', 'freq=daily;  byhour=9,10,11,12,13,14,15,16,17,18,21; byminute=0,10,15,20,25,30,35,40,45,50,55; bysecond=0;');
END;
/

 

删除任务
BEGIN
DBMS_SCHEDULER.drop_JOB(
   job_name          =>  'test'
   );
END;
/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值