scheduler概念

来源:互联网 发布:播音腔怎么练 知乎 编辑:程序博客网 时间:2024/06/07 15:39
scheduler可以在数据库环境中执行各种不同的任务,提高了任务的管理。scheduler的一些应用场景如下:
1监控和循环执行数据库维护任务,像备份,夜晚时数据仓库的加载和抽取
2开发人员可以创建programs和program库,终端用户可以用它们来创建和监控他们自己的任务。
scheduler能做什么
1定时执行任务或是按事件执行
2管理和维护任务
3在集群环境中执行和管理任务
基本的scheduler概念
programs
schedules
jobs
events
chians


programs
program对象时scheduler要运行什么的一些元数据集合,包含progrma对象的名字,program 动作,program类型和program需要的参数。
job是在特定时间或事件上运行,调用特定的program。jobs可以用已存在的program对象来创建,也就是不同的job可以使用相同的program,运行在不同的时间和设置上。因为program可以调用存储过程或别的需要参数的可执行程序,一个means被提供用来存放这些参数的默认值。
schedules
一个schedule是指什么时候,一个job运行多少次。类似programs,schedules对象也有名字,并被保存到数据库中,用户可以共享命名的schedules,
jobs
job是用户定义的任务来运行一次多多次。是要运行什么与什么时候运行的结合。
job arguments
可以指定job参数来定制一个program对象,job参数覆盖program对象中的默认参数。一个job运行的例子是晚间的报告,如果不同的部门要求不同的报告,你可以创建一个program来在不同的部门间共享,program action运行报告的脚本,program会有一个参数,部门号,每个用户可以创建job来指定到这个program,然后可以指定部门号作为job的参数。
job instance
job实例是具体运行的job,当一个job被创建,只有一个实体被添加到scheduler's的job表中,每次job运行,一个实体被添加到job日志中。
events
在scheduler中有2中事件
1scheduler导致的时间
scheduler可以抛出一个事件来显示scheduler本身状态的改变。比如当一个job开始,结束,运行时间超时都会抛出一个事件。
2应用程序抛出的事件
应用程序可以抛出事件,scheduler可以通过启用job来处理。当一个job被分配到这样的scheduler上,job在事件出现时运行。
chains
chian是连到一起的program来作为一个对象。An example of a chain might be "run program A and then program B, but only run program C if programs A and B complete successfully, otherwise run program D." 一个job可以指向chain而不是指向单独的program。
program,jobs和scheduler怎么关联起来
为了定义什么在执行,什么时候执行,需要指定他的关系

考虑这样的情况表要收集统计信息,这个例子中p1是program来使用dbms_stats分析表,program有一个输入参数来指定表明,两个job,j1与j2,都指向相同的program,但是每个提供不同的表名,schedule s1可以指定到2点来运行,结果就是2个表在2点同时被收集统计信息。


scheduler结构
job table
job table是所有job的容器,一个数据库一个表。job表存储所有job的信息,可以查看*_scheduler_jobs视图来看这些信息。job是数据库对象,长期积累下来可能会占用很多的空间,为了避免这个,job对象在执行完后自动的被删除掉,这个行为通过auto_drop属性来控制。
the job coordinator
这个东西是后台进程,在job运行的时候自动启动,job coordinator的任务:
1控制和spawns job slaves
2查看job table
3在job table中选job放置到内存中
4在内存中取到job,然后解析让job slaves来执行
5当job slaves不在需要的时候清空job slave池
6当没有job需要被调度的时候就休眠
7当新job要执行或是用create_job创建job时醒来
8当数据库shutdown abnormal再次醒来的时候,恢复正在运行的job
当Job coordinator检查job table的时候你不需要设置,系统自动选择时间,每个实例使用一个job 协调器,rac环境也是一样。
job怎么执行
当job被选择来执行的时候,job slave做
1收集运行job的元数据
2开始数据库会话,开启事务执行job
3job运行完毕,slave提交和结束事务
4关闭会话
job slaves
job slaves执行你提交的job,当job被执行的时候被job协调器唤醒,在job table中收集运行job的元数据
当job完成 slave做下面事情:
1重新调度job
2更新job table的状态
3插入job log 
4更新运行次数,失败次数
5清除
6找新工作
scheduler动态调整slave池的大小。
rac环境下scheduler的使用

0 0
原创粉丝点击