关闭 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的数据同步方案及解决过程的介绍,望你能有所收获。

    上一篇返回首页 下一篇

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

    别人在看

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    小米路由器买哪款?Miwifi热门路由器型号对比分析

    IT头条

    Synology 对 Office 套件进行重大 AI 更新,增强私有云的生产力和安全性

    01:43

    StorONE 的高效平台将 Storage Guardian 数据中心占用空间减少 80%

    11:03

    年赚千亿的印度能源巨头Nayara 云服务瘫痪,被微软卡了一下脖子

    12:54

    国产6nm GPU新突破!砺算科技官宣:自研TrueGPU架构7月26日发布

    01:57

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    技术热点

    最全面的前端开发指南

    Windows7任务栏桌面下角的一些正在运行的图标不见了

    sql server快速删除记录方法

    SQL Server 7移动数据的6种方法

    SQL Server 2008的新压缩特性

    每个Java程序员必须知道的5个JVM命令行标志

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

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