• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle中通过Job实现定时同步两个数据表之间的数据

mysql 搞代码 4年前 (2022-01-09) 28次浏览 已收录 0个评论

摘要:之前项目中用的触发器来实现数据解析,但是最近客户反应,会报错,所以我们从新设计了一下,通过Oracle里面的Job来解决这一问题,这样就不会对原来的数据表做操作,只对临时表操作,就不会对客户那边的上级服务器产生影响了,详细请看下面: 一:首先

摘要:之前项目中用的触发器来实现数据解析,但是最近客户反应,会报错,所以我们从新设计了一下,通过Oracle里面的Job来解决这一问题,这样就不会对原来的数据表做操作,只对临时表操作,就不会对客户那边的上级服务器产生影响了,详细请看下面:

一:首先建个主表:MBINMSGS(这里的用户是MIP)

CREATE TABLE MIP.MBINMSGS(  ID                            NUMBER(30)      NOT NULL,  MBINMSGS_CLOB_MSG             CLOB,  MBINMSGS_DATE_RECEIVED        DATE,  MBINMSGS_DATE_PROCESSED       DATE,  MBINMSGS_SUBSYSTEM_NAME       VARCHAR2(100 BYTE),  MBINMSGS_SUBSYSTEM_DATE_SENT  DATE,  SERVICENAME                   VARCHAR2(30 BYTE) NOT NULL)

二:其次建个临时表用来存储主表过来的数据:MBINMSGS_TEMP

CREATE TABLE MIP.MBINMSGS_TEMP(  ID                            NUMBER(30)      NOT NULL,  MBINMSGS_CLOB_MSG             CLOB,  MBINMSGS_DATE_RECEIVED        DATE,  MBINMSGS_DATE_PROCESSED       DATE,  MBINMSGS_SUBSYSTEM_NAME       VARCHAR2(100 BYT<div style="color:transparent">本文来源gaodai.ma#com搞##代!^码@网*</div>E),  MBINMSGS_SUBSYSTEM_DATE_SENT  DATE,  SERVICENAME                   VARCHAR2(30 BYTE) NOT NULL)

三:建立同步数据的存储过程:JOB_PRO_TEMP

CREATE OR REPLACE PROCEDURE MIP.JOB_PRO_TEMPAS   TEMP_ID   NUMBER;BEGIN   SELECT   NVL (MAX (ID), 0) INTO TEMP_ID FROM MBINMSGS_TEMP;   INSERT INTO MBINMSGS_TEMP      SELECT   *        FROM   MBINMSGS       WHERE   MBINMSGS.ID > TEMP_ID;   --insert into MBINMSGS_TEST select * from MBINMSGS;   COMMIT;EXCEPTION   WHEN OTHERS   THEN      DBMS_OUTPUT.PUT_LINE ('Exception happened,data was rollback');      ROLLBACK;END;/

四:建立定时执行存储过程的Job:

var job_num number;begin	dbms_job.submit(:job_num,'JOB_PRO_TEMP;',SYSDATE,'sysdate+1/24/60');end;commit;

五:查看新建的Job是否正确运行:

SELECT * FROM USER_JOBS;

六:可能有的人会说我建了Job但是不能运行,那说明你的Job没有运行,我在这个过程中就遇到了这个的问题,最后经过查找,解决了,办法如下:

检查Oracle的JOB运行环境:如果为0表示不运行JOB,Oracle一般默认安装完为10,但是我安装oracle以后就不知道为什么是0。	查看进程数(这里是用system管理员账号登录)	show parameter job_queue_processes;	修改进程数(如果你的是0,才需要按照以下语句修改):	我这里改为10模拟以下这个操作;	在PL/SQL的command窗口中输入以下语句:	alter system set job_queue_processes=10 scope=both;	修改完以后我们查看一下,如果为10那就说明好了,然后你把刚才建的Job删除了,在重新建立一个Job:	show parameter job_queue_processes;

七:删除Job的方法:

exec dbms_job.remove(81);

说明:这里的数字81是对应DBA_JOBS表中当前要删除的JOB记录所在行的JOB字段的值;

更加详细的关于Oracle的Job请看:http://www.cnblogs.com/java-pan/archive/2012/09/16/oracle_job.html


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle中通过Job实现定时同步两个数据表之间的数据

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址