通过SQLAgent实现Oracle与SQL Server表数据同步

将SQLServer2008中的某些表同步到Oracle数据库中,不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现

实例1:

SQLServer2008有一个表employ_epl是需要同步到一个EHR系统中(Oracle11g),实现数据库的同步步骤如下:

1.在Oracle中建立对应的employ_epl表,需要同步哪些字段我们就建那些字段到Oracle表中。 注意:Oracle的数据类型和SQLServer的数据类型是不一样的,需要进行转换

–查看SQLServer和其他数据库系统的数据类型对应关系 –SQL转Oracle的类型对应

SELECT *FROM msdb.dbo.MSdatatype_mappings

–详细得显示了各个数据库系统的类型对应

SELECT *FROM msdb.dbo.sysdatatypemappings

2.建立链接服务器 将Oracle系统作为SQL Server的链接服务器加入到SQL Server中。

http://www.linuxidc.com/Linux/2016-04/130574.htm

3.使用SQL语句通过链接服务器将SQLServer数据写入Oracle中

DELETE FROM TESTORACLE..SCOTT.EMPLOY_EPL
insert into TESTORACLE..SCOTT.EMPLOY_EPL
select * from employ_epl

–查看Oracle数据库中是否已经有数据了。

select * from TESTORACLE..SCOTT.EMPLOY_EPL

4.建立SQLAgent,将以上同步SQL语句作为执行语句,每天定时同步。

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

–1.准备一个新表 –SqlServer表EmployLastRec_Sql用于记录employ_epl表的增删改记录 CREATE TABLE [dbo].[EmployLastRec_Sql](https://www.zmtbox.com/tools/[id] [int] IDENTITY(1,1) NOT NULL, [modiid] [int] NULL, [IsExec] [int] NULL, [epl_employID] varchar NULL, [epl_employName] varchar NULL, [epl_Sex] [int] NULL, [epl_data] [datetime] NULL)

–2.用一个视图”封装”了一下链接服务器下的一张表

create view v_ora_employ
as
 --TESTORACLE链接服务器名
 select * from TESTORACLE..SCOTT.EMPLOY_EPL

–3.SQL2008表employ_epl建立触发器,用表EmployLastRec_Sql记录下操作的标识 –modiid等于1为insert,2为delete,3为update,字段isexec标识该条记录是否已处理,0为未执行的,1为已执行的

create trigger trg_employ_epl_insert on employ_epl for insert
as
 insert into EmployLastRec_Sql(modiid,IsExec,epl_employID,epl_employName,epl_Sex)
 select '1','0',epl_employID,epl_employName,epl_Sex from inserted


create trigger trg_employ_epl_update on employ_epl for update
as
 insert into EmployLastRec_Sql(modiid,IsExec,epl_employID,epl_employName,epl_Sex)
 select '3','0',epl_employID,epl_employName,epl_Sex from inserted


create trigger trg_employ_epl_delete on employ_epl for delete
as
 insert into EmployLastRec_Sql(modiid,IsExec,epl_employID,epl_employName,epl_Sex)
 select '2','0',epl_employID,epl_employName,epl_Sex from deleted

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

create proc sp_EmployLastRec_Sql
as --epl_employID,epl_employName,epl_Sex
 declare @modiid int
 declare @employID varchar(30)
 declare @employName varchar(50)
 declare @sex int

–字段IsExec标识该条记录是否已处理,0为未执行的,1为已执行的

if not exists(select * from EmployLastRec_Sql where IsExec=0)
 begin  
   truncate table EmployLastRec_Sql----不存在未执行的,则清空表
 return
 end

 declare cur_sql cursor for
   select modiid,epl_employID,epl_employName,epl_Sex
   from EmployLastRec_Sql where IsExec=0 order by [id]--IsExec 0为未执行的,1为已执行的

 open cur_sql
 fetch next from cur_sql into @modiid,@employID,@employName,@sex
 while @@fetch_status=0
 begin
   if (@modiid=1) --插入
   begin
     ----将数据插入到ORACLE表中
     insert into v_ora_employ(epl_employID,epl_employName,epl_Sex)values(@employID,@employName,@sex)
   end

•    if (@modiid=2) --删除
•    begin
•      delete from v_ora_employ where epl_employID=@employID
•    end

•    if (@modiid=3) --修改
•    begin
•      update v_ora_employ set epl_employName=@employName,epl_Sex=@sex,epl_data=getdate()
•      where epl_employID=@employID
•    end

•    update EmployLastRec_Sql set IsExec=1   where current of cur_sql

•    fetch next from cur_sql into @modiid,@employID,@employName,@sex
 end

 deallocate cur_sql

–5.调用该存储过程的作业,实现5秒执行一次该存储过程,做到5秒数据同步。 –先建一个一分钟运行一次的作业,然后在”步骤”的脚本中这样写:

DECLARE @dt datetime
SET @dt = DATEADD(minute, -1, GETDATE())
--select @dt
WHILE @dt '00:00:05' -- 等待5秒, 根据你的需要设置即可
END

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/219786.html<

(0)
管理的头像管理
上一篇2025-04-14 06:44
下一篇 2025-04-14 06:46

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注