oracle学习笔记(第十五章:排程作业)

--数据库作业:dbms_job
-- dbms_job 支持存储过程在系统的管理下周期性自动运行而无须用户介入
-- 数据库参数文件(init.ora)中有两个参数控制SNP进程的属性:job_queue_proceses,job_queue_interval
-- job_queue_proceses 值在0--36,表示可以同时运行的进程数,0表示系统禁止作业运行
-- job_queue_interval 值在1--3600,表示两个进程唤醒的间隔,进程按制定的时间进行睡眠
-- 运行作业:
-- 提交 submit,其过程的语法:
-- procedure submit(job out binary_integer,what in varchar2,next_Date in date default sysdate,inteval in varchar2 default null,no_parse in boolean default false)
-- 参数意义:
-- job 作业号,创建作业时,作业被赋值一个作业号,只要该作业存在,作业号不变,作业号在实例中 是唯一的
--     当一个作业编号提交,该作业就被赋值了一个作业号,该作业号由序列号 sys.jobseq 生成的
-- what 组成作业的PL/SQL代码,通常,该代码是存储过程的调用,所调用的procedure可以带任何个数的参数,但参数类型必须是 in
--      存储过程中的参数必须用两个单引号引起来
-- next_date 作业下次运行的日期,时间间隔
--           'sysdate + 7',间隔为一周
--           'next_date(trunc(sysdate),''friday''+12/24)'每周五中午运行
--           sysdate + 1/24 每小时运行
-- interval 作业再次运行时间的函数,该函数的值必须是一个时间值或为null
-- no_parse 如果为true,作业在第一次运行时才进行语法分析,如果为false,作业在提交时就对其分析,如果作业引用的数据库对象不存在但又必须提交该作业时,可以将该参数设置为true
-- 例子1:
---- 创建一个procedure,功能可以实现更新数据库表
CREATE OR REPLACE PROCEDURE P_UPDATE_AGE(i_emp_no CHAR)
AS
v_age INT;
BEGIN
     SELECT emp_age INTO v_age FROM emp_m
     WHERE emp_no=i_emp_no;
     UPDATE emp_m SET emp_age = v_age + 1
     WHERE emp_no=i_emp_no;
END;
---- 提交作业,每隔10秒B行一次 p_update_age
DECLARE
v_jobnum NUMBER;
BEGIN
     dbms_job.submit(v_jobnum,'p_update_age(''0001'');',SYSDATE,'sysdate + (10/(24*60*60))');
     COMMIT;--一定要有commit,如果没有该作业会话结束后,则事务将自动重新开始
END ;
--
--例子2:
CREATE OR REPLACE PROCEDURE p_temp_insert
AS
BEGIN
INSERT INTO temp_insert VALUES(temp_seq.NEXTVAL,SYSDATE);
END;
---
DECLARE
v_jobnum NUMBER :=1;
BEGIN
     dbms_job.submit(v_jobnum,'p_temp_insert;',SYSDATE,'sysdate + (5/(24*60*60))');
     COMMIT;
END;
-- 要启动作业运行必须提交包括调用dbms_job.submit语句的事物.
-- 运行命令:run,语法:dbms_job.run(job in binary_integer)
-- 作用,立即运行该作业( 不论作业处于什么状态下)
-- 其他 dbms_job 包的子程序:
-- isubmit       由其它过程使用指定的作业号i入作业的接口程序,程序员不能在其它程序代码中直接使用该程序,只能使用submit
-- run           强迫指定的作业运行在当前进程中
-- remove        从作业队列中删除一个作业
-- broken        标记作业中断或没有中断
-- change        变更作业中任何可配置的字段
-- what          变更what字段
-- next_date     变更next_date字段
-- interval      变更interval字段
-- instance      变更instance字段
-- user_export   返回需要重新创建作业调度的文本
-- check_privs   确定作业号可访问
-- 删除作业
-- romove(job in binary_integer)
-- 中断作业
-- broken(job in binary_integer ,broken in boolean,next_Date in date default sysdate)
-- 变更作业
-- procedure change(job in binary_integer,what in varchar2 default null,next_Date in date default null,interval in varchar2 default null)
-- procedure what(job in binary_integer,what in varchar2 )
-- procedure next_Date(job in binary_integer,next_Date in date)
-- procedure interval(job in binary_integer,interval in varchar2)
-- 实例仿射性:指定一个实例来运行给定的作业,这就叫实例仿射性,实例由过程 instance指定,语法是:
-- PROCEDURE INSTANCE(job IN binary_integer,instance IN BINARY_INTEGER,force IN boolean default false)
-- 导出作业
-- procedure user_export(job in binary_integer,mycall in out varchar2);
-- 例子
DECLARE
v_jobtext VARCHAR2(1000);
BEGIN
     dbms_job.user_export(5,v_jobtext);
     dbms_output.put_line(v_jobtext);
END;
-- 检查作业的权限:有两个功能,1,校验给定的作业号是否存在,2,锁定数据字典中响应的行以便程序对其进行修改
-- porcedure check_privs(job in binary_integer)
-- 在数据字典中观察作业:dba_jobs,user_jobs
SELECT * FROM user_jobs;


你可能感兴趣的:(oracle,sql,配置管理)