您的位置:首页 > 数据库 > Oracle

关于Oracle中的job

2017-07-07 15:26 141 查看
数据库里的数据日夜累计,如果不对数据库的过期冗余数据删除,会影响运行速度。

我最近尝试了一种方法来删除数据,那就是写一个存储过程删除满足条件的数据,然后建一个JOB来自动运行这个存储过程。
oracle在SQLPLUS 和PLSQL建 job 的区别:

 在SQLPLUS 是这样写

//建立job   

variable test_job_really number;   

begin   

dbms_job.submit(:test_job_really,'test_jobproce;',sysdate,'sysdate+1/1440');   

commit;   

end;    

/

--------------------------  

如果是PLSQL的话   

--declare   

declare test_job_really number;   

begin   

dbms_job.submit(test_job_really,'test_jobproce;',sysdate,'sysdate+1/1440');  //test_job_really前面去掉:号   

commit;   

end;   

/
get jobno

select job from dba_jobs where what = 'test_jobproce;'

JOB一些常用的命令

---停止job  25是建立的job test_job_really  

begin 

dbms_job.broken(25,true);  

commit;  

end;

/

 

--启动job  

begin 

dbms_job.run(25);  

commit;  

end;  

/
--删除job  

begin      

 dbms_job.remove(25);  

 commit;  

end;

/

 

--查看执行结果  

select  * from test_job order by test_job.para_date desc; 

 

--查看job  

select * from sys.user_jobs   

 

--使用下面的SQL查询是否JOB还在Running,前提是需要job执行时间不能过短  

select * from dba_jobs_running  
除了submit参数外,其余的几个参数有:  

dbms_job.run(v_job);         //运行job 

 

dbms_job.broken(v_job,true,next_date);        //停止一个job,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。  

 

dbms_job.remove(v_job);        //删除某个job 

 

dbms_job.what(v_job,'sp_fact_charge_code;');        //修改某个job名 

 

dbms_job.next_date(v_job,sysdate);        修改下一次运行时间 

如果JOB不能自动运行,需要设置一些参数,参数如下:

利用Oracle的Job Queue实现定时操作

1、确保Oracle的工作模式允许启动队列管理器(SNP进程)

SVRMGRL> Alter System Enable Restricted Session;

或 SQL> Alter System Disenable Restricted Session;
2、确保Oracle已配置任务队列管理器的启动参数

initSID.ora中:

job_queue_process=n(0);(0-36)个进程

job_queue_interval=N(60);(1-3600)秒唤醒
3、将任务加入数据库的任务队列中

DBMS_JOB.Submit (

job out binary_integer, (任务号)

what in varchar2, (执行任务的名称及入参)

next_date in date, (任务执行的时间)

interval in varchar2, (任务执行的间隔。null:执行一次;sysdate+m:周期性,每隔m天执行)

no_parse in boolean)
同时

grant execute on dbms_job to ...;
4、将要执行的任务,为存储过程等PL/SQL程序段

SQL> variable n number;

SQL> begin

2 dbms_job.submit(n, my_job, sysdate, sysdate + 1/360);

3 commit;

4 end

5 /

SQL> print :n;
5、查看Job

Table :user_jobs、dba_jobs

Column:job (任务号)

next_date (下次执行日期)

next_sec (下次执行时间)

failures (失败次数,失败16次则自动终止)

broken (终止标志,Y/N)

在数据库找到initsid.ini这个配置文件,进行这些选项的配置,

SQL> show parameters job

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

job_queue_processes                  integer     0

数据库配置只有这项,值是0,说明没有设置

修改可执行作业个数为20个

ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 20;

这样就可以自动运行JOBL 。

6、一些必要的参数

修改initsid.ora参数

job_queue_processes = 4

job_queue_interval = 10

job_queue_keep_connections=true
修改可执行作业个数为20个

ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 20
修改取消限制模式

ALTER SYSTEM DISABLE RESTRICTED SESSION;
7、两个必要的表

      user_jobs及dba_jobs_running
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: