将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系统作为SQLServer的链接服务器加入到SQLServer中。
http://www.cnblogs.com/Snowfun/p/5284357.html

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](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [modiid] [int] NULL,
    [IsExec] [int] NULL,
    [epl_employID] [varchar](30) NULL,
    [epl_employName] [varchar](30) 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 < GETDATE()
BEGIN
EXEC sp_EmployLastRec_Sql 
    WAITFOR DELAY '00:00:05' -- 等待5秒, 根据你的需要设置即可
END

Oracle与SQL Server实现表数据同步的更多相关文章

  1. Oracle与Sql Server复制表结构和数据

    1.Oracle create table 新表名 AS SELECT * FROM 源表名 2.Sql Server SELECT * into 新表名 from 源表名 版权声明:笔者:jiank ...

  2. sql server作业实现数据同步

    作业介绍  SQL SERVER的作业是一系列由SQL SERVER代理按顺序执行的指定操作.作业可以执行一系列活动,包括运行Transact-SQL脚本.命令行应用程序.Microsoft Acti ...

  3. SQL Server 的表数据简单操作(表数据查询)

    --表数据查询----数据的基本查询-- --数据简单的查询--select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式] 例: use 商品管理数据库 go ...

  4. SQL Server 的表数据简单操作

    --表数据操作----添加表数据----向现有表添加数据--[use 要操作数据表的数据库名称go]insert [into] 数据表 [(字段名1,字段名2,字段名3, ...)] values(值 ...

  5. sql server复制表数据到另外一个表 的存储过程

    ) Drop Procedure GenerateData go CREATE PROCEDURE GenerateData @tablename sysname AS begin ) ) ) dec ...

  6. sql server多表数据批量更新

    update wset w.TagCount=x.TagCountfrom (select ItemID,COUNT(*) as TagCount from r where IsValid=1 gro ...

  7. ogg实现oracle到sql server 2005的同步

    一.源端(oracle)配置1.创建同步测试表create table gg_user.t01(name varchar(20) primary key);create table gg_user.t ...

  8. ORACLE和SQL SERVER的数据同步常用方法

    ORACLE和SQL SERVER的数据同步常用方法 1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在or ...

  9. Oracle和sql server中复制表结构和表数据的sql语句

    在Oracle和sql server中,如何从一个已知的旧表,来复制新生成一个新的表,如果要复制旧表结构和表数据,对应的sql语句该如何写呢?刚好阿堂这两天用到了,就顺便把它收集汇总一下,供朋友们参考 ...

随机推荐

  1. 《锋利的jQuery》读书笔记(DOM+事件)

    前阵子买了一批书,就从锋利的jQuery看起吧,书中一些太过常规以及没有强记必要性的操作就不记录了. 1.DOM加载后执行JS $(document).ready(function(){ //.... ...

  2. java-正则表达式判断手机号

    要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段, 故先要整清楚现在已经开放了多少个号码段,国家号码段分配如下: 移动:134.135.136.137.138.139 ...

  3. Electron 使用 Webpack2 预编译 Electron 和 Browser targets

    Electron 使用 Webpack2 预编译 Electron 和 Browser targets 前一篇文章说了说怎样使用 Webpack2 预编译 Electron 应用,但是有时候我们希望使 ...

  4. 前端之JavaScript再次补充(干死!!)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. HDU 3720 Arranging Your Team

    先分组,然后暴力:注意  初始化时不要为0 会有负数:我直接二进制枚举: dfs是正解:呵呵 #include <iostream> #include <cstdio> #in ...

  6. rhel7+apache+c cgi+动态域名实现web访问

    1. 申请动态域名/安装no-ip客户端 https://blog.csdn.net/lee244868149/article/details/44095835 2. yum安装httpd 两种方法安 ...

  7. MySql必知必会实战练习(五)存储过程

    1. 为什么使用存储过程? (1) 通过把处理封装在容易使用的单元中,简化复杂操作 (2) 为了保证数据的完整性,不要求反复建立一系列的处理操作,所有开发人员和应用程序都使用同一(试验和测试)存储过程 ...

  8. 使用IntelliJ IDEA开发SpringMVC网站的学习

    最近开始了“使用IntelliJ IDEA开发SpringMVC网站”的学习,有幸看到一份非常完善的学习资料,笔者非常用心的详细注释了一份关于博客的开发过程和细节,并且在评论中回复大家提出的问题,非常 ...

  9. 安卓开发第一记 android stdio 安装后 新建测试项目报错

    Failed to resolve:com.android.support:appcompat-v7:报错处理   你在使用android studio时是否也出现过上图的报错,你还在为它的出现烦恼? ...

  10. matlab 与 modelsim 联调 cic抽取滤波器

    注:本设计的参数为:D=2,R=5,N=3:时钟频率为50mhz,输入信号为有符号8位,根据公式bmax=bin+N*log(2,R*D):可以得到bmax=18: 1,cic抽取滤波器原理 网上资料 ...