|
|
经验总结:SQL Server与Oracle的数据同步
( 2008/6/12 10:15 )
这篇论坛文章(赛迪网技术社区)主要介绍了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
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
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
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)
begin truncate table PublishLastRec_SQL return end
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
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
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秒数据同步。
|
·Oracle names new chief financial officer (8-28) ·全面解析Oracle developer的异常处理机制 (8-19) ·Oracle安装后配置和启动企业管理器的过程 (8-15) ·Oracle安装后配置和启动企业管理器的过程 (8-15) ·两个有用Oracle运算:intersect和minus运算 (8-14) 热议文章·国资委专家细述电信失衡两诱因 (8-27) 评:对于文中提到要尽快实现电信业的基础设施共享我很赞同,我国各大运营商都建有自己的骨... ·现在部署WiMAX还是等待LTE? (8-27) ·左迅生感叹网通品牌会消失 称合并后不会裁员 (8-26) ·设备商围攻激进华为:它将摧毁TD (8-20) ·专家呼吁出台《电信法》以制衡恶性博弈 (8-19) ·3G发牌猜想:三家运营商将同领TD牌照? (8-13) ·基于单片机和GPRS的矿区铁路道口监测系统 (8-28) ·视频会议中的帧、行、场 (8-28) ·高清视频会议和高清电视的区别 (8-28) ·NGN(下一代网络)安全问题分析 (8-28) ·NGN(下一代网络)组网实践中的思考 (8-28) ·NGN(下一代网络)接入层建设解决方案 (8-28) |
|||||||||||||||
|