关于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
我最近尝试了一种方法来删除数据,那就是写一个存储过程删除满足条件的数据,然后建一个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
相关文章推荐
- 关于ORACLE中JOB指定节点运行的方法
- oracle job interval(关于时间误差)
- 关于oracle job定时执行的问题
- 关于oracle Scheduler的介绍——job
- 关于oracle的job
- 解决关于oracle中job只执行一次的…
- 关于oracle 定时JOB
- 关于ORACLE时区问题 ----------为什么我的JOB总不是在我想执行的时候跑
- 关于oracle dbms_job 定时执行的内容。
- 今天看了一篇oracle tip,关于如何获得行锁时跳过已被锁的行,oracle8i的sql reference居然没有关于这个选项的介绍,特此记录下来。
- 关于ORACLE的版本开发注意事项!
- Oracle作业(JOB)更新next_date的探讨
- ORACLE关于bin目录下各文件的意义及使用方法
- 关于asp调用oracle存储过程的问题
- 关于Oracle日期转换的一点小经验:运用union的一种奇怪现象及解决
- Oracle开发中,关于查询的一个问题
- 关于Oracle降序索引的定意及回溯
- 这是一个关于Oracle数据备份的专辑
- ORACLE关于bin目录下各文件的意义及使用方法
- ORACLE----触发器,存储过程及JOB [转]