当前位置:首页 » 数据仓库 » 数据库job定时任务
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库job定时任务

发布时间: 2022-05-06 07:38:40

1. oracle的job怎么设置一个过程每5分钟执行一次

dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+5/1440');

每天1440分钟,即一分钟运行test过程一次,分子为5则为每分钟执行一次

2. Oracle job定时任务

1. oracle job可用来完成一些后台数据库定时任务,支持sql、PL/SQL等,具体语法可以参考有关资料,简单的话可以使用TOAD,PLSQL Developer这种工具。
2. select * from table1 for update; 锁定此表其它用户不可以执行写入操作。
3. EM即Enterprise Manager,代替8i中Enterprise Manager Console的一个BS工具,浏览器中访问http://localhost:5500/em,首先要安装配置正确,服务开启,可以用这个工具完成很多数据库管理维护的工作,非常强大的工具,
不知道我的回答是否全面,具体的需要你查找手册仔细研究的。

3. 如何实现一个定时任务来对数据库中的数据进行操作

由于公司的新接得项目要实现一批数据的同步,通过外围厂商提供的一系列各个系统的webervices接口定时将数据同步到我们开发的共享平台上,由于厂商系统的数据是不断在变化以及各系统闲忙时的特点,所以定时同步任务的执行必须在时间上能够动态配置。因此,我们需要动态的从数据库中获取配置信息,以改变各个定时间的执行规则,废话不说了,上代码:(我利用的是ssh框架直接写的,框架搭建不再叙述)
1.创建数据表(我用的是MySQL)

[sql] view plain
DROP TABLE IF EXISTS `t_wsdoc`;
CREATE TABLE `t_wsdoc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`triggername` varchar(50) NOT NULL,
`jobdetailname` varchar(50) N

4. Oracle通过job定时创建表

在项目中,经常会遇到需要定时完成的任务,比如定时更新数据,定义统计数据生成报表等等,其实这些事情都可以使用Oracle的Job来完成。下面考试大就结合我们实验室项目实际,简单介绍一下在Oracle数据库中通过Job完成自动创建表的方法。整个过程总共分为两步。虽然整个过程都非常简单,但是对于初学Oracle的生手还是有很多地方需要注意的。首先介绍一下,创建该JOB的背景,因为每天更新的直播和点播节目信息比较多,为了方便处理,需要每天创建一张表来记录更新的节目信息,当前数据库中已经有一张tbl_programme的表,每天创建的表的字段需要同tbl_programme保持一致,每天新创建的表的名称格式为tbl_programme_日期(例如:tbl_programme_20090214)规定每天晚上1点钟生成该天的新表。第一步:创建一个执行创建操作的存储过程在这一步首先要解决的问题就是构造表名。在Oracle中格式话输出时间可以用to_char函数来处理,例如:SQL> select to_char(sysdate, ’yyyy/mm/dd hh24:mi:ss’) from al;TO_CHAR(SYSDATE,’YYYY/MM/DDHH2------------------------------2009/02/14 17:22:41以上SQL格式化输出了时间,要得到我们所需要的格式直接修改一下SQL即可SQL> select to_char(sysdate, ’yyyymmdd’) from al;TO_CHAR(SYSDATE,’YYYYMMDD’)---------------------------20090214得到时间格式字符串后我们就可以将表名的前缀和时间连接在一起形成完整的表名。这里需要注意,在Oracle中链接两个字符串需要使用‘||’符号,而在Sql Server中直接使用‘+’号就可以了,因为我以前一直在Sql Server下编程,好久都没编写Oracle的SQL所以费了很大的功夫才发现这个问题。完整的Sql就是SQL> select ’tbl_programme_’ || to_char(sysdate, ’yyyymmdd’) from al;’TBL_PROGRAMME_’||TO_CHAR(SYSD------------------------------tbl_programme_20090214接下来就是创建表的代码了,因为新表需要tbl_programme保持一致,所以直接CTAS来创建表那是非常适合的了,代码如下:Create table tablename as select * from tbl_programme如果需要指定一个TableSpace则将该SQL做适当修改:Create table tablename tablespace p2p as select * from tbl_programme所以整个创建存储过程的SQL就是create or replace procere sp_createtab_tbl_programmeAuthid Current_Userastabname varchar(200);beginselect ’TBL_PROGRAMME_’ || to_char(sysdate, ’yyyymmdd’) into tabname from al;--create table tabname as select * from tbl_programme where 1 != 1;execute immediate ’create table ’ || tabname ||’ tablespace p2p as select * from tbl_programme where 1 != 1’;commit;end;/这里还需要注意一下在Oracle里面如果要对一个变量赋值的话有两种方式:(1) 使用:=进行赋值(2) 使用select ‘xjkxj ’ into 变量名称 from tabname另外,在存储过程中定义变量的时候一般放在as/is后begin前面。在存储过程一般是不能直接使用create table,truncate table这类似的语句的,如果要使用这些语句必须使用excute immediate + 所要执行的sql语句来实现。注意上面用红色标志的语句:Authid Current_User这个语句比较重要,如果我们在创建存储过程的时候不添加这条语句执行该存储过程将不会成功,原因是默认情况向存储过程是没有Create table等权限的,即使当前用户有DBA的权限也不行,如果存储过程中存在创建表的操作,可以有以下两种方式来解决该问题。(1) 显示的赋予该用户Create table的权限,grant create table to user.(2) 在存储过程中使用Authid Current_User 标识使用当前用户的权限。第二步:创建JOB创建JOB就比较简单了,下面就是创建JOB的代码每天晚上1电job启动一次,执行sp_createtab_tbl_programme存储过程。VARIABLE testjobid number;beginsys.dbms_job.submit(:testjobid,’sp_createtab_tbl_programme;’,trunc(sysdate+1)+1/24,’trunc(sysdate+1)+1/24’);commit;end;/这里需要注意的是,在submit方法的前面一定要先定义job这个变量,另外,submit方法的第二个参数是一个存储过程的名,记得在后面添加“:”号,在next_date是一个时间类型变量而不是一个字符串,所以需要注意不要把它当成字符串,不需要对该参数加引号。最后一个参数interval是一个字符串类型,记得添加引号。最常见的错误如下图所示:ORA-01008: not all variables bound就是没有定义变量的意思。一定记的在使用submit方法时定义jobid变量。下面是常有的设置Interval的方法:2 每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + 8/24�0�5 每天:trunc(sysdate+1)�0�5 每周:trunc(sysdate+7)�0�5 每月:trunc(sysdate+30)�0�5 每个星期日:next_day(trunc(sysdate),’SUNDAY’)�0�5 每天6点:trunc(sysdate+1)+6/24�0�5 半个小时:sysdate+30/1440需要用到的完整SQL如下:------------------------------------------------------- Export file for user P2P ---- Created by Administrator on 2009-2-14, 15:45:18 -------------------------------------------------------spool gjgdp2p(v1.3).logpromptprompt Creating procere SP_CREATETAB_TBL_PROGRAMMEprompt =============================================promptcreate or replace procere sp_createtab_tbl_programmeAuthid Current_Userastabname varchar(200);beginselect ’TBL_PROGRAMME_’ || to_char(sysdate, ’yyyymmdd’) into tabname from al;--create table tabname as select * from tbl_programme where 1 != 1;execute immediate ’create table ’ || tabname ||’ tablespace p2p as select * from tbl_programme where 1 != 1’;commit;end;/VARIABLE testjobid number;beginsys.dbms_job.submit(:testjobid,’sp_createtab_tbl_programme;’,trunc(sysdate+1)+1/24,’trunc(sysdate+1)+1/24’);commit;end;/spool off

5. oracle中job如何设定每小时的第10分钟执行

可以实现的,先创建一个存储过程,在创建Job。
我们在项目开发中,常常会有一些复杂的业务逻辑。使用oracle的存储过程,可以大大减少java程序代码的编写工作量,而且存储过程执行在数据库上,这样可以利用oracle的良好性能支持,极大地提高程序执行效率和稳定性。定时执行存储过程,就要用到job。
先创建一个存储过程:

SQL> create or replace procere MYPROC as
2begin
3update table_name set date= 'TRUNC(sysdate,'hh24') +1/24+ 10 / (24*60)';
4end;
5/

创建JOB :
SQL> variable job1 number;
SQL>
SQL> begin
2 dbms_job.submit(:job1,'MYPROC;to_date('00:10:00','HH:MI:SS'),'sysdate+1/24');//每天24h,即每小时运行myproc过程一次
3end;
4/

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

6. 关于PLSQL中JOB定时任务的问题

给你一个我自己写的完整的(用PLSQL->文件->新建->测试窗口)
DECLARE
jobno BINARY_INTEGER;
instno number;
p_job_queue_processes VARCHAR2(512);
p_interval VARCHAR2(200);
p_next_date DATE;
s_next_date VARCHAR2(50);
begin
select instance_number into instno from v$instance;
-- jobno := 1512; 手工指定jobno
p_interval := 'trunc(sysdate,''HH24'')+(SELECT TRUNC(TO_CHAR(sysdate,''MI'')/30)/48 FROM DUAL)'; -- 间隔

p_next_date := TO_DATE('20080910 13:45:00','RRRRMMDD HH24:MI:SS');--trunc(sysdate,'HH24') + 1/4/24; -- 下次执行时间,date类型
s_next_date := to_char(p_next_date,'RRRR-MM-DD HH24:MI:SS'); -- 下次执行时间,字符串类型
/* -- 创建新job
dbms_job.submit(jobno
, 'statspack.snap(7);'
, p_next_date -- trunc(sysdate,'HH24') + 1/24
, p_interval -- 'trunc(sysdate,''HH24'')+(SELECT TRUNC(TO_CHAR(sysdate,''MI'')/30)/48 FROM DUAL)';
, TRUE, instno);
*/
dbms_job.change(jobno, '要执行的程序名称;' -- 比如statspack.snap; -- 收集统计信息
, p_next_date
, p_interval
);--, TRUE, instno);
-- dbms_job.remove(jobno); --jobno -- 移除job

-- commit;
end;
--- 完成后,可以用select * from dba_jobs dj where dj.jobno=xxx 检查状态

7. 关于oracle数据库定时任务问题

这种job方法已经废弃 建议用scheler +program 完成

begin
sys.dbms_scheler.create_schele(schele_name=>'TEST',
start_date=>to_date('25-03-201700:00:00','dd-mm-yyyyhh24:mi:ss'),
repeat_interval=>'Freq=yearly;ByMonth=jun;ByMonthDay=25',
end_date=>to_date(null),
comments=>'test');
end;
/

8. 利用oracle提供的dbms_job.submit定时任务功能,可以对数据库进行备份吗

你好!
当然可以,这是9i之前的功能,计时不准,10g以后,都用scheler了
如有疑问,请追问。

9. oracle 定时任务问题,定时任务没有成功 定时任务如下:

1.引言
定制定时执行的任务有两种形式,系统级别和数据库级别,
从操作系统级别来讲,
windows系统我们可以使用任务计划来实现,
对于winXP系统,设置步骤如下,开始---设置---控制面板---任务计划,然后添加任务计划,按向导完成配置即可;
对于win7系统,设置步骤如下,点击开始,然后在 搜索程序和文件 框中输入 [任务计划],然后点击出来的任务计划程序,创建一个基本任务即可;
linux系统我们可以使用crontab命令来是实现,
关于crontab命令的使用可以见之前的博客(http://www.2cto.com/os/201209/155632.html);

从数据库级别来讲,我们可以采用数据库的job来实现;
本节主要介绍通过oracle数据库的job来定制一个简单的定时执行任务。本节会采用oracle定制一个定时向一个表中插入语句。
这里聊一下我做这个oracle定时任务的缘由:
项目中要在固定的时间,把一个数据库中某些表的数据同步到另外一个数据库,显然这些工作我不能每次都自己去做,
那么,我要怎么来做呢?这个时候oracle的定时执行任务JOB无疑是我的最佳选择。我把同步的脚本放在一个存储过程中,
然后在固定的时间去执行这个存储过程就OK了。
注意:以下所有的操作都是在sytem用户下执行。采用PL/SQL做的客户端登陆。

2.项目环境
安装oracle10g,然后再安装PL/SQL,然后用管理员用户system登陆,
打开SQL Window输入图中的SQL语句,操作环境详细的信息如下:

3.环境准备
(1)新建一个表,命令为test,建表语句如下:
test0916
1 create table system.test0916 2 ( 3 seq NUMBER(2) PRIMARY KEY, 4 seqtime DATE 5 )
在SQL窗口执行以上语句;
(2)新建一个存储过程,命名为test_proc,存储过程的语句如下:
test_proc

1 CREATE OR REPLACE PROCEDURE test_proc IS 2 BEGIN 3 INSERT INTO SYSTEM.TEST0916(SEQ, SEQTIME) VALUES(NVL((SELECT MAX(SEQ) FROM SYSTEM.TEST0916) + 1, 0), SYSDATE); 4 COMMIT; 5 EXCEPTION 6 WHEN OTHERS THEN 7 DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback'); 8 ROLLBACK; 9 END;

在SQL Window窗口中执行以上存储过程,执行完成以后,查看Objects下的Proceres菜单,可以看到新建的存储过程如图:

TEST_PROC前面的图标没有红色的标记,表示存储过程正常;
(3)检查oracle的JOB运行环境
我这里遇到的只是要检查一下oracle的JOB队列的进程数,如果为0表示不运行JOB,
虽然网上说一般默认为10,但是我安装oracle以后就不知道为什么是0。
查看进程数:

修改进程数(如果你的是0,才需要按照以下语句修改):
我这里已经改为10,假如我要改为11来模拟以下这个操作;
在PL/SQL的command窗口中输入以下语句:
修改进程数
alter system set job_queue_processes=10 scope=both;
运行截图如下:

修改完以后我们这查看一下:

看到了吧,我这是是改为11了吧。
补充说明:
网上有的说修改这个进程数可以修改oracle初始文件,最开始我是找到这个初始文件的位置,然后用notepad++打开后去修改,
保存以后我重启oracle服务和电脑,但是发现此时用PL/SQL登陆oracle的时候,一直报无法识别指定的字符串,这里要说明这样操作不行。
这里有个问题,我们要如何找到oracle初始文件的位置?可以在PL/SQL的command window窗口中执行以下语句看到:

我当时用notepad++修改的是下图阴影部分的内容:

*.job_queue_processes=11

4.定制定时执行任务
假设我们要每隔两分钟向表test0916中插入一条记录,这里我们只需要每隔2分钟执行一次存储过程test_proc即可。
在PL/SQL的command window输入以下语句:
job
1 var job_num number; 2 begin 3 dbms_job.submit(:job_num,'test_proc;',SYSDATE,'sysdate+2/24/60'); 4 end;

执行过程的截图如下:

执行完成以后记得点击PL/SQL的提交按钮;

5.查看执行结果
(1)查看我们新增的JOB是否成功
通过查看DBA_JOBS表中的WHAT字段可以看到最后一条记录即使我们刚新建的定时任务;

(2)查看test0916表是否插入了数据

6.其他相关说明
(1)如何删除一个JOB?
在PL/SQL的command window执行以下语句:
exec dbms_job.remove(81);
说明:这里的数字81是对应DBA_JOBS表中当前要删除的JOB记录所在行的JOB字段的值;

(2)submit的各个参数是什么意思?

使用Submit()过程,工作被正常地计划好。 这个过程有五个参数:job、what、next_date、interval与no_parse。 PROCEDURE Submit ( job OUT binary_ineger, What IN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE)
job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。 前面有一个双引号,在SQL windwo中没有显示,拷贝到command窗口就可以显示出来了; what参数是将被执行的PL/SQL代码块。这里是存储过程的名称,后面有一个英文状态下的分号不能掉了; next_date参数指识何时将运行这个工作。
interval参数何时这个工作将被重执行。 这里加号、括号都必须在英文状态下输入; no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。

(3)定时执行的时间间隔是怎么设置的?
这里大家可以去网络,网上搜索一般都能找到满足你需求的,主要是结果TRUNC函数来实现。