JOB调用存储过程如何实现存储过程的并发执行? 我现在使用一个JOB每隔3分钟执行一个存储过程,用来执行查询和建立临时表,但是,这个存储过程的调用并非并发的,如何上一次调用的查询和建表操作没有结束,要一直等到上一次操作结束(哪怕是过了3分钟)JOB才对该存储过程进行下一次调用,如果我换个方式,同时建立多个JOB,比如三个,每个都是每3分钟执行一次,每个JOB之间相隔1分钟,这样是否可以实现存储过程的并发执行呢?如果要等待上次执行结束才进行下一次调用,效率就太低了。谢谢各位了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个要看你操作的是什么数据?如果每隔一分钟执行JOB一次,但如果上次JOB未执行完,下一个JOB又开始了,同一数据可能被两个JOB同时查到,如果进行INSERT INTO操作,可能会插入重复的数据; 我没有DML操作,存储过程中全部是select操作,并且我进行了并发控制,不会对同一行数据同时进行操作。 以前的公司就出现过Job交叉调用,导致死锁,结果整个DB当掉了. 过程在三分钟内肯定没法完成,我最耗时间的一个操作是create table as select * from ,由于数据量过大,而且索引也没建好,所以有时候操作需要几个小时。但是,根据我的观察,job的上一次调用如果没有完成,是不会进行下一次调用的。这是因为存储过程对同一个表进行了update操作。在update时,该表被锁,要等到commit,这个锁才被释放。但是,在update的过程中,我使用了一个标示字段,在操作完成后这个标示字段被update了,所以,存储过程不可能同时对一个表进行插入操作,也不可能同时去update同一行记录。我现在想知道,为什么我的存储过程没办法并发执行呢?update操作的那个表,在create table as之前就commit了,那个表的锁应该被释放了才对。 每3分钟做一次 create table as select * from ..... ???为什么不直接使用临时表,只要创建一次就好了, create temporary table xxx .....还不需要自己设计表之间的隔离,临时表就已经设置好了session之间的隔离楼主说说具体为什么要这么做,或者到底要做什么吧 我的数据需要在临时表中保存一段时间的,比如一年或者一个月,但temporary table在会话结束或者commit后数据就被删除了。 大神,求助 OracleMTSRecoveryService 语法检查! 自动备份怎么做? 如何修改storage中的参数值 关于where条件中的条件判断,麻烦各位大哥看下 三个问题? 动态创建表后,添加记录问题? 100分相送,征求意见! 我的ORACLE8。16安装完后,用GHOST刻到另一台计算机上。令一台的计算机标志作了更改,ORACLE应做什么相应的更改?谢谢,在线等? 关于DDL操作会自动提交事务的问题!!! 存储过程在被JOB调用时,重新编译被调用的存储过程,是否需要先断掉JOB并KILL掉正在执行的过程?
如果每隔一分钟执行JOB一次,但如果上次JOB未执行完,下一个JOB又开始了,同一数据可能被两个JOB同时查到,如果进行INSERT INTO操作,可能会插入重复的数据;
但是,根据我的观察,job的上一次调用如果没有完成,是不会进行下一次调用的。
这是因为存储过程对同一个表进行了update操作。在update时,该表被锁,要等到commit,这个锁才被释放。
但是,在update的过程中,我使用了一个标示字段,在操作完成后这个标示字段被update了,所以,存储过程不可能同时对一个表进行插入操作,也不可能同时去update同一行记录。
我现在想知道,为什么我的存储过程没办法并发执行呢?
update操作的那个表,在create table as之前就commit了,那个表的锁应该被释放了才对。
为什么不直接使用临时表,只要创建一次就好了, create temporary table xxx .....
还不需要自己设计表之间的隔离,临时表就已经设置好了session之间的隔离楼主说说具体为什么要这么做,或者到底要做什么吧