共计 3405 个字符,预计需要花费 9 分钟才能阅读完成。
本篇内容主要讲解“Oracle 调度 Schedule 特性中的 program 分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“Oracle 调度 Schedule 特性中的 program 分析”吧!
program 之于 procedure 的概念有点像操作系统层面的“程序”或者“应用”。但是 program 是由 dba 设定的,program 是一个对象,一个可执行的对象。
program 实际的操作可以分为三种类型:
PL/SQL BLOCK 标准的 PL/SQL 代码块
STORED PROCEDURE 编译好的 PL/SQL 存储过程、JAVA 存储过程或者外部子程序
EXECUTEABLEoracle 数据库之外的应用,比如操作系统命令
1、创建 Programs 使用 DBMS_SCHEDULER.CREATE_PROGRAM 过程
举个例子:
begin
dbms_scheduler.create_program(program_name = myprogram1 ,
program_action = /bin/date ,
program_type = EXECUTABLE ,
enabled = TRUE);
end;
/
program_name 指定一个 program 的名称
program_type 指定 program 的类型,前面交代的三种类型
program_action 实际执行的操作,应与前面 PROGRAM_TYPE 参数关联使用。比如说前面指定了 PROGRAM_TYPE 为 PLSQL_BLOCK,那么此处要执行的 action 就应当是一段标准的 pl/sql 代码。
如果前面指定 PROGRAM_TYPE 为 STORED_PROCEDURE,那么此处要执行的 action 就应当是 ORACLE 中定义好的存储过程(含 Java 存储过程),
如果前面指定 PROGRAM_TYPE 为 EXECUTABLE,那么此处就应该指定外部命令的命令行信息(含路径信息)
NUMBER_OF_ARGUMENTS 指定支持的参数个数,默认值为 0 即没有参数。每个 program 最多能够支持 255 个参数,注意如果 PROGRAM_TYPE 设置为 PLSQL_BLOCK,那么本参数自动忽略
ENABLED 指定是否将创建的 program 置为有效状态,默认情况下为 false。
COMMENTS 注释信息。
Program 的管理
创建完 program 之后,就涉及到 program 如何执行了,前面介绍 CREATE_PROGRAM 过程的参数时提到,每个 program 最多支持 255 个参数,要为 program 添加参数,可以通过 DEFINE_PROGRAM_ARGUMENT 过程。
不过在为其添加参数前,要注意 program 的 NUMBER_OF_ARGUMENTS 指定的数量,如果该值为 0,那么为其添加参数时就会报错。
查询创建的 program 的信息,可以通过 USER_SCHEDULER_PROGRAMS 视图,例如:
SQL select program_name,program_type,program_action,number_of_arguments,enabled from user_scheduler_programs;
PROGRAM_NAME PROGRAM_TYPE PROGRAM_ACTION NUMBER_OF_ARGUMENTS ENABL
—————————— —————- ——————– ——————- —–
MYPROGRAM1 EXECUTABLE /bin/date 0 FALSE
前面创建 program 時並未指定 NUMBER_OF_ARGUMENTS 的值,因此我们这里需要首先修改该值为一个非 0 值,操作如下
begin
dbms_scheduler.set_attribute(myprogram1 , NUMBER_OF_ARGUMENTS ,1);
end;
操作还是使用 DBMS_SCHEDULER.SET_ATTRIBUTE 过程。另外需要注意,program 的 NUMBER_OF_ARGUMENTS 参数可是说想改就能改的,正常情况下该处理必须是在 program 处于 enabled 之前确认完毕,
否则会触发 ORA-27465 错误,因此要修改 program 的参数之前,必须首先确保要修改 program 的 enabled 状态为 false。
那么对于已经处于 enabled 状态的 program,如何修改其状态属性呢?其实很简单,前面操作 jobs 时使用的 DBMS_SCHEDULER.DISABLE 过程还记的吗?该过程对于 program 同样好使,并且调用方式也完全一样,例如:
begin
dbms_scheduler.disable(myprogram1
end;
另外,如果希望将 program 置为 enabled 状态,执行 DBMS_SCHEDULER.ENABLE 过程即可,这里不再例举。
接下来,就可以为刚刚创建的 my_program1 添加路径参数,操作如下:
begin
dbms_scheduler.DEFINE_PROGRAM_ARGUMENT(program_name = myprogram1 ,
argument_position = 1,
argument_name = dirpath ,
argument_type = VARCHAR2 ,
default_value = /home/oracle
end;
/
查询为 program 定义的参数,可以通过 USER_SCHEDULER_PROGRAM_ARGS 视图
select program_name,argument_name,argument_position,argument_type default_value from user_scheduler_program_args;
PROGRAM_NAME ARGUMENT_NAME ARGUMENT_POSITION DEFAULT_VALUE
—————————— —————————— —————– —————-
MYPROGRAM1 DIRPATH 1 VARCHAR2
2、删除 program 的 argument 操作也很简单,使用 DROP_PROGRAM_ARGUMENT 过程即可,例如:
begin
dbms_scheduler.drop_program_argument(myprogram1 , dirpath
end;
该过程第一个参数指定 program 名称,第二个参数指定定义的 argument 名称,当然此处也可以指定 argument 的位置,即前例视图返回结果中的 ARGUMENT_POSITION 列值。
要删除 program 的话就更简单了,使用 DROP_PROGRAM 过程即可,例如:
begin
dbms_scheduler.drop_program(myprogram1
end;
当然啦,删除 program 的同时,也会删除该 program 对应的所有 arguments。
实际上 SCHEDULER 中创建 job 时,也可以指定执行外部的程序。SCHEDULER 中的 Job 更像是之前版本继承过来的 JOBS,只不过 10g 中 SCHEDULER 管理的 JOBS 功能更加强大。
到此,相信大家对“Oracle 调度 Schedule 特性中的 program 分析”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!