关于Oracle中的job

本文介绍如何通过Oracle的Job机制实现数据清理任务的自动化运行。包括在SQLPLUS和PL/SQL中创建Job的区别、Job的基本管理和常用命令,以及确保Job能够自动运行所需设置的参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库里的数据日夜累计,如果不对数据库的过期冗余数据删除,会影响运行速度。
我最近尝试了一种方法来删除数据,那就是写一个存储过程删除满足条件的数据,然后建一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值