关于数据同步的几种实现

关于数据同步的几种实现

概述

关于数据同步主要有两个层面的同步,一是通过后台程序编码实现数据同步,二是直接作用于数据库,在数据库层面实现数据的同步。通过程序编码实现数据同步,其主要的实现思路很容易理解,即有就更新,无则新增,其他情况日志记录,就不做过多的介绍,这里主要讲述的是第二个层面的数据同步,即在数据库层面实现数据同步。

数据库层面的数据库同步主要有三种方式:通过发布/订阅的方式实现同步,通过SQL JOB方式实现数据同步,通过Service Broker 消息队列的方式实现数据同步。

下面分别就这三种数据同步方式,一一详解。

1. 通过发布/订阅的方式实现同步

发布/订阅是Sql Server自带的一种数据库备份的机制,通过该机制可以快速的实现数据的备份同步,不用编写任何的代码。

此种数据同步的方式存在的以下的一些问题:

  1. 表结构不能更改,同步双方的表结构必须一致,一旦表结构发生更改需要重新生成数据库快照。
  2. 对于大数据量的同步没有可靠的保证。
  3. 网络不稳定的情况下同步也不能保证。

总的来说,这种数据备份同步的方式,在表结构一致、数据量不是特别大的情况下还是非常高效的一种同步方式。

2. 通过SQL JOB方式实现数据同步

通过Sql Job定时作业的方式实现同步其基本原理就是通过目标服务器和源服务器的连接,然后通过编写Sql语句,从源服务器中读取数据,再更新到目标服务器。

这种数据同步的方式比较灵活。创建过sql定时作业之后,主要需要执行以下关键的两步。

2.1 创建数据库连接(一般作为定时作业执行的第一步)

不同数据库之间的连接可以通过系统的存储过程实现。下面就直接用一个示例来讲一下如何创建数据库连接。

–添加一个连接

–系统存储过程sp_addlinkedserver 参数:

———————-1:目标服务器的IP或别名,本例中为:'WIN-S1PO3UA6J7I';———————-2:'' (srvproduct,默认);

———————-3:'SQLOLEDB'(provider,默认值);

———————-4:目标服务器的IP或别名(datasrc),本例中为:'WIN-S1PO3UA6J7I'

exec sp_addlinkedserver 'WIN-S1PO3UA6J7I','','SQLOLEDB','WIN-S1PO3UA6J7I'

–添加登录用户连接

–系统存储过程sp_addlinkedsrvlogin 参数:

———————-1:目标服务器的IP或别名,本例中为:'WIN-S1PO3UA6J7I';

———————-2:'false',默认值;

———————-3:null,默认值;

———————-4:'sa',登录用户名;

———————-5:'pass@word1',登录密码;

exec sp_addlinkedsrvlogin 'WIN-S1PO3UA6J7I','false',null,'sa','pass@word1'

创建数据库连接主要用到了以上的两个存储过程,但是在实际操作的过程中可能会遇到“仍有对服务器XXX的远程登录或连接登录问题”这样的问题,如果遇到此类问题,在执行上边的添加连接和登录用户连接之前还需要先删除某个已存在的链接,具体如下:

–系统存储过程sp_droplinkedsrvlogin 参数:

———————-1:目标服务器的IP或别名,本例中为:'WIN-S1PO3UA6J7I';———————-2:null

exec sp_droplinkedsrvlogin 'WIN-S1PO3UA6J7I',null

–系统存储过程sp_dropserver 参数:

———————-1:目标服务器的IP或别名,本例中为:'WIN-S1PO3UA6J7I'

exec sp_dropserver 'WIN-S1PO3UA6J7I'

2.2 使用SQL 语句 实现数据同步

主要的同步思路:

1:在目标数据库中先清空要同步的表的数据

2:使用insert into Table (Cloumn….) select Column….. from 服务器别名或IP.目标数据库名.dbo.TableName 的语法将数据从源数据库读取并插入到目标数据库

Truncate table Org_DepartmentsExt –删除现有系统中已存在的部门表

insert into Org_DepartmentsExt –从名为WIN-S1PO3UA6J7I的服务器上的DBFrom数据库上获取源数据,并同步到目标数据库中

