关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL Server »SQL Server数据库和Oracle数据同步方案

    SQL Server数据库和Oracle数据同步方案

    2010-07-22 11:17:00 出处:ITJS
    分享

    下面的文章主要介绍的是SQL Server数据库和Oracle数据库的数据同步方案以及具体的解决过程,SQL Server数据库与Oracle的数据同步方案与其实际的解决流程,其更多内容请参考下文:

    说到同步,其实是靠"作业"定时调度存储过程来操作数据,增,删,改,全在里面,结合触发器,游标来实现,关于作业调度,我使用了5秒运行一次来实行"秒级作业",这样基本就算比较快的"同步"

    我做的是SQL Server往Oracle端同步,先在SQL Server数据库上建立往Oracle端的链接服务器,我用一个视图"封装"了一下链接服务器下的一张表。

    create view v_ora_PUBLISHLASTREC   as   select * from ORACLEDB..ROADSMS.PUBLISHLASTREC   

    ORACLEDB链接服务器名,ROADSMS为表空间名,PUBLISHLASTREC 为数据表名

    然后我们分别在SQL Server数据库要同步的表上建立,insert,delete,update触发器

    脚本如下:

    说明:modiid等于1为insert,2为delete,3为update

    create trigger trg_PUBLISHLASTREC_insert on PUBLISHLASTREC for insert   as   insert into dbo.PublishLastRec_SQL(modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,IsExec)   select '1',SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,'0' from inserted   create trigger trg_PUBLISHLASTREC_update on PUBLISHLASTREC for update   as   insert into dbo.PublishLastRec_SQL(modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,IsExec)   select '3',SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,'0' from inserted   create trigger trg_PUBLISHLASTREC_delete on PUBLISHLASTREC for delete   as   insert into dbo.PublishLastRec_SQL(modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,IsExec)   select '2',SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime,'0' from deleted   

    所有的操作都是把各幻表的数据插入到一张表中,上面统一插入的表为PublishLastRec_SQL,记录下操作的标识,以标识该条记录是插入,删除,还是修改,modiid等于1为insert,2为delete,3为update,字段isexec标识该条记录是否已处理,0为未执行的,1为已执行的

    接着就是最关键的一步,存储过程

    脚本如下:

    ALTER proc pro_PublishLastRec_Sql   as    declare @modiid int   declare @signalguid int   declare @areano numeric(1,0)   declare @signalnote varchar(50)   declare @areanote varchar(50)   declare @publishroadstatus varchar(20)   declare @publishtime varchar(50)   if not exists(select * from PublishLastRec_SQL where IsExec=0)   begin   truncate table PublishLastRec_SQL   return   end   declare cur_sql cursor for   select modiid,SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime from   PublishLastRec_SQL where IsExec=0 order by [id]--IsExec 0为未执行的,1为已执行的   open cur_sql   fetch next from cur_sql into @modiid,@SignalGUID,@AreaNo,@SignalNote,@AreaNote,@PublishRoadStatus,@PublishTime  while @@fetch_status=0   begin   if (@modiid=1) --插入   begin   insert into v_ora_PUBLISHLASTREC(SignalGUID,AreaNo,SignalNote,AreaNote,PublishRoadStatus,PublishTime)   values(@SignalGUID,@AreaNo,@SignalNote,@AreaNote,@PublishRoadStatus,@PublishTime)   end   if (@modiid=2) --删除   begin   delete from v_ora_PUBLISHLASTREC where SignalGUID=@SignalGUID and AreaNo=@AreaNo   end   if (@modiid=3) --修改   begin   update v_ora_PUBLISHLASTREC   set SignalNote=@SignalNote,AreaNote=@AreaNote,PublishRoadStatus=@PublishRoadStatus,   PublishTime=@PublishTime   where SignalGUID=@SignalGUID and AreaNo=@AreaNo   end   update PublishLastRec_SQL   set IsExec=1   where current of cur_sql   fetch next from cur_sql into @modiid,@SignalGUID,@AreaNo,@SignalNote,@AreaNote,@PublishRoadStatus,@PublishTime   end   deallocate cur_sql   

    该存储过程使用游标逐行提取PublishLastRec_Sql记录,根据modiid判断不同的数据操作,该条记录处理完毕后把isexec字段更新为1.

    最后是调用该存储过程的作业,我们先建一个一分钟运行一次的作业,然后在"步骤"的脚本中这样写:

    DECLARE @dt datetime   SET @dt = DATEADD(minute, -1, GETDATE())   WHILE @dt < GETDATE()   BEGIN   EXEC pro_PublishLastRec_Sql  

    这里pro_PublishLastRec_Sql 为你要作业执行的存储过程

    WAITFOR DELAY '00:00:05' -- 等待5秒, 根据你的需要设置即可

    END

    现在,我们即可以实现5秒执行一次该存储过程,做到5秒数据同步。

    以上的相关内容就是对SQL Server数据库与Oracle的数据同步方案及解决过程的介绍,望你能有所收获。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    技术热点

    微软已修复windows 7/windows 8.1媒体中心严重漏洞 用户可下载安

    卸载MySQL数据库,用rpm如何实现

    windows 7中使用网上银行或支付宝支付时总是打不开支付页面

    一致性哈希算法原理设计

    MySQL数字类型中的三种常用种类

    如何解决SQL Server中传入select语句in范围参数

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。