Oracle不同数据库之间同步处理方案
背景:项目中遇到的问题,需要二区两台数据库之间同步一些表,以及导出sql文件同步至三区数据库。1 SQL文件目录
新建SQL文件生成的目录D:mptmsudataDNLTBDIR。
二区数据库中执行下列语句: create or replace directory DNL_TB_DIR as "D:mptmsudataDNLTBDIR";2 数据库修改
1)新建二区数据库服务器到二区数据库服务器的数据库DATABASE LINK文件。
二区数据库中执行下列语句: create public database link XQDNJL connect to YPTMS using "192.168.10.8/mptmsu";
2)二区数据库服务器新建表DNL_TBJL。
二区数据库中执行下列语句: -- Create table create table DNL_TBJL ( id VARCHAR2(25) not null, tables VARCHAR2(25) not null, czlx VARCHAR2(25), sql VARCHAR2(2000) not null, time DATE not null, bak VARCHAR2(128) not null ) tablespace MPTMSU pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ); -- Add comments to the columns comment on column DNL_TBJL.id is "ID"; comment on column DNL_TBJL.tables is "同步表名"; comment on column DNL_TBJL.czlx is "操作类型"; comment on column DNL_TBJL.sql is "SQL内容"; comment on column DNL_TBJL.time is "操作时间";3 触发器
在二区数据库服务器说新建相关表的触发器,触发器实现的功能是东区2区向西区直接通过DBLINK直接执行;东区2区向东区3区通过生成SQL文件到D:mptmsudataDNLTBDIR目录下;触发器的每次操作都记录到表格DNL_TBJL(id, tables,czlx, SQL, TIME, BAK)内。
下面以AEMTINFO表为例,具体的触发器代码如下:create or replace trigger SYN_AEMTINFO after insert or update or delete on AEMTINFO for each row /*------------------------------------------------------------------ 功 能:东区2区向西区、东区3区传送数据库变化 功能说明:东区2区向西区直接通过DBLINK直接执行;东区2区向东区3区通过生成SQL文件到 D:mptmsudataDNLTBDIR目录下;触发器的每次操作都记录到表格DNL_TBJL (id, tables,czlx, SQL, TIME, BAK)内。 -------------------------------------------------------------*/ declare integrity_error exception; errno integer; errmsg char(200); tmp varchar2(1000); tmpval varchar2(1000); val varchar2(4000); id varchar2(20); dnltb utl_file.file_type; begin if inserting then insert into AEMTINFO@XQDNJL (EMTID, SID, SNAME, STIME, ETIME, INTERVAL, EARGS, ADDDATE, REMARK, FLAG) values (:NEW.EMTID, :NEW.SID, :NEW.SNAME, :NEW.STIME, :NEW.ETIME, :NEW.INTERVAL, :NEW.EARGS, :NEW.ADDDATE, :NEW.REMARK, :NEW.FLAG); select "insert into AEMTINFO (EMTID,SID,SNAME,STIME,ETIME,INTERVAL,EARGS,ADDDATE,REMARK,FLAG) values (" ||""""||:NEW.EMTID||""""||"," ||""""||:NEW.SID||""""||"," ||""""||:NEW.SNAME||""""||"," ||"to_date("||""""||to_char(:NEW.STIME,"yyyy-mm-dd hh24:mi:ss")||""""||","||"""yyyy-mm-dd hh24:mi:ss"""||")," ||"to_date("||""""||to_char(:NEW.ETIME,"yyyy-mm-dd hh24:mi:ss")||""""||","||"""yyyy-mm-dd hh24:mi:ss"""||")," ||""""||:NEW.INTERVAL||""""||"," ||""""||:NEW.EARGS||""""||"," ||"to_date("||""""||to_char(:NEW.ADDDATE,"yyyy-mm-dd hh24:mi:ss")||""""||","||"""yyyy-mm-dd hh24:mi:ss"""||")," ||""""||:NEW.REMARK||""""||"," ||""""||:NEW.FLAG||""""||");" into val from dual; select (select to_char(sysdate, "yyyyMMddHH24miss") from dual) || lpad(DNL_TBXL.nextval, 3, "0") into id from dual; insert into DNL_TBJL (id, tables,czlx, SQL, TIME, BAK) values (id,"AEMTINFO", "INSET", val, sysdate, id); dnltb := utl_file.fopen("DNL_TB_DIR", "INSET-"||"AEMTINFO-"||id || ".sql", "w"); utl_file.put_line(dnltb, val); utl_file.put_line(dnltb, "commit;"); utl_file.put_line(dnltb, "exit;"); utl_file.fclose(dnltb); elsif updating then update AEMTINFO@XQDNJL set EMTID = :NEW.EMTID, SID = :NEW.SID, SNAME = :NEW.SNAME, STIME = :NEW.STIME, ETIME = :NEW.ETIME, INTERVAL = :NEW.INTERVAL, EARGS = :NEW.EARGS, ADDDATE = :NEW.ADDDATE, REMARK = :NEW.REMARK, FLAG = :NEW.FLAG where emtid = :OLD.emtid; select "update AEMTINFO set " ||"EMTID = "||""""||:NEW.EMTID||""""||"," ||"SID = "||""""||:NEW.SID||""""||"," ||"SNAME = "||""""||:NEW.SNAME||""""||"," ||"STIME = "||"to_date("||""""||to_char(:NEW.STIME,"yyyy-mm-dd hh24:mi:ss")||""""||","||"""yyyy-mm-dd hh24:mi:ss"""||")," ||"ETIME = "||"to_date("||""""||to_char(:NEW.ETIME,"yyyy-mm-dd hh24:mi:ss")||""""||","||"""yyyy-mm-dd hh24:mi:ss"""||")," ||"INTERVAL = "||""""||:NEW.INTERVAL||""""||"," ||"EARGS = "||""""||:NEW.EARGS||""""||"," ||"ADDDATE = "||"to_date("||""""||to_char(:NEW.ADDDATE,"yyyy-mm-dd hh24:mi:ss")||""""||","||"""yyyy-mm-dd hh24:mi:ss"""||")," ||"REMARK = "||""""||:NEW.REMARK||""""||"," ||"FLAG = "||""""||:NEW.FLAG||""""|| "where emtid = "||:OLD.emtid||";" into val from DUAL; select (select to_char(sysdate, "yyyyMMddHH24miss") from dual) || lpad(DNL_TBXL.nextval, 3, "0") into id from dual; insert into DNL_TBJL (id, tables,czlx, SQL, TIME, BAK) values (id,"AEMTINFO", "UPDATE", val, sysdate, id); dnltb := utl_file.fopen("DNL_TB_DIR", "UPDATE-"||"AEMTINFO-"||id || ".sql", "w"); utl_file.put_line(dnltb, val); utl_file.put_line(dnltb, "commit;"); utl_file.put_line(dnltb, "exit;"); utl_file.fclose(dnltb); elsif deleting then delete from AEMTINFO@XQDNJL where emtid = :OLD.emtid; tmp := :OLD.emtid; tmpval := "delete from AEMTINFO where emtid="; val := concat(tmpval, tmp || ";"); select (select to_char(sysdate, "yyyyMMddHH24miss") from dual) || lpad(DNL_TBXL.nextval, 3, "0") into id from dual; insert into DNL_TBJL (id, tables,czlx, SQL, TIME, BAK) values (id,"AEMTINFO", "DELETE", val, sysdate, id); dnltb := utl_file.fopen("DNL_TB_DIR", "DELETE-"||"AEMTINFO-"||id || ".sql", "w"); utl_file.put_line(dnltb, val); utl_file.put_line(dnltb, "commit;"); utl_file.put_line(dnltb, "exit;"); utl_file.fclose(dnltb); end if; exception when integrity_error then raise_application_error(errno, errmsg); end; 4 sql文件入库批处理
通过Windows系统自带的计划任务执行下面批处理实现数据入库
1)三区区数据库服务器新建表DNL_SQLJL。
三区数据库中执行下列语句: -- Create table create table DNL_SQLJL ( id VARCHAR2(25), tables VARCHAR2(25), czlx VARCHAR2(25), sqlml VARCHAR2(2000), sql VARCHAR2(2000), time DATE, bak VARCHAR2(128) ) tablespace MPTMSU pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ); -- Add comments to the columns comment on column DNL_SQLJL.id is "ID"; comment on column DNL_SQLJL.tables is "同步表名"; comment on column DNL_SQLJL.czlx is "操作类型"; comment on column DNL_SQLJL.sqlml is "SQL文件目录"; comment on column DNL_SQLJL.sql is "SQL内容"; comment on column DNL_SQLJL.time is "操作时间";
2)三区区数据库服务器新建计划任务定期执行DQ3QRK-ZXWJ.bat批处理。
3)DQ3QRK-ZXWJ.bat批处理调用DQ3QRK-ZXSQL.bat来执行入库操作。
DQ3QRK-ZXWJ.bat语句如下: @echo off REM set Log=logDQ3QRKSQL-%date:~0,4%.%date:~5,2%.%date:~8,2%.log REM rem 第一步 dir D:mptmsudataDNLTBDIR* /b /a|findstr ".sql>" >D:mptmsudataDNLTBDIRDQ3QRKWJ.TXT rem cd /d %~dp0 && for /f "tokens=1-3 delims=-. " %%i in (D:mptmsudataDNLTBDIRDQ3QRKWJ.TXT) do %~dp0DQ3QRK-ZXSQL.bat %%i %%j %%k >>%Log% 2>&1 pause exit
DQ3QRK-ZXSQL.bat语句如下: @echo off REM REM set Log=logDQ3QRKSQL-%date:~0,4%.%date:~5,2%.%date:~8,2%.log set RQ=%date:~0,4%%date:~5,2% set SQLWJ=D:mptmsudataDNLTBDIR%1-%2-%3.sql set SQLJL=D:mptmsudataDNLTBDIRsqljl.sql REM sqlplus -s yptms/yptms@mptmsu @%SQLWJ% for /f "tokens=1 delims=;" %%i in (%SQLWJ%) do (set tmpsql=%%i goto aa) :aa echo insert into DNL_SQLJL (ID,TABLES,CZLX,SQLML,SQL,TIME) values("%3","%2","%1","D:mptmsudataDNLTBDIR%RQ%%1-%2-%3.sql","%tmpsql%",SYSDATE); >%SQLJL% echo commit; >>%SQLJL% echo exit; >>%SQLJL% sqlplus -s yptms/yptms@mptmsu @D:mptmsudataDNLTBDIRsqljl.sql del /f /q D:mptmsudataDNLTBDIRsqljl.sql IF NOT EXIST D:mptmsudataDNLTBDIR%RQ% md D:mptmsudataDNLTBDIR%RQ% move /Y %SQLWJ% D:mptmsudataDNLTBDIR%RQ%
数字电网建设是数字中国建设的基础性环节数字化转型是实现电网变革的必由之路,当前,引领电网数字化转型的一个重要标志是基于云平台的互联网人工智能大数据物联网等新技术的深度应用。从全球范围看,世界主要国家均把能源技术视为新一
农村电商催生新产业农村电商拓展了乡村既有产业的网络销售。可以实现由一个农户的特色产品变为一个当地的特色产业,有力地带动了产业发展和农民增收。从实践来看,农村电商促进了乡村原有产业的市场拓展,加快了它
Ubuntu18。04下部署k8s一更新Ubuntu源mvetcaptsources。listetcaptsources。list。bakcatetcaptsources。list。bakgrepvgrepv34s
IBM和AWS扩大云合作聚焦于软件战略IBM今天宣布与AWS扩大合作伙伴关系,让客户更轻松地在AWS云平台上运行IBM的软件。IBM拥有广泛的涵盖数十个类别的软件产品组合,其中有30多种产品可以通过AWSMarketp
田间地头显身手北斗系统引领农业精细化来源人民网原创稿编者按北斗卫星导航系统是支撑我国经济社会发展的重要空间基础设施,北斗三号系统开通后,提高北斗产业支撑能力扩大北斗应用普及率已成为促进北斗产业发展保障国家安全的重要任
汽车早报马斯克称特拉斯最近没有在中国新增工厂计划丰田2021财年营业利润达日企史上最高水平IDC一季度国内乘用车L2级自动驾驶渗透率达23。25月11日,据IDC最新发布中国自动驾驶汽车市场数据追踪报告显示,2022年一季度,我国乘用车市场中,L2级自动驾驶新车渗透率达
杨开忠第四产业,未来已来当前,新一轮科技浪潮正在席卷全球,突破性技术集群不断涌现,产业形态以智能化网络化数字化为核心特征,正在开启前所未有的巨变。可以说,世界经济即将到达新的历史分流节点,正如经济史上农业
田间地头显身手北斗系统引领农业精细化来源人民网每年五月是苹果幼果的发育时期,在山东省淄博市沂源县南麻街道中以智慧果园内,几位新农人并没有检查幼果的生长情况,而是弯腰检查埋在田里的探测器。与传统果园不同,通过数字化手段
java实战之仿天猫商城系统的实现这篇文章主要介绍了如何利用Java制作一个基于SSM框架的迷你天猫商城系统,文中采用的技术有JSPSpringbootSpringMVCSpring等,需要的可以点击下方链接。Ja
性价比首选!机械师M7二代双模游戏鼠标上手体验鼠标,已经成为日常办公最基础的单元,它的好坏性能直接影响我们工作的心情与效率。机械师这个品牌相信大家都很熟悉了,之前我们介绍过它家的游戏手柄和游戏耳机,性价比都非常高。今天我就给大
荣耀70量产,天玑9000骁龙7Gen1天玑8100,还有12512G售价不高现如今新荣耀已涅槃重生,可以说荣耀应该是目前国内发展速度最快的手机厂商之一,尤其是在推出荣耀50系列荣耀60系列之后,凭借着不错的销量成绩,以略低于vivo的销量,环比上涨54。4