- 浏览: 485131 次
- 性别:
- 来自: 南阳
文章分类
最新评论
-
yuanhongb:
这么说来,感觉CGI和现在的JSP或ASP技术有点像啊
cgi -
draem0507:
放假了还这么勤啊
JXL操作Excel -
chenjun1634:
学习中!!
PHP/Java Bridge -
Jelen_123:
好文章,给了我好大帮助!多谢!
hadoop安装配置 ubuntu9.10 hadoop0.20.2 -
lancezhcj:
一直用job
Oracle存储过程定时执行2种方法(转)
---要在system用户下赋create job权限给jobuser
grant create job to jobuser;
-----------------------------------------------------------------------------
---在jobuser下执行
----------定时执行job
BEGIN
DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'test_job',--生成job名称
JOB_TYPE => 'STORED_PROCEDURE',--job类型
JOB_ACTION => 'PGEX_AUTOJOB.TESTJOB',--job执行的程序
START_DATE => TRUNC(SYSTIMESTAMP + 1),--job开始执行时间
REPEAT_INTERVAL => 'FREQ=MINUTELY; INTERVAL=5;',--job执行频率
END_DATE => SYSTIMESTAMP + 3000,--job结束执行时间
ENABLED => TRUE,
AUTO_DROP => FALSE,
COMMENTS => '测试job');--job描述
END;
-----------------------------------
-- JOB 启用
BEGIN
DBMS_SCHEDULER.ENABLE('test_job');
END;
可以查询dba_scheduler_jobs表得到job的具体情况
------------------------------------------------------------------------------------------------
---以下是9!数据库的
--生成job:test_job
VARIABLE job_busilog_addpartition NUMBER;
BEGIN
DBMS_JOB.SUBMIT(:job_busilog_addpartition,'PGEX_AUTOJOB.TESTJOB;',trunc(sysdate),'SYSDATE+1/24/60');
COMMIT;
end;
可以查询dba_jobs表得到job的具体情况
------------------------------------------------------------------------------------------------
==========================================================
导读:
一、基本概念
1.6 测试计划任务中设定的时间 dbms_scheduler.evaluate_calendar_string
二、郑彬的实践:
三、常用操作
四、查看job的状态
五、关于job_name的注意事项
六、参考文献
一、基本概念
1.1 oracle 10g以前的计划任务用的是DBMS_JOB包,10G以后用的是DBMS_SCHEDULER,
【问题1】:DBMS_SCHEDULER的新特性是什么呢?
【答案】:定义更灵活了;增强了和系统的交互性。
这里提到的"任务"可以是数据库内部的存储过程,匿名的PL/SQL块,也可以是操作系统级别的脚本.
1.2 可以有两种方式来定义"计划":
1) 使用DBMS_SCHDULER.CREATE_SCHEDULE //定义一个计划,计划再调用job;
2) 调用DBMS_SCHDULER.CREATE_JOB //过程直接定义job
1.3 这里引入了下面几个概念,从而使jobs可以完成复杂的任务。(类似,用户、组 的概念)
1,作业(job)
2,调度(scheduler)
3,程序(program)
4,链(chain)
5,作业类(job_class)
6,窗口(window)
7,窗口组(window_group)
1.4.1 例子:
创建的例子,重点解释每个参数的含义(其实还有其它参数,暂时还用不上,就不做过多了解)
【task1】:用DBMS_SCHDULER.CREATE_JOBE直接创建job
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'update_bb', //job的名字
job_type => 'STORED_PROCEDURE', //job的类型为“执行存储过程”
job_action => 'OPS.SALES_PKG.UPDATE_SALES_SUMMARY', //存储过程的名字
start_date => '28-APR-10 07.00.00 PM Australia/Sydney', //这里把时区去掉也可以!
repeat_interval => 'FREQ=DAILY;INTERVAL=2', /* every other day */
enabled =>true, //启动该job
comments => 'My new job'); //注释
END;
/
1.4.2 参数说明:
·job_name: 顾名思义,每个job都必须有一个的名称
·schedule_name: 如果定义了计划,在这里指定计划的名称
·job_type: 目前支持三种类型:
·PLSQL_BLOCK : PL/SQL块: 需要输入完整的PL/SQL代码;
·STORED_PROCEDURE : 存储过程: 需要指定存储过程的名字;
·EXECUTABLE: 外部程序: (外部程序可以是一个shell脚本,也可以是操作系统级别的指令). 需要输入script的名称或者操作系统的指令名
·enabled: 上面已经说过了,指定job创建完毕是否自动激活
·comments: 对于job的简单说明
1.5 时间格式:
10G 支持两种模式的repeat_interval,一种是PL/SQL表达式,这也是dbms_job包中所使用的,例如SYSDATE+1, SYSDATE + 30/24*60; 另一种就是日历表达式。
例如MON表示星期一,SUN表示星期天,DAY表示每天,WEEK表示每周等等. 下面来看几个使用日历表达式的例子:
repeat_interval => 'FREQ=HOURLY; INTERVAL=2' // 每隔2小时运行一次job
repeat_interval => 'FREQ=DAILY' // 每天运行一次job
freq=daily;byhour=8,13,18;byminute=0;bysecond=0;bydate=0502,0922
根据上面的定义,jobs将会在 05/02 and 09/22 are 8:00 a.m., 1:00 p.m., and 6:00 p.m. 运行。
1.6 测试计划任务中设定的时间 dbms_scheduler.evaluate_calendar_string
SQL> run
1 declare
2 v_start_date timestamp;
3 v_next_date timestamp;
4 v_return_date timestamp;
5 begin
6 v_start_date := trunc(systimestamp);
7 v_return_date := v_start_date;
8 for qkk in 1..15 loop //将来15次运行的时间
9 dbms_scheduler.evaluate_calendar_string('freq = minutely;interval=1',v_start_date, v_return_date,v_next_date
10 ); //测试蓝色部分的运行情况
11 dbms_output.put_line('Next Run on: ' ||
12 to_char(v_next_date,'yyyy-mm-dd hh24:mi:ss')
13 );
14 v_return_date := v_next_date;
15 end loop;
16* end;
运行结果: //每分钟执行一次!
Next Run on: 2009-12-05 00:01:00
Next Run on: 2009-12-05 00:02:00
Next Run on: 2009-12-05 00:03:00
```````
Next Run on: 2009-12-05 00:14:00
Next Run on: 2009-12-05 00:15:00
PL/SQL procedure successfully completed.
二、郑彬的实践:
task1:建立job,让它自己单独运行
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'zbb_job3',
job_type => 'PLSQL_BLOCK', //job的类型是执行sql语句
job_action => 'insert into bb values(1,sysdate);',
start_date => sysdate,
repeat_interval => 'freq = minutely; interval=1', //每分钟执行一次
enabled => true,
comments => 'my love');
END;
/
注意: enabled 默认为false,oracle不会运行此job,所有我们需要enable它
SQL> exec dbms_scheduler.enable ('zbb_job3');
【task2】:建立 scheduler(控制时间和频率),然后给它添加几个jobs(动作)!
【task2.1】 创建scheduler “zbb_schedule”
BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE ( //创建计划任务
schedule_name => 'zbb_schedule',
repeat_interval => 'FREQ=MINUTELY; INTERVAL=5', //执行间隔:每5分钟
comments => 'Every 5 MINUTS');
END;
/
【task2.2】 往“zbb_schedule”里添加一个job “zbb_job2”
BEGIN
DBMS_SCHEDULER.CREATE_JOB ( //创建job 并把它加入到scheduler里面
job_name => 'zbb_job2',
job_type => 'PLSQL_BLOCK',
job_action => 'insert into bb values(1,sysdate);',
schedule_name => 'ZBB_SCHEDULE');
END;
/
【task2.3】 往“zbb_schedule”里添加一个job “zbb_job3”
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'zbb_job3',
job_type => 'PLSQL_BLOCK',
job_action => 'insert into bb values(1,sysdate);',
schedule_name => 'ZBB_SCHEDULE');
END;
/
SQL> select job_name,schedule_name from user_scheduler_jobs;
JOB_NAME SCHEDULE_NAME
------------------------------ ------------------------
ZBB_JOB1 //说明它没有加入任何计划任务(scheduler)
ZBB_JOB2 ZBB_SCHEDULE
ZBB_JOB3
task3: 将“zbb_job1” 加入到 “zbb_schedule”
SQL> begin
2 dbms_scheduler.SET_ATTRIBUTE( //注意这里执行的是修改属性的过程
3 name => 'zbb_job1',
4 attribute => 'schedule_name',
5 value => 'ZBB_SCHEDULE');
6 end;
7 /
PL/SQL procedure successfully completed.
SQL> select job_name,schedule_name from user_scheduler_jobs;
JOB_NAME SCHEDULE_NAME
------------------------------ ---------------------
ZBB_JOB1 ZBB_SCHEDULE
ZBB_JOB2 ZBB_SCHEDULE
ZBB_JOB3
【task4】: 删除 job 及 scheduler
SQL> BEGIN
DBMS_SCHEDULER.DROP_JOB ( //删除job;多个job间用逗号隔开
job_name => 'zbb_job2,zbb_job3',
force => TRUE);
END;
三、常用操作
如何删除job
BEGIN
DBMS_SCHEDULER.DROP_JOB (
job_name => 'zbb_job1');
END;
/
如何删除正在运行的job
BEGIN
DBMS_SCHEDULER.DROP_JOB (
job_name => 'zbb_job2,zbb_job3',
force => TRUE);
END;
/
如何删除scheduler
DBMS_SCHEDULER.DROP_SCHEDULE (
schedule_name => 'zbb_schedule',
force => true ); // 设为true 强制;false。
如何修改job的属性(frequency:频率)
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE (
name => 'zbb_job1',
attribute => 'repeat_interval',
value => 'FREQ=DAILY'); //每天执行一次
END;
/
时间设置
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_sched.htm#ARPLS138
freq=daily;byhour=8,13,18;byminute=0;bysecond=0;bydate=0502,0922
根据上面的定义,jobs将会在 05/02 and 09/22 are 8:00 a.m., 1:00 p.m., and 6:00 p.m. 运行。
start_date,其实是关于时区的设置!
?When start_date is NULL, the Scheduler will determine the time zone for the repeat interval as follows:
1.It will check whether the session time zone is a region name. The session time zone can be set by either:
Issuing an ALTER SESSION statement, for example:
SQL> ALTER SESSION SET time_zone = 'Asia/Shanghai';
Setting the ORA_SDTZ environment variable.
jobs创建时为“disabled”状态。我们必须手动“enable”它。
BEGIN
DBMS_SCHEDULER.ENABLE ('job1, job2, job3,
sys.jobclass1, sys.jobclass2, sys.jobclass3'); /* sys.jobclass1下的所有jobs都会被enable */
END;
/
四、查看job的状态
SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'MY_EMP_JOB1';
JOB_NAME STATE
------------------------------ ---------
MY_EMP_JOB1 DISABLED
Job State Description
disabled The job is disabled.
scheduled The job is scheduled to be executed.
running The job is currently running.
completed The job has completed, and is not scheduled to run again.
stopped The job was scheduled to run once and was stopped while it was running.
broken The job is broken.
failed The job was scheduled to run once and failed.
succeeded The job was scheduled to run once and completed successfully.
chain_stalled The job is of type chain and has no steps running, no steps scheduled to run,
and no event steps waiting on an event, and the chain evaluation_interval is set to NULL.
No progress will be made in the chain unless there is manual intervention.
retry scheduled The job has failed at least once and a retry has been scheduled to be executed.
Job Logs
SELECT JOB_NAME, OPERATION, OWNER FROM DBA_SCHEDULER_JOB_LOG;
Job 运行的详细情况
select log_id, job_name, status, to_char(log_date, 'DD-MON-YYYY HH24:MI') log_date
from dba_scheduler_job_run_details
where job_name = 'MY_JOB14';
如何管理计划任务的权限
GRANT SCHEDULER_ADMIN TO username;
GRANT CREATE JOB TO scott;
GRANT ALTER myjob1 TO scott;
GRANT MANAGE SCHEDULER TO adam;
五、关于job_name的注意事项:
job_name => 'my_job'等价于 job_name => 'My_Job' 和 job_name => 'MY_JOB',
但是和 job_name => '"my_job"' 不同。
六、参考文献
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_sched.htm#ARPLS138
发表评论
-
mysql 定时任务
2015-11-03 09:57 778定时任务 查看event是否开启: show variabl ... -
mysql定时器
2015-08-04 14:01 6065.1以后可以使用 ALTER EVENT `tes ... -
oracle安装成功后,更改字符集
2015-07-23 11:53 641看了网上的文章,乱码有以下几种可能 1. 操作系统的字符集 ... -
运用navicat for mysql实现定时备份
2015-06-05 15:02 1088使用navicat for mysql实现定时备份 首 ... -
Oracle10g数据文件太大,导致C盘空间不够用的解决方法
2015-03-19 15:22 939由于在安装的时候将Oracle安装到了C盘,表空间也创建到了C ... -
mysql 获取第一个汉字首字母
2015-03-18 17:48 652select dmlb, dmz, dmsm1, CHAR ... -
mysql字符串函数(转载)
2014-11-13 12:05 573对于针对字符串位置的操作,第一个位置被标记为1。 AS ... -
MySQL中tinytext、text、mediumtext和longtext详解
2014-11-07 11:37 868、数字类型 类型 范围 说明 ... -
数据库中计算两地图坐标点之间的距离
2014-09-11 14:29 985CREATE OR REPLACE FUNCTION DI ... -
Oracle 取随机数
2014-05-26 11:58 4811、从表中随机取记录 select * from ... -
ORACLE 将BLOB类型转成SQL语句插入
2014-05-06 16:35 1237比如有张表结构如下: create table TestBl ... -
Oracle10g通过DBLink访问MySQL示例
2014-04-22 14:35 6641, 首先在Oracle所在计算机安装MySQL的Client ... -
Oracle执行计划详解
2014-04-22 09:32 668Oracle执行计划详解 ----- 简介: 本文全面 ... -
完全卸载oracle11g步骤
2014-03-06 18:04 581完全卸载oracle11g步骤: ... -
ODI(Oracle Data Integrator)初探
2014-02-10 17:35 0ODI(Oracle Data Integrator ... -
ORACLE10G RMAN 命令
2013-12-02 13:48 1089RMAN 命令 连接到目标数据库(不用恢复目录数据库) ... -
oracle之rman入门指南
2013-12-02 13:43 743这篇文章主要介绍RMAN的常用方法,其中包含了作者一些自己的经 ... -
RMAN参考使用手册(转)
2013-12-02 13:40 981RMAN的概念与体系结构 Oracle 9i RMAN的配置 ... -
数据泵文件
2013-12-02 13:34 816expdp介绍 EXPDP命令行选项 1. ATTACH 该选 ... -
oracle表分区详解
2013-09-22 10:05 697此文从以下几个方面来整理关于分区表的概念及操作: ...
相关推荐
而iSQL*Plus是Oracle提供的一个命令行界面工具,用于执行SQL语句,它在Oracle9i产品中首次引入,并在Oracle10g中得到了增强。尽管iSQL*Plus已经比较老旧,但为了兼容性考虑,其功能在Oracle11g中仍然可用。 接下来...
根据给定的文件信息,以下是对Oracle SQL语句...以上是Oracle SQL语句集锦中的核心知识点,涵盖了数据定义、数据操纵、数据查询、事务控制、权限管理和流程控制等多个方面,对于理解和掌握Oracle数据库的使用至关重要。
本文将深入探讨"ORACLE的SQL语句脚本",特别是涉及的PL/SQL语言,以及如何利用这些脚本来创建表、索引和视图。 首先,我们来理解SQL(Structured Query Language),它是用于管理和操作数据库的标准语言。在Oracle...
在本实验中,我们主要探讨了Oracle数据库中的SQL语句应用,涉及到了表、视图、索引以及序列等核心概念。以下是对这些知识点的详细解释: 1. **创建表**: - 使用`CREATE TABLE`语句创建了一个名为`person`的表,...
xxl-job2.2.0使用oracle数据库,执行此sql,来创建数据表
Oracle SQL是数据库管理和数据查询的重要工具,特别是在Oracle数据库系统中,掌握高效的SQL语句编写技巧至关重要。本资源“oracle经典sql语句练习题和答案”提供了在scott用户下的两个典型表格——emp(员工表)和...
### Oracle SQL语句详解 #### 一、SQL规范与注释 在Oracle SQL中,注释主要用于添加说明性文本,帮助理解SQL脚本的目的和功能。注释有两种基本形式: - **单行注释**:使用`--`,之后的所有内容被视为注释,直到...
### Oracle SQL语句大全教程知识点解析 #### 一、表结构描述 - **知识点1:DESC 命令** - `DESC` 是一个非常有用的命令,用于查看表的结构,包括字段名称、数据类型等。 - **示例:** - `DESC EMP`: 描述名为 `...
查看某个进程正在执行什么SQL语句.sql 查看用户表所占空间的大小.sql 查看系统SGA区状态.sql 查看系统中使用了哪些设备文件.sql 查看系统中每个表空间的使用情况.sql 查看系统中每个表空间的大小.sql 查看系统联接数...
- **SQL语句**: `SELECT job FROM emp;` - **说明**: 查询`emp`表中的所有工作职位。 - **SQL语句**: `SELECT DISTINCT job FROM emp;` - **说明**: 查询`emp`表中所有不同的工作职位。 - **SQL语句**: `SELECT ...
根据提供的文件内容,本文将对其中提及的SQL与Oracle语句进行详细解析,并结合实际应用场景进行...以上是针对SQL和Oracle语句的基础介绍及应用示例。通过掌握这些基本概念和用法,你可以更加高效地管理和操作数据库。
Oracle SQL是数据库管理中不可或缺的一部分,...以上就是Oracle SQL基础操作的一些关键知识点,涵盖了数据查询、条件过滤、排序、分组和函数应用等多个方面。掌握这些技能,可以有效地管理和分析Oracle数据库中的数据。
首先,我们要理解PL/SQL的基本结构,包括声明部分(声明变量、常量、游标等)、执行部分(包含SQL语句和过程)和异常处理部分。PL/SQL的块结构允许我们组织代码,使其更易于理解和维护。 在Oracle Database 11g中,...
根据提供的文件信息,我们可以归纳出一系列与Oracle SQL相关的练习题及其解决方案。这些题目旨在帮助初学者更好地理解并熟练掌握SQL语言的基本操作与高级查询技巧。接下来将逐一解析这些练习题,以便于学习者能深入...
### SQL语句大全详解 #### 一、概述 SQL(Structured Query Language)是一种用于管理关系...以上是对SQL语句大全的详细介绍,涵盖了常见的SQL语句及其使用方法,旨在帮助数据库开发者和管理员更好地管理和操作数据。
通过以上介绍,我们可以了解到 Oracle 10g 数据库的基础知识、安装流程、基本命令以及用户管理等内容。这对于初学者来说是非常实用的信息,能够帮助他们更好地理解和掌握 Oracle 10g 的使用方法。
这个过程通常涉及执行一系列SQL语句来创建必要的表结构。 Quartz的初始化SQL语句主要用于创建存储作业(Jobs)、触发器(Triggers)、日历(Calendars)等信息的数据库表。这些表是Quartz与数据库交互的基础,确保...
### Oracle维护常用SQL语句详解 ...以上SQL语句涵盖了Oracle数据库日常维护中常见的操作,包括数据筛选、定时任务调度、随机数据抽取、日期处理以及空间管理等方面,是Oracle数据库管理员不可或缺的工具箱。