oracle如何实现定时 oracle怎么设置定时任务

Oracle中通过命令行实现定时操作详解 Oracle中通过命令行实现定时操作详解 Oracle中通过命令行实现定时操作详解 Oracle基础
众所周知 一般操作系统会提供定时执行任务的方法 例如 Unix平台上提供oracle如何实现定时了让系统定时执行任务的命令Crontab 但是 对于某些需求 例如 一些对数据库表的操作 最为典型的是证券交易所每日收盘后的结算 它涉及大量的数据库表操作 如果仍然利用操作系统去定时执行 不仅需要大量的编程工作 而且还会出现用户不一致等运行错误 甚至导致程序无法执行
一 分析问题
事实上 对于以上需求 oracle如何实现定时我们可以利用数据库本身拥有的功能Job Queue(任务队列管理器)去实现 任务队列管理器允许用户提前调度和安排某一任务 使其能在指定的时间点或时间段内自动执行一次或多次 由于任务在数据库中被执行 所以执行效率很高
任务队列管理器允许我们定制任务的执行时间 并提供了灵活的处理方式 还可以通过配置 安排任务在系统用户访问量少的时段内执行 极大地提高了工作效率 例如 对于数据库日常的备份 更新 删除和复制等耗时长 重复性强的工作 我们就可以利用任务队列管理器去自动执行以减少工作量
目前 拥有此项功能的数据库有许多 最有代表性的是SQL Server Oracle 等 但是 要让任务队列管理器工作 还需要我们加以配置才能实现 SQL Server的功能配置是在一个图形化界面(GUI)中实现的 非常简单 利用OEM客户端管理工具 Oracle的配置也可以在一个图形界面中完成 然而大多数的用户更习惯于命令行的方式去操纵数据库 本文介绍如何通过命令行实现这种配置
二 实现步骤
.确保Oracle的工作模式允许启动任务队列管理器
Oracle定时执行 Job Queue 的后台程序是SNP进程 而要启动SNP进程 首先要确保整个系统的模式是可以启动SNP进程的 这需要以DBA的身份去执行如下命令
svrmgrl alter system enable restricted session; 或sql alter system disenable restricted session;
利用如上命令更改系统的会话方式为disenable restricted 为SNP的启动创造条件
.确保Oracle的系统已经配置了任务队列管理器的启动参数
SNP的启动参数位于Oracle的初始化文件中 该文件放在$ORACLE_HOME/dbs路径下 如果Oracle的SID是myora 的话 则初始化文件就是initmyora ora 在文件中对SNP启动参数的描述部分如下
job_queue_process=n job_queue_interval=N
第一行定义SNP进程的启动个数为n 系统缺省值为 正常定义范围为 ~ 根据任务的多少 可以配置不同的数值
第二行定义系统每隔N秒唤醒该进程一次 系统缺省值为 秒 正常范围为 ~ 秒 事实上 该进程执行完当前任务后 就进入睡眠状态 睡眠一段时间后 由系统的总控负责将其唤醒
如果该文件中没有上面两行 请按照如上配置添加 配置完成后 需要重新启动数据库 使其生效 注意 如果任务要求执行的间隔很短的话 N的配置也要相应地小一点
.将任务加入到数据库的任务队列中
调用Oracle的dbms_job包中的存储过程 将任务加入到任务队列中
dbms_job submit( job out binary_integer what in archar next_datein date interval in varchar no_parse in boolean)
其中
●job 输出变量 是此任务在任务队列中的编号
●what 执行的任务的名称及其输入参数
●next_date 任务执行的时间
●interval 任务执行的时间间隔 下面详细讨论一下dbms_job submit中的参数interval 严格地讲 interval是指上一次执行结束到下一次开始执行的时间间隔 当interval设置为null时 该job执行结束后 就被从队列中删除 假如我们需要该job周期性地执行 则要用 sysdate+m 表示
将任务加入到任务队列之前 要确定执行任务的数据库用户 若用户是scott 则需要确保该用户拥有执行包dbms_job的权限 若没有 需要以DBA的身份将权利授予scott用户
svrmgrl grant execute on dbms_job to scott;
.将要执行的任务写成存储过程或其oracle如何实现定时他的数据库可执行的pl/sql程序段
例如 我们已经建立了一个存储过程 其名称为my_job 在sql/plus中以scott用户身份登录 执行如下命令
sql variable n number; sql begin dbms_job submit(:n my_job; sysdatesysdate+ / ); mit; end; /
系统提示执行成功
Sql print :n;
系统打印此任务的编号 例如结果为
如上 我们创建了一个每隔 分钟执行一次的任务号为 的任务 可以通过Oracle提供的数据字典user_jobs察看该任务的执行情况
sql select job next_date next_sec failures broken from user_jobs;
执行结果如下
job next_date next_sec failures broken / / : : N
这表示任务号为 的任务 下一次将在 / / : : 执行 此任务的执行失败记录为 次 注意 当执行job出现错误时 Oracle将其记录在日志里 失败次数每次自动加 当执行失败次数达到 时 Oracle就将该job标志为broken 此后 Oracle不再继续执行它 直到用户调用过程dbms_job broken 重新设置为not broken 或强制调用dbms_job run来重新执行它
lishixinzhi/Article/program/Oracle/201311/17096
如果需要从oracle中每天定时导出数据用什么方法?1、创建数据库日志表导出为文本文件的脚本tabout.ctl或tabout.sql
注意:该日志导出后在c:\HttpLog目录下
tabout.ctl脚本内容如下:
SET NEWPAGE NONE
SET HEADING OFF
SET TERM OFF
SET SPACE 0
SET PAGESIZE 0
SET TRIMOUT ON
SET TRIMSPOOL ON
SET LINESIZE 2500
set feedback off
set echo off
SET VERIFY OFF
column v_date new_value filename;
select to_char(sysdate,'yyyymmdd') || '.log' v_date from dual;
spool ..\HttpLog\filename
select id||','||name from orcluser.test;
spool off;
exit;
2、创建调用该脚本的logout.bat文件
logout.bat内容如下:
mkdir ..\HttpLog\
C:\oracle\ora92\bin\sqlplus orcluser/orcl @C:Oracleout.ctl
说明:该bat文件直接在当前目录下创建名为HttpLog的文件夹,以便tabout.ctl脚本输出的文件存放到该目录下 。其通过调用Oracle中sqlplus可执行文件来执行tabout.ctl脚本,所以该文件直接双击即可运行,无需其他操作 。
3、通过windows定时任务实现自动定期执行
“在控制面板——任务计划——添加任务计划”中建立定期将数据库中日志表数据导出为文本格式(如:你可以根据需求设置为每天对日志表数据进行导出) 。根据你当前对日志文件路径的存储需求,修改上面两个脚本中的存储路径,在windows定时任务直接调用logout.bat文件执行即可 。
oracle定时更新(JOBS)oracle定时更新(JOBS)
rm.pro_hrm_emp_info_job过程
需要每天都更新,所以先创建个procedure,再创建个job就可以实现定时更新
create or replace procedure rm.pro_hrm_emp_info_job is
zm
begin
update rm.hrm_emp_info
set ages = to_number(TRUNC(nvl((sysdate brith_date) / 365, 0))),
leng_serv = to_number(TRUNC(nvl((sysdate work_date) / 365, 0))),
ins_len_ser = to_number(TRUNC(nvl((sysdate ente_appe_date) / 365,
0)));
commit;
end pro_hrm_emp_info_job;
相应oracle如何实现定时的`job
declare
jobno number;
begin
dbms_job.submit(jobno,’rm.pro_hrm_emp_info_job;’,trunc(sysdate),’trunc(sysdate) 1’);每天零点更新
commit;
end;
/
分解下job
dbms_job.submit(jobno, job号,由sys.jobseq生成
’rm.pro_hrm_emp_info_job;’, 要执行oracle如何实现定时的procedure
trunc(sysdate), 下次要执行的时间
’trunc(sysdate) 1’); 每次间隔的时间,此处的1标识一天 也可1/1440每一分钟执行一次
查看
select * from sys.user_jobs;
其中创建的jobno(任务号)由sys.jobseq序列生成
主由packages中的sys.dbms_job执行
细节可以查看sys.dbms_job包内容 。;
Oracle中如何定时执行一条SQL语句通过网上查询,找到一种方案 , 就是先在oracle里面对要定时的sql写成存储过程,再用DBMS_scheduler对存储过程进行定时执行 。
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在数据库中新建了一个表MY_JOB_TEST
在PLSQL中,执行下面语句模拟存储过程的调用,执行后要点提交才有反应
[sql] view plain copy
BEGIN
INSERT INTO MY_JOB_TEST (NUM) VALUES (1);
END;
然后下面建立一个存储过程JOB_TEST
(注意,这里用户需要CREATE JOB权限,可以用超级管理员用户执行下面语句给指定用户赋予该权限)
[sql] view plain copy
Grant Create Job To 指定用户名
[sql] view plain copy
SQLCREATE OR REPLACE PROCEDURE
JOB_TEST
BEGIN
INSERT INTO MY_JOB_TEST (NUM) VALUES (1);
END;
(此处要执行存储过程不能用exec JB_TEST,这种执行方式只能在命令行中使用)
使用DBMS_SCHEDULER进行定时,这里为每分钟执行一次
[sql] view plain copy
SQL BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name='SCHEDULER_TEST',
job_type='STORED_PROCEDURE',
job_action='JOB_TEST',
start_date=sysdate,
repeat_interval='FREQ=MINUTELY;INTERVAL=1');
END;
但是这样子定时任务并不会执行 。
我们可以用下面的命令查看一下scheduler的状态
[plain] view plain copy
SQLSELECT * FROM USER_SCHEDULER_JOBS;
此时我们可以看到enable的状态是false的,因此我们需要去启动定时任务
[plain] view plain copy
SQLBEGIN
DBMS_SCHEDULER.ENABLE('SCHEDULER_TEST');
END
dbms_scheduler.enable('j_test');--启用jobs
dbms_scheduler.disable('j_test');--禁用jobs
dbms_scheduler.run_job('j_test');--执行jobs
dbms_scheduler.stop_job('j_test');--停止jobs
dbms_scheduler.drop_job('j_test');--删除jobs
然后再查询job的enable装态,发现为true了 。
然后查看MY_JOB_TEST表,发现每分钟会往里面添加记录 。
当需要修改定时任务或者调度的其他属性时,可以用下面的
dbms_scheduler.set_attribute('调度名','调度属性','调度值');
至此,定时任务完成 。
Oracle 定时任务job实际应用Oracle定时任务是在oracle系统中一个非常重要的子系统oracle如何实现定时 , 运用得当,可以大大提高oracle如何实现定时我们系统运行和维护能力 。oracle定时任务的功能,可以在指定的时间点自行执行任务 。
那么在实际工作中,什么样的场景会用到定时任务呢?下面是在实际工作中用到的真实业务场景举例
上面是通过脚本创建,当然也可以通过plsql图形化工具来创建,具体创建过程如下
**系统会自动分配一个任务号jobno ** ,根据jobno 可以进行如下定时任务操作
查询结果如下
其中broken = N 表示该job已经生效
oracle如何实现定时我们再来查看目标表中有没有定时插入数据
可以看到,定时一分钟插入oracle如何实现定时了一条数据 。
1、根据jobno,执行以下脚本可以停止job
再来查看定时任务是否停用成功
我们发现BROKEN=Y说明定时任务已经停止成功oracle如何实现定时了
BROKEN = N ,刚才的定时任务又启动了
下面总计了一些定时任务中常用的运行时间
【oracle如何实现定时 oracle怎么设置定时任务】关于oracle如何实现定时和oracle怎么设置定时任务的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读