1、同构或异构数据库的数据实时同步 目录 同构或异构数据库的数据实时同步 1 目录 1 一、 术语解释: 1 二、 同构数据库的同步: 1 1. 建立发布服务器 2 2. 新建订阅服务器 8 三、 异构数据库的同步 24 1. MSDTC的配置 24 2. 创建链接服务器 30 3. 创建触发器 34 一、 术语解释: 同构: 需要同步的两张表一模一样 异构: 需要同步的两张表结构不一样 注:本文所说的数据同步两个数据库是部署在不同的服务器上。 二、 同构数据库的同步: 这里简单介绍一下,主要采用的SQLServer2005自
2、带的数据复制技术,我们这里采用数据快照的方式同步。复制中涉及到分布式服务器部署的概念,涉及到发布服务器、分发服务器以及订阅服务器。 前提:因为需要用到SQLSERVER计划作业,所以需要开启SQLSERVER代理服务,点击运行键入services.msc,进入服务界面,启动SQL Server Agent (MSSQLSERVER)服务,并设置为自动启动; 1. 建立发布服务器 (1) 连接进入SQLSERVER,在根节点下打开复制,右击本地发布,选择新建发布。 (2) 进入新建发布向导,选择下一步; (3) 选择需进行数据同步的源数据库,按下一步; (4) 选择快照发
3、布,按下一步; (5) 选择需要同步的表和列,按下一步; (6) 不需要筛选表行,直接按下一步; (7) 按图示选择,然后点击旁边的更改; (8) 点击更改后进入设置时间间隔页面,按图示我们设置作业执行时间间隔为3分钟,设置完毕后点击确定,然后继续下一步; (9) 在代理安全性下,选择安全设置; (10) 如图所示,需要键入本机的Windows账号登录名密码以及SqlServer的用户名和密码,然后点击确定,继续下一步; (11) 按照图示勾选,生成脚本文件可选可不选,然后点击下一步; (12) 默认设置,继续下一步; (13) 填写发布名称,然后
4、点击完成 (14) 然后开始自动创建发布,成功后点击关闭; (15) 然后再本地发布下出现了我们的发布 2. 新建订阅服务器 (1) 打开复制,右击本地订阅,选择新建订阅。 (2) 点击下一步,选择发布服务器,点下一步 (3) 这里我们选择推送订阅,视具体情况而选择,然后点击下一步 (4) 选择添加订阅服务器,添加SQL订阅服务器 (5) 然后会弹出连接到服务器界面,连接到你为其同步数据的服务器,配置好点击连接,注意这里需要输入机器名,不能填写IP地址 (6) 然后会出现如下界面,选择需要向其同步数据的数据库,并按下一步
5、 (7) 这里需要建立连接,点击旁边有省略号的按钮 (8) 会出现如下界面,按图示进行选择,下方输入订阅服务器的数据库名和密码,上方也可以选第一个选项,用Windows登录名和密码的方式连接,但由于我示例连接的是虚拟机,root用户的权限不够,在最后配置完成之后会有错误提示,其实用机器名\Windows用户名,下边输入密码的方式也是可以的,我这里选的是第二个选项,使用SQLSERVER代理的方式,然后点击确定; (9) 直接点击下一步 (10) 点击下一步 (11) 点击下一步 (12) 点击下一步 (13) 点击下一步 (14) 点击完成 (
6、15) 出现如下界面,然后点击关闭 (16) 然后会在你的发布下出现一个订阅,同时在链接服务器里出现一个链接 链接服务器: 同时在远程服务器,也就是你的订阅服务器里的本地订阅里也会出现对服务器数据的订阅,然后服务器数据库更新,计划会按时间间隔执行,执行时就会用数据快照的方式同步订阅服务器的数据了,如图这是订阅服务器的本地订阅: 需要注意的是,发布服务器的代理服务一定要开,如果订阅服务器的本地订阅里看不到订阅的话多刷几次就好了,数据库的同步复制到此结束。 三、 异构数据库的同步 异构数据库同步用到的技术包括触发器,MSDTC,RPC,SQLSERV
7、ER链接服务器。实现原理是需同步数据的双方需要都开启MSDTC服务,并进行配置,MSDTC的配置稍后会讲到,因为MSDTC的通信依赖于RPC,所以有防火墙的话双方都需要开启135端口,telnet可以试试135端口是不是通的,两个数据库服务器应该都支持远程连接,在SQLSERVER的配置管理器里可以进行配置,然后建立链接服务器,然后为服务器上需要同步的表分别建立触发器,在触发器里进行SQL同步语句的编写,这样就实现了异构数据库的数据实时同步。 1. MSDTC的配置 (1) 双方启动MSDTC服务 MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务
8、器启动MSDTC(Distributed Transaction Coordinator)服务。 操作步骤: 开始->设置->控制面板->管理工具->组件服务 打开组件服务节点 右击我的电脑->属性->选择MSDTC选项卡 点击安全配置 根据图片所示将必要项打上勾点击确定重启服务即可 (2) 打开双方135端口 MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。 (使用“telnet IP 135 ”命令测试对方端口是
9、否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放。) 操作: 步骤1 向防火添加msdtc.exe 点击添加程序->点击浏览 找到system32文件夹下的msdtc.exe文件,点打开即可。 步骤2 添加135端口 点击添加端口 填入135点确定即可。 步骤3 SQL2005设置 打开SQL2005企业管理器 右击根节点,打开服务器属性窗口将“需要将分布式事务用于服务器到服务器”的项勾上即可 2. 创建链接服务器 (1) 打开本地数据库,
10、选择根节点 => 服务器对象 => 链接服务器,右键单击链接服务器,选择新建链接服务器 (2) 常规配置,链接服务器名字可以随便起,但是产品名称必须为大写的SQLSERVER。 (3) 安全性配置,需要输入远程服务器的用户名和密码 (4) 服务器选项,Rpc 和 Rpc Out 设置为 true,然后点击确定OK。 3. 创建触发器 在创建触发器之前,可以先试试链接服务器是否成功建立,用Select语句搜索尝试一下,如:select * from ITSV.testCopy1.dbo.SY_LatestSensorData 注意格式: 链接服务器别名.数
11、据库.dbo.表名 如果成功的话继续创建触发器,不成功的话检查原因. 创建触发器语法: use expoxian go CREATE TRIGGER Tri_LatestSensorData ON SY_LatestSensorData FOR INSERT AS BEGIN Insert into CCTV.testCopy1.dbo.SY_LatestSensorData(f_gatewayId,f_uploadTime,f_code1,f_code2,f_code3,f_code4,f_code5,f_code6) SELECT f_gatewayId
12、f_uploadTime,f_code1,f_code2,f_code3,f_code4,f_code5,f_code6 from Inserted END 删除触发器语法: drop trigger Tri_LatestSensorData 针对表建立触发器之后,可以在服务器插入一条记录试试,看看远程服务器能不能实时更新数据:insert into SY_LatestSensorData(f_gatewayId,f_uploadTime,f_code1,f_code2,f_code3,f_code4,f_code5,f_code6) values('20050708S00007',getdate(),1,1,1,1,1,1) 综上所述,就是异构数据库同步的方法,本文到此结束。