(

[DeptID]

,[DeptStatus]

,[DeptTel]

,[DeptBrief]

,[DeptFunctions]

)

SELECT [DeptID]

,[DeptStatus]

,[DeptTel]

,[DeptBrief]

,[DeptFunctions]

FROM [WIN-S1PO3UA6J7I].[DBFrom].[dbo].[Org_DepartmentsExt]

以上这两步便是通过SQL Job实现数据同步的关键步骤,在完成以上两步之后,如果没有其他的表要进行同步,则可创建同步计划以完善定时作业。带作业创建完后,便可以执行。

3. 通过SQL Server Service Broker 消息队列的方式实现数据同步

3.1 SQL Server Service Broker概述

SQL Server Service Broker 是数据库引擎的组成部分,为 SQL Server 提供队列和可靠的消息传递。既可用于使用单个 SQL Server 实例的应用程序,也可用于在多个实例间分发工作的应用程序。

在单个 SQL Server 实例内,Service Broker 提供了一个功能强大的异步编程模型。数据库应用程序通常使用异步编程来缩短交互式响应时间,并增加应用程序总吞吐量。

在多个SQL Server实例之间Service Broker 还可以提供可靠的消息传递服务。Service Broker 可帮助开发人员通过称为服务的独立、自包含的组件来编写应用程序。需要使用这些服务中所包含功能的应用程序可以使用消息来与这些服务进行交互。Service Broker 使用 TCP/IP 在实例间交换消息。Service Broker 中所包含的功能有助于防止未经授权的网络访问,并可以对通过网络发送的消息进行加密。

3.2 具体的实现演示

在这一小节里,主要是通过一个完整的数据同步的流程向大家演示,如何实现同一个数据库实例不同数据库的数据同步。关于不同的数据库实例间的数据库的数据同步整体上跟同一个实例的数据库同步是一样的,只不过在不同的数据库实例间同步时还需启用传输安全、对话安全,创建路由、远程服务绑定等额外的操作。

下面就是具体的实现步骤:

3.2.1为数据库启动Service Broker活动

这一步主要是用来对要进行数据同步的数据启用Service Broker 活动,并且授信。

USE master
GO
--如果数据库DBFrom、DBTo不存在,则创建相应的数据库
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name ='DBFrom')
CREATE DATABASE DBFrom
GO
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name ='DBTo')
CREATE DATABASE DBTo
GO
--分别为该数据库启用Service Broker活动并且授权信任
ALTER DATABASE DBFrom SET ENABLE_BROKER
GO
ALTER DATABASE DBFrom SET TRUSTWORTHY ON
GO
ALTER AUTHORIZATION ON DATABASE::DBFrom To sa
GO
ALTER DATABASE DBTo SET ENABLE_BROKER
GO
ALTER DATABASE DBTo SET TRUSTWORTHY ON
GO
ALTER AUTHORIZATION ON DATABASE::DBTo TO sa
GO

<< · Back Index ·>>

发表回复

相关推荐

據說靜安區押寶西藏北路?

​年初盤點新房時環二提到過,今年靜安區預計上市的項目全部集中在一個片區,貝殼上稱之為“西藏北路”。為什麼近期集中開發這個...

· 49秒前

匈牙利舞曲第五號

寫在前面:其實這是寫於2004.09.22 13:35:54的文章,現在發在這裡原因有二:第一,以前寫的文字放置的博客論壇關的關掛的掛,...

· 1分钟前

原生家庭到底是什么?

原生家庭。 这个词这几年随处可见,从历数北大清华农村学生的低占比,进而认为“寒门再难出贵子”,到某综艺节目中六个问题引 ...

· 2分钟前

夏天盛开的花有哪些

都说春天是花的季节,但其实夏天也有很多娇艳鲜花点缀,为炎热的酷暑带来一缕色彩,生如夏花绚烂,让你欣赏不一样的花卉之美。

· 2分钟前

第一聲槍響

第一聲槍響1967年夏天,昆明的兩大造反派組織——“八、二三”和“炮兵團”之間的矛盾越來越尖銳。而且兩大組織後面均有軍隊的支持...

· 4分钟前