< p>Oracle作为目前全球最流行的数据库管理系统之一,其强大的功能在企业级应用中扮演着重要的角色。其中的Job功能更是Oracle DBA经常用来实现自动化操作的一个有力工具。那么本文就来介绍如何增加Oracle数据库的Job,并且通过实例来进一步说明。< /p>< p>首先说一下创建Job的一般步骤,我们需要在Oracle的SQL Developer或者PL/SQL Developer中执行下面的代码:< /p>< pre>BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name =>'JOB_NAME',
job_type =>'PLSQL_BLOCK',
job_action =>'BEGIN proc1; END;',
start_date =>SYSTIMESTAMP,
repeat_interval =>'FREQ=DAILY;BYHOUR=23;',
end_date =>NULL,
enabled =>TRUE,
comments =>'job comments here');
END;
/< p>其中,job_name即为这个Job的名称,job_type可以有多种类型选择,这里我们选用的是PLSQL_BLOCK类型,job_action中则填入相应的PL/SQL代码,用于执行Job所需的具体操作。< /p>< p>我们来看一个实例,假设我们现在需要创建一个每天晚上9点执行备份操作的Job,那么代码可以写成这样:< /p>< pre>BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name =>'backup_job',
job_type =>'PLSQL_BLOCK',
job_action =>'
DECLARE
backup_dir VARCHAR2(200) := ''/u01/backup/'';
BEGIN
EXECUTE IMMEDIATE ''CREATE DIRECTORY backup_dir AS ''''''||backup_dir||''''''''';
EXPORT all dumpfile=scott.dmp directory=backup_dir dumpfile=sales.dmp directory=backup_dir;
END;',
start_date =>SYSTIMESTAMP,
repeat_interval =>'FREQ=DAILY;BYHOUR=21;',
end_date =>NULL,
enabled =>TRUE,
comments =>'every night backup');
END;
/< p>可以看到,我们在这个Job中选择将导出文件存放在/u01/backup/目录下,并且在代码中先判断了该目录是否存在,如果不存在则自动创建。在开始日期,重复间隔和结束日期等方面,网上有很多详细的介绍,这里就不再赘述了。< /p>< p>当然,增加Job也并不一定就是这种静态方式,其实还有更灵活的方法。比如,我们可以通过一个存储过程来动态地增加Job。代码如下:< /p>< pre>CREATE OR REPLACE PROCEDURE ADD_JOB (
job_name_in IN VARCHAR2,
repeat_interval_in IN VARCHAR2,
job_action_in IN VARCHAR2)
AS
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name =>job_name_in,
job_type =>'PLSQL_BLOCK',
job_action =>job_action_in,
start_date =>SYSTIMESTAMP,
repeat_interval =>repeat_interval_in,
end_date =>NULL,
enabled =>TRUE,
comments =>'Dynamically created job');
END;
/< p>这个存储过程传入三个参数,分别为Job名称、重复时间间隔以及Job代码。在使用时,我们只需要将具体的参数传进去,就可以动态地创建Job了。比如下面这样:< /p>< pre>BEGIN
ADD_JOB('backup_dynamic', 'FREQ=DAILY;BYHOUR=23;', '
DECLARE
backup_dir VARCHAR2(200) := ''/u01/backup/'';
BEGIN
EXECUTE IMMEDIATE ''CREATE DIRECTORY backup_dir AS ''''''||backup_dir||''''''''';
EXPORT all dumpfile=scott.dmp directory=backup_dir dumpfile=sales.dmp directory=backup_dir;
END;');
END;
/< p>在这个例子中,我们就成功地通过存储过程增加了一个每天晚上9点执行备份操作的Job。< /p>< p>总之,增加Oracle的Job有多种方式,我们可以根据自己的情况选择相应的方式来进行操作。无论采用哪种方式,都需要仔细地设计好Job的具体操作,以达到自动化操作的效果。< /p>