`

Oracle job 管理

阅读更多
SQL> variable job1 number;
SQL> begin
  2  dbms_job.submit(:job1,'pro_synchronize_bzks;',sysdate,'TRUNC(SYSDATE + 1) + 22/24');
  3  commit;
  4  end;
  5  /
 
PL/SQL procedure successfully completed
job1
---------
62

 

关于间隔时间:

sysdate+1/24                                     从起始日期开始每隔1小时执行

sysdate+1/1440                                 从起始日期开始每隔1分钟执行

sysdate+1/86400                               从起始日期开始每隔1秒钟执行

TRUNC(SYSDATE + 1) + 20/24             每天晚上8点 执行

 

 

SVRMGR> select * from dba_jobs;

初始化相关参数job_queue_processes
alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000  ;job_queue_interval = 10  //调度作业刷新频率秒为单位
DBA_JOBS describes all jobs in the database.
USER_JOBS describes all jobs owned by the current user

1  select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),to_char(next_date,'yyyy-mm-dd HH24:m),interval from dba_jobs where job in (325,295)
2 select job,what,last_date,next_date,interval from  dba_jobs where job in (1,3);


查询job的情况。
show paramter background_dump_dest.
看alter.log 和trace


SVRMGR> select * from dba_jobs;

初始化相关参数job_queue_processes
alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000

job_queue_interval = 10  //调度作业刷新频率秒为单位


DBA_JOBS describes all jobs in the database.
USER_JOBS describes all jobs owned by the current user

1  select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),to_char(next_date,'yyyy-mm-dd HH24:m),interval from dba_jobs where job in (325,295)
2 select job,what,last_date,next_date,interval from  dba_jobs where job in (1,3);


查询job的情况。
show paramter background_dump_dest.
看alter.log 和trace


请问我如何停止一个JOB
SQL> exec dbms_job.broken(1,true)

PL/SQL 过程已成功完成。
SQL>commit  //必须提交否则无效

启动作业
SQL> exec dbms_job.broken(1,false)

PL/SQL 过程已成功完成。

停其他用户的job
SQL>exec sys.dbms_ijob.broken(98,true);
SQL>commit;


============================

exec dbms_job.broken(:job) 停止
exec dbms_job.broken(186,true) //标记位broken
exec dbms_job.broken(186,false)//标记为非broken
exec dbms_job.broken(186,false,next_day(sysdate,'monday')) //标记为非broken,指定执行时间
exec dbms_job.remove(:job);删除
exec dbms_job.remove(186);
commit;

把一个broken job重新运行


三、查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息


创建JOB
variable jobno number;
begin
  dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);
  commit;
end;
print jobno

例如,我们已经建立了一个存储过程,其名称为my_job,在sql/plus中以scott用户身份登录,执行如下命令:
sql> variable n number;
sql> begin
dbms_job.submit(:n‘my_job;’,sysdate,
‘sysdate+1/360’);
commit;
end;
Sql> print :n;

系统提示执行成功。
Sql> print :n;
系统打印此任务的编号,例如结果为300。


简单例子
一个简单例子:

创建测试表
SQL> create table TEST(a date);

表已创建。

创建一个自定义过程
SQL> create or replace procedure MYPROC as
  2  begin
  3  insert into TEST values(sysdate);
  4  end;
  5  /

过程已创建。

创建JOB
SQL> variable job1 number;
SQL>
SQL> begin
  2  dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');  --每天1440分钟,即一分钟运行test过程一次
  3  end;
  4  /

PL/SQL 过程已成功完成。

运行JOB
SQL> begin
  2  dbms_job.run(:job1);
  3  end;
  4  /

PL/SQL 过程已成功完成。

SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST;

时间
-------------------
2001/01/07 23:51:21
2001/01/07 23:52:22
2001/01/07 23:53:24

删除JOB
SQL> begin
  2  dbms_job.remove(:job1);
  3  end;
  4  /

PL/SQL 过程已成功完成。

=======================================


a、利用dbms_job.run()立即执行该job
   sql>begin
   sql>dbms_job.run(:jobno) 该jobno为submit过程提交时返回的job number
   sql>end;
   sql>/
b、利用dbms_job.broken()重新将broken标记为false
   sql>begin
   sql>dbms_job.broken (:job,false,next_date)
   sql>end;
   sql>/


========================================
SQL> create table a(a date);
Table created

创建一个过程
SQL> create or replace procedure test as
  2  begin
  3  insert into a values(sysdate);
  4  end;
  5  /
Procedure created

提交作业
SQL> declare
  2  job1 number;   //定义一个数字型变量
  3  begin
  4  dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440');  //按分钟算一天1440分钟
  5  end;
  6  /
PL/SQL procedure successfully completed
job1
---------
4
SQL> commit;
Commit complete

运行作业
SQL> begin
  2  dbms_job.run(4);
  3  end;
  4  /
PL/SQL procedure successfully completed

删除作业
SQL> begin
  2  dbms_job.remove(4);
  3  end;
  4  /
PL/SQL procedure successfully completed
SQL> commit;
Commit complete


job change//修改作业
execute dbms_job.change(186,null,null,'sysdate+3');
execute dbms_job.change(186,'scott.test(update)');


DBA_JOBS
===========================================
字段(列)          类型                 描述
JOB                NUMBER          任务的唯一标示号
LOG_USER           VARCHAR2(30)    提交任务的用户
PRIV_USER          VARCHAR2(30)    赋予任务权限的用户
SCHEMA_USER        VARCHAR2(30)    对任务作语法分析的用户模式
LAST_DATE          DATE            最后一次成功运行任务的时间
LAST_SEC           VARCHAR2(8)     如HH24:MM:SS格式的last_date日期的小时,分钟和秒
THIS_DATE     DATE            正在运行任务的开始时间,如果没有运行任务则为null
THIS_SEC     VARCHAR2(8)     如HH24:MM:SS格式的this_date日期的小时,分钟和秒
NEXT_DATE          DATE            下一次定时运行任务的时间
NEXT_SEC           VARCHAR2(8)     如HH24:MM:SS格式的next_date日期的小时,分钟和秒
TOTAL_TIME         NUMBER          该任务运行所需要的总时间,单位为秒
BROKEN             VARCHAR2(1)     标志参数,Y标示任务中断,以后不会运行
INTERVAL           VARCHAR2(200)   用于计算下一运行时间的表达式
FAILURES    NUMBER     任务运行连续没有成功的次数
WHAT               VARCHAR2(2000)  执行任务的PL/SQL块
CURRENT_SESSION_LABEL RAW          MLSLABEL 该任务的信任Oracle会话符
CLEARANCE_HI      RAW MLSLABEL     该任务可信任的Oracle最大间隙
CLEARANCE_LO      RAW              MLSLABEL 该任务可信任的Oracle最小间隙
NLS_ENV           VARCHAR2(2000)   任务运行的NLS会话设置
MISC_ENV          RAW(32)          任务运行的其他一些会话参数

 

描述                    INTERVAL参数值
每天午夜12点            'TRUNC(SYSDATE + 1)'
每天早上8点30分         'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12点         'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点    'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6点10分    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

【转自www.bitsCN.com

分享到:
评论

相关推荐

    oracle-Job-管理.pdf

    Oracle Job管理是Oracle数据库中的一个关键特性,用于自动化执行数据库任务,如定时备份、数据清理或报告生成等。以下是对Oracle Job管理的详细解释: 1. **创建Job**: 在Oracle中,你可以通过创建存储过程来定义...

    Oracle Job的用法

    综上所述,Oracle Job是一个强大的工具,能帮助数据库管理员自动化执行各种任务。通过灵活的配置,可以实现定时执行、根据事件触发、异常处理等功能,极大地提高了数据库的管理和维护效率。理解并熟练掌握这些使用...

    oracle-Job-管理.docx

    Oracle Job管理是数据库中用于定时执行任务的一种机制,它允许用户安排存储过程、PL/SQL块或其他数据库操作在预设的时间点自动运行。在Oracle 9i版本中,我们可以使用SQL命令或者DBMS_SCHEDULER包来创建、修改和管理...

    ORACLE如何停止一个JOB

    在Oracle数据库管理中,有时我们需要停止正在运行的JOB,这可能是由于各种原因,如发现错误、优化性能或调整资源分配。本文将详细阐述如何在Oracle中查询并停止正在运行的JOB,包括关键步骤、涉及的表与视图以及具体...

    oracle job使用详解

    Oracle Job 提供了一种灵活的方式来自动化数据库维护任务,确保在特定时间执行关键操作,对于大型企业级应用和数据库管理系统尤其重要。了解并熟练使用 Job 功能,有助于提高数据库的效率和可靠性。

    oracleJob创建脚本

    在Oracle数据库中,Job是一种用于调度定期任务的功能,常被用来自动化执行数据库管理中的各种任务,比如备份、清理临时表空间等。Job主要由`DBMS_JOB`包进行管理和控制,此包提供了提交(new job)、删除(delete job)...

    oraclejob例子

    Oracle Job的全称是Database Scheduler Job,它通过Oracle Database Scheduler(数据库调度器)进行管理。下面我们将深入探讨Oracle Job的创建、配置、管理和使用等相关知识点。 1. **Oracle Database Scheduler...

    oracle job

    Oracle Job是Oracle的DBMS_SCHEDULER或之前版本中的DBMS_JOB包的一部分,它允许数据库管理员规划、监控和管理长时间运行的任务。 Oracle Job的创建通常涉及以下步骤: 1. **创建Job**:使用DBMS_SCHEDULER或DBMS_...

    oracle job实例 测试通过

    从给定的Oracle Job实例测试通过的描述与代码片段中,我们可以提炼出多个关于Oracle数据库管理、编程与作业调度的关键知识点。以下是对这些知识点的详细解释: ### 1. 创建序列(Sequence) 在Oracle数据库中,...

    ORACLE创建JOB脚本

    首先,我们需要理解Oracle中的DBMS_JOB包,这是Oracle提供的一组过程,用于创建、修改和管理JOB。DBMS_JOB包包含以下主要过程: 1. DBMS_JOB.BEGIN_JOB:这个过程用于创建一个新的JOB,它会返回一个job编号,这个...

    Oracle JOB 用法小结

    Oracle的`dbms_job`包提供了多种用于管理JOB的方法: 1. `Broken()`过程用于更新已提交作业的状态,通常用于将一个破碎的作业标记为未破碎。它接受三个参数:作业号(job)、是否破碎(broken)以及下次运行时间...

    oracle job 创建

    对于初学者来说,理解如何创建、运行和管理 Oracle Job 是十分重要的。 1. **Job 的创建**: 创建一个 Oracle Job 需要使用 `DBMS_JOB` 包中的 `SUBMIT` 子程序。在提供的示例中,我们看到以下步骤: - 首先,...

    oracle job创建脚本

    你可以使用`DBMS_JOB.INFO`查询Job的状态,或者使用`DBMS_SCHEDULER`包(在Oracle 10g及以后版本推荐)进行更高级的Job管理,包括查看Job日志、暂停、恢复和删除Job。 8. **注意事项**: - 修改`next_date`以适应...

    oracle的job定时

    Oracle的Job定时功能是Oracle数据库系统提供的一种自动化任务调度机制,允许用户设定特定的时间点或时间间隔执行数据库操作。在项目开发中,特别是在大数据管理和分析的场景下,定时任务经常被用于更新数据、生成...

    创建oracle job

    在Oracle数据库管理中,创建Job是一项重要的功能,可以帮助用户自动化执行一些周期性的任务,比如定期备份数据、更新统计信息等。本文将详细介绍如何在Oracle环境中创建Job,并通过具体的示例来解释各个步骤。 ####...

    xxl-job oracle 适配版本

    3. **事务管理**:Oracle支持分布式事务,XXL-JOB在处理多任务调度时,可能会利用Oracle的事务特性来确保数据的一致性。 4. **连接池配置**:使用合适的Oracle数据库连接池,如C3P0或DBCP,以提高数据库连接的复用...

    Oracle企业管理器OEM

    Oracle 企业管理器(OEM 2.1)使用指南内容 Oracle 企业管理器(OEM 2.1)是 Oracle 公司提供的一款企业管理软件,旨在帮助用户对 Oracle 数据库和相关的系统进行监控和管理。下面是对 Oracle 企业管理器(OEM 2.1...

    Oracle案例详细分析:Job任务停止执行

    Oracle案例详细分析:Job任务停止执行 本文通过一次Oracle Job任务异常案例诊断,分析其原因及...Oracle Job任务是Oracle数据库中非常重要的功能,通过对Oracle Job任务的理解和掌握,可以更好地管理和维护数据库。

    oracle 创建job实例

    Oracle 创建 Job 实例 Oracle 创建 Job 实例是指...创建 Job 实例需要遵循特定的步骤和配置,包括确保 Oracle 的工作模式允许启动任务队列管理器、配置任务队列管理器的启动参数、将任务加入到数据库的任务队列中等。

    oracle中JOB总结

    Oracle数据库利用SNP(Scheduler)进程来管理和执行这些JOB。 SNP(Scheduler)进程是Oracle数据库的一个核心组成部分,它的主要职责是监控和执行JOB。SNP的独特之处在于其自我恢复能力——即使SNP进程意外终止,...

Global site tag (gtag.js) - Google Analytics