首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Oracle频道
中国IT教育
Google
首页 入门基础 安装配置 体系架构 PLSQL 备份恢复 性能调优 开发技术 资讯动态 考试认证 下载 专题 讨论
您现在的位置: 中国IT实验室 >> Oracle >> 性能调优 >> 正文

SQL Server与Oracle的数据同步

        所有的操作都是把各幻表的数据插入到一张表中,上面统一插入的表为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秒数据同步。

 

上一页  [1] [2] 

【责编:michael】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 ·Java入门 Tomcat的配置技巧精华专题…
 ·Oracle RMAN物理备份技术详解…
 今日更新
 社区讨论
 博客论点
 频道精选
 Oracle频道相关导航