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

    上一篇返回首页 下一篇

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

    别人在看

    Edge浏览器百度被劫持/篡改怎么办,地址后边跟着尾巴#tn=68018901_7_oem_dg

    Google Chrome 在 iPhone 上新增了 Safari 数据导入选项

    Windows 11专业版 KMS工具激活产品密钥的方法

    DEDECMS安全策略官方出品

    Microsoft Text Input Application 可以关闭吗?

    新版本QQ如何关闭自带的浏览器?

    C++编程语言中continue的用法和功能,附举例示范代码

    c++ map 的数据结构、基本操作以及其在实际应用中的使用。

    C语言如何避免内存泄漏、缓冲区溢出、空指针解引用等常见的安全问题

    C语言中的break语句详解

    IT头条

    马斯克2026最新采访总结:2040年,全球机器人数量将突破100亿台

    23:52

    专家解读|规范人工智能前沿业态健康发展的新探索:解读《人工智能拟人化互动服务管理暂行办法》

    00:54

    用至强 6高存力搞定MoE卸载!

    17:53

    美国将允许英伟达向中国“经批准的客户”出售H200 GPU

    02:08

    苹果与微信就15%手续费达成一致?腾讯未置可否

    22:00

    技术热点

    PHP 和 Node.js 的10项对比挑战

    Javascript闭包深入解析及实现方法

    windows 7、windows 8.1手动增加右键菜单功能技巧

    MYSQL出错代码大汇总

    windows 7假死机怎么办 windows 7系统假死机的原因以及解决方法

    Ubuntu(Linux)下配置IP地址的方法

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

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