扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
作业类型oracle DBMS_JOB,立即调用的方式
成都创新互联服务项目包括宝塔网站建设、宝塔网站制作、宝塔网页制作以及宝塔网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,宝塔网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到宝塔省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
CALL DBMS_JOB.RUN(JOB_ID);
作业类型是user_scheduler_jobs,立即调用的方式
CALL DBMS_SCHEDULER.RUN_JOB(JOB_NAME);
1.在sql*plus下按回车不行是因为你在sql语句结束时没有以;(分号)结尾,以分号结尾再按回车就可以了
2.如果常用的话,建议使用pl/sql
developer,功能强,易使用
1.语法检查:检查 SQL 拼写是否正确,如果不正确,Oracle 会报语法错误。
2.语义检查:检查 SQL 中的访问对象是否存在。比如我们在写 SELECT 语句的时候,列名写错了,系统就会提示错误。语法检查和语义检查的作用是保证 SQL 语句没有错误。
3.权限检查:看用户是否具备访问该数据的权限。
4.共享池检查:共享池(Shared Pool)是一块内存池,最主要的作用是缓存 SQL 语句和该语句的执行计划。Oracle 通过检查共享池是否存在 SQL 语句的执行计划,来判断进行软解析,还是硬解析。那软解析和硬解析又该怎么理解呢?在共享池中,Oracle 首先对 SQL 语句进行 Hash 运算,然后根据 Hash 值在库缓存(Library Cache)中查找,如果存在 SQL 语句的执行计划,就直接拿来执行,直接进入“执行器”的环节,这就是软解析。如果没有找到 SQL 语句和执行计划,Oracle 就需要创建解析树进行解析,生成执行计划,进入“优化器”这个步骤,这就是硬解析。
5.优化器:优化器中就是要进行硬解析,也就是决定怎么做,比如创建解析树,生成执行计划。
6.执行器:当有了解析树和执行计划之后,就知道了 SQL 该怎么被执行,这样就可以在执行器中执行语句了。
共享池是 Oracle 中的术语,包括了库缓存,数据字典缓冲区等。我们上面已经讲到了库缓存区,它主要缓存 SQL 语句和执行计划。而数据字典缓冲区存储的是 Oracle 中的对象定义,比如表、视图、索引等对象。当对 SQL 语句进行解析的时候,如果需要相关的数据,会从数据字典缓冲区中提取。
如何避免硬解析,尽量使用软解析呢?在 Oracle 中,绑定变量是它的一大特色。绑定变量就是在 SQL 语句中使用变量,通过不同的变量取值来改变 SQL 的执行结果。
用job
oracle定时器调用存储过程
1、创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表
Sql代码
create
table
job_table(run_time
date);
create
table
job_table(run_time
date);
2、创建存储过程
Sql代码
create
or
replace
procedure
job_proc
is
begin
insert
into
job_table
(run_time)
values
(sysdate);
end;
create
or
replace
procedure
job_proc
is
begin
insert
into
job_table
(run_time)
values
(sysdate);
end;
3、创建job,并且指定为一分钟执行一次
Sql代码
declare
job
number;
begin
dbms_job.submit(job,
'job_proc;',
sysdate,
'TRUNC(sysdate,''mi'')
+
1
/
(24*60)');
end/
commit;
declare
job
number;
begin
dbms_job.submit(job,
'job_proc;',
sysdate,
'TRUNC(sysdate,''mi'')
+
1
/
(24*60)');
end/
commit;
4.创建之后自动处于运行状态,我们查询job表,看看我们创建的job
Sql代码
select
job,broken,what,interval,t.*
from
user_jobs
t;
select
job,broken,what,interval,t.*
from
user_jobs
t;
job
broken
what
interval
...
81
N
job_proc;
TRUNC(sysdate,'mi')
+
1
/
(24*60)
...
用job
oracle定时器调用存储过程
创建一个表,为了能清楚看到定时器的运行情况我们创建一个带有日期字段的表
Sql代码
create
table
job_table(run_time
date);
create
table
job_table(run_time
date);
2.创建存储过程
Sql代码
create
or
replace
procedure
job_proc
is
begin
insert
into
job_table
(run_time)
values
(sysdate);
end;
create
or
replace
procedure
job_proc
is
begin
insert
into
job_table
(run_time)
values
(sysdate);
end;
3.创建job,并且指定为一分钟执行一次
Sql代码
declare
job
number;
begin
dbms_job.submit(job,
'job_proc;',
sysdate,
'TRUNC(sysdate,''mi'')
+
1
/
(24*60)');
end/
commit;
declare
job
number;
begin
dbms_job.submit(job,
'job_proc;',
sysdate,
'TRUNC(sysdate,''mi'')
+
1
/
(24*60)');
end/
commit;
4.创建之后自动处于运行状态,我们查询job表,看看我们创建的job
Sql代码
select
job,broken,what,interval,t.*
from
user_jobs
t;
select
job,broken,what,interval,t.*
from
user_jobs
t;
job
broken
what
interval
...
81
N
job_proc;
TRUNC(sysdate,'mi')
+
1
/
(24*60)
...
1.引言
定制定时执行的任务有两种形式,系统级别和数据库级别,
从操作系统级别来讲,
windows系统我们可以使用任务计划来实现,
对于winXP系统,设置步骤如下,开始---设置---控制面板---任务计划,然后添加任务计划,按向导完成配置即可;
对于win7系统,设置步骤如下,点击开始,然后在 搜索程序和文件 框中输入 [任务计划],然后点击出来的任务计划程序,创建一个基本任务即可;
linux系统我们可以使用crontab命令来是实现,
关于crontab命令的使用可以见之前的博客
从数据库级别来讲,我们可以采用数据库的job来实现;
本节主要介绍通过oracle数据库的job来定制一个简单的定时执行任务。本节会采用oracle定制一个定时向一个表中插入语句。
这里聊一下我做这个oracle定时任务的缘由:
项目中要在固定的时间,把一个数据库中某些表的数据同步到另外一个数据库,显然这些工作我不能每次都自己去做,
那么,我要怎么来做呢?这个时候oracle的定时执行任务JOB无疑是我的最佳选择。我把同步的脚本放在一个存储过程中,
然后在固定的时间去执行这个存储过程就OK了。
注意:以下所有的操作都是在sytem用户下执行。采用PL/SQL做的客户端登陆。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流