ORACLE定时器和Job:数据库界的“闹钟”与“打工仔”

本文详细介绍了Oracle数据库中的定时器(如DBMS_SCHEDULER)和Job(如DBMS_JOB)的创建、应用场景、优缺点以及权限管理。作者以生活中的闹钟和打工仔为例,阐述了如何设置定时任务和Job,以及如何确保权限正确和任务有效执行。
摘要由CSDN通过智能技术生成

目录

一、定时器:数据库界的“闹钟”

情景联想:

1. 语法创建:

2. 应用场景:

3. 优缺点:

4. 注意事项:

二、Job:数据库界的“打工仔”

情景联想:

1. 语法创建(使用DBMS_JOB):

2. 应用场景:

3. 优缺点:

4. 注意事项:

三、Oracle 创建过的定时任务或Job的删改查 "图书馆"。

情景联想:

查找定时任务(Job版)

修改定时任务(Job版)

删除定时任务(Job版)

注意:权限

查看用户的角色和权限:

     检查特定的创建权限:

查看crontab的权限设置:

尝试创建定时任务或Job:

咨询数据库管理员:

总结:


一、定时器:数据库界的“闹钟”

情景联想:

闹钟:
你:“闹钟,每天早上7点叫我起床!”
闹钟:“好的,7点准时响铃!”

ORACLE定时器:
你:“DBMS_SCHEDULER,每天凌晨1点叫我执行备份任务!”
DBMS_SCHEDULER:“收到,1点准时执行你的备份任务!”

1. 语法创建:


使用DBMS_SCHEDULER包中的CREATE_SCHEDULE过程,你可以像设置闹钟一样精确地设置定时器的执行时间。



BEGIN  
  DBMS_SCHEDULER.CREATE_SCHEDULE (  
    schedule_name   => 'my_daily_schedule',  
    start_date      => SYSTIMESTAMP,  
    repeat_interval => 'FREQ=DAILY; INTERVAL=1',  
    end_date        => NULL,  
    comments        => 'Daily backup schedule'  
  );  

END;

含义:

    你给定时器起了一个名字my_daily_schedule。
    start_date告诉定时器从当前时间开始。
    repeat_interval设置为每天执行一次。
    end_date为NULL,意味着这个定时器将无限期地执行下去。



2. 应用场景:

  1.     每天定时备份数据库
  2.     每周定时清理旧数据
  3.     每月定时生成报告

示例:

    每天凌晨备份数据库



BEGIN  
  DBMS_SCHEDULER.CREATE_SCHEDULE (  
    schedule_name   => 'daily_backup_schedule',  
    start_date      => SYSTIMESTAMP,  
    repeat_interval => 'FREQ=DAILY; INTERVAL=1',  
    end_date        => NULL,  
    comments        => 'Schedule for daily backup'  
  );  
    
  DBMS_SCHEDULER.CREATE_JOB (  
    job_name        => 'daily_backup_job',  
    job_type        => 'PLSQL_BLOCK',  
    job_action      => 'BEGIN your_backup_procedure; END;',  
    schedule_name   => 'daily_backup_schedule',  
    enabled         => TRUE  
  );  

END;

3. 优缺点:

  •     优点:精准、可靠,确保任务按时执行。
  •     缺点:如果设置不当,可能会导致资源冲突或浪费。

4. 注意事项:

  1.     确保定时器的执行时间不会与系统的其他重要任务冲突。
  2.     定期检查定时器的执行日志,确保它正常工作。

二、Job:数据库界的“打工仔”

情景联想:

打工仔:
你:“打工仔,下午3点帮我买杯咖啡!”
打工仔:“好的,3点准时送到!”

ORACLE Job:
你:“DBMS_JOB,每天下午5点帮我发送报表邮件!”
DBMS_JOB:“明白,5点准时发送报表邮件!”

1. 语法创建(使用DBMS_JOB):


使用DBMS_JOB包中的SUBMIT过程,你可以像雇佣打工仔一样提交一个Job。



VARIABLE jobno NUMBER;  
BEGIN  
  DBMS_JOB.SUBMIT(  
    job       => :jobno,  
    what      => 'BEGIN your_email_procedure; END;',  
    next_date => SYSDATE + 7/24 + 5/24,  -- 假设当前是周一,则设置为下周一下午5点  
    interval  => 'TRUNC(SYSDATE) + 7 + 5/24' -- 每周一执行一次  
  );  
  COMMIT;  

END;

含义:

  1.     job自动为Job生成一个编号。
  2.     what是你想要Job执行的PL/SQL代码块,这里是调用一个发送邮件的存储过程。
  3.     next_date是Job第一次执行的日期和时间。
  4.     interval定义了Job的执行频率,这里是每周一执行一次。

注意: 在较新版本的ORACLE中,推荐使用DBMS_SCHEDULER来创建和管理Job,因为它提供了更多的功能和灵活性。

2. 应用场景:

  1.     定期发送邮件通知
  2.     定时更新数据表
  3.     定时执行数据清理任务

示例:

    每周发送周报邮件



VARIABLE jobno NUMBER;  
BEGIN  
  DBMS_JOB.SUBMIT(  
    job       => :jobno,  
    what      => 'BEGIN your_email_procedure; END;',  
    next_date => NEXT_DAY(SYSDATE, 'MONDAY') + 5/24,  
    interval  => 'TRUNC(SYSDATE) + 7 + 5/24'  
  );  
  COMMIT;  

END;

3. 优缺点:

  •     优点:自动化程度高,减少人工操作。
  •     缺点:如果Job执行时间过长或频繁,可能会影响系统性能。

4. 注意事项:

  •     确保Job的执行内容正确无误,避免引发错误或异常。
  •     定期检查Job的执行状态,确保它正常工作。

三、Oracle 创建过的定时任务或Job的删改查 "图书馆"。

情景联想:

查找定时任务(Job版)

想象一下,你在一个巨大的图书馆里找书,但书架上都是定时任务的书!你要怎么找到你的那本呢?
 


-- 打开“定时任务图书馆”的大门  
SELECT * FROM DBA_JOBS;  

-- 哇!好多书啊,你的那本在哪里呢?慢慢找吧...


修改定时任务(Job版)

现在,假设你找到了那本定时任务的书,但发现里面的内容有误,你想要修改它。



-- 拿出你的“神笔马良”笔  
BEGIN  
  DBMS_JOB.CHANGE(...); -- 在这里填写你要修改的内容  
END;  
/  

-- 唰唰唰,内容改好了!你的书现在是最新版本啦!


删除定时任务(Job版)

最后,如果你发现这本书其实没什么用了,想要把它从图书馆里拿走。



-- 准备好你的“魔法手套”  
BEGIN  
  DBMS_JOB.REMOVE(...); -- 在这里填写你要删除的Job的编号  
END;  
/  

-- 嗖!书不见了,你的图书馆又整洁了一些!

四、角色权限

请注意,执行上述操作可能需要相应的权限。

1.  查看用户的角色和权限


首先呢,你可以查看当前用户所拥有的角色和权限。在SQL*Plus或其他数据库查询工具中执行以下命令:

SELECT * FROM USER_ROLE_PRIVS; -- 查看用户角色
SELECT * FROM USER_SYS_PRIVS; -- 查看系统权限
SELECT * FROM USER_TAB_PRIVS; -- 查看表级权限

通过检查这些视图,你可以了解用户是否有执行相关操作的权限。

2. 检查特定的创建权限

对于定时任务或Job,你可能需要特定的权限来创建它们。例如,对于DBMS_SCHEDULER,你可能需要CREATE JOBMANAGE SCHEDULER权限。你可以查询USER_SYS_PRIVS来确认是否拥有这些权限。

3. 查看crontab的权限设置

如果你是在Linux系统上使用crontab来创建定时任务,那么权限设置通常与/etc/cron.allow/etc/cron.deny这两个文件有关。你可以检查这两个文件的存在和内容来确定哪些用户可以使用crontab命令。

  • 如果两个文件都不存在,则通常只有root用户才能使用crontab命令。
  • 如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令。
  • 如果cron.allow不存在但cron.deny存在,则只有列在cron.deny文件里的用户不能使用crontab命令,其他用户都能使用。

4. 尝试创建定时任务或Job

最直接的方法是尝试创建一个定时任务或Job。如果操作成功,那么说明你有相应的权限。如果操作失败并返回权限不足的错误,那么你需要向数据库管理员请求相应的权限。

5. 咨询数据库管理员

如果你不确定是否有创建定时任务或Job的权限,或者你不确定如何检查这些权限,最好咨询你的数据库管理员。他们可以查看数据库的安全设置,并告诉你是否有必要的权限来执行这些操作。

6.注意需求:

请注意,权限管理在数据库系统中是非常重要的,确保只有授权的用户才能执行特定的操作是维护数据库安全性的关键。因此,在请求或授予权限时,应该谨慎行事,并遵循组织的最佳实践和安全策略。

总结:

定时器和Job是ORACLE数据库中的两个得力助手。定时器像闹钟一样准时,确保任务按时执行;Job则像打工仔一样勤劳,帮你完成各种琐碎工作。但记得,它们也需要你的悉心照料和定期检查,才能发挥出最佳的效果哦!

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值