SQL Server分布式数据库技术(LinkedServer,CT,SSB)

SQL Server自定义业务功能的数据同步

在不同业务需求的驱动下,数据库的模块化拆分将会面临一些比较特殊的业务逻辑处理需求。例如,在数据库层面的数据同步需求。同步过程中,可能会有一些比较复杂的业务逻辑判断。简单介绍几个SQL Server提供的数据同步功能。

  1. 已链接服务(Linked Server)

通过链接数据库可以实现不同实例间数据的访问和更新操作。通常会与OPENQUERY行集函数一起使用,以避免分布式事务的干涉。不建议直接使用已链接服务来做远程数据的更新操作,因为这需要使用到分布式数据库的事务管理。SQL Server的分布式事务需要通过Windows的DTC(Distributed Transaction Controller,分布式事务控制器)来管理和协调不同服务器,或者说不同数据库实例间的资源和事务调整,其性能与普通的事务管理成几何倍的增长。

如图10-4,页面是已链接服务的配置界面,可以通过SSMS的Server Objects中的Linked Servers可视化页面来进行配置。

图11-4 数据库的已链接服务

Provider是已链接服务器连接数据库时使用的适配器的类型,如图11-4中,左边部分显示的,列出了几趾已有的适配器的类型。示例中,使用SQLOLEDB类型的适配器进行数据库连接。

Security页用来配置链接服务器的验证信息,它包括如图11-5中所示的4种模式的验证方式。

Not be made

当选择此认证模式时,已链接服务将使用本地服务的登陆用户与远程服务登陆用户的映射配置列表中的账号。如图中,当选择此模式时,本地将只能使用sa登陆时,模拟远程服务的sa账号的权限配置。

Without using a Security context

选择此模式将不使用验证模式,它只利用SQL Server服务的登陆账号进行验证,此服务要求在Windows服务启动时,本地服务和远程服务使用相同的登陆账号。

Using current security context

当使用此模式时,要求本地和远程服务都要有相同的账号及密码,通常这些配置为Windows集成认证的时候使用。

Using this security context

使用此模式时,将使用下面配置的用户和密码进行登陆远程服务。

本小节中只是简略地介绍了关于这些配置的简要步骤,要获取更详细的内容,请参考SQL Server联机丛书(http://technet.microsoft.com/zh-cn/library/ff772782.aspx)。

图11-5 链接服务器安全配置

  1. 更改跟踪(Change Tracking)

更改跟踪是SQL Server 2008加入的一个轻量级的数据修改记录功能,它是数据变更捕获功能的缩减版本。它可以将已修改数据的主键记录在对应的视图中,而后通过系统函数访问该视图,获得相应的变更数据。通过变更数据的记录,可以实现增量地处理复杂的业务逻辑,而后将数据结果保存到目标数据库中。

示例代码如代码清单11-1中所示,开启更改跟踪是依据表来配置的,但是在配置表的更改跟踪之前,需要将数据库的更改跟踪选项开启,开启数据库更改跟踪选项时,默认会将更改跟踪记录保留2天,并开启自动清理的选项。

更改跟踪可以跟踪到具体的字段更改配置,如代码清单11-1中,TRACK_COLUMNS_UPDATED配置所示,当选项为ON状态时,将会记录下更改跟踪修改的字段,当为OFF时,将不会记录。

USE master

GO

ALTER DATABASE [AdventureWorks2008R2] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS,AUTO_CLEANUP = ON);

GO

USE AdventureWorks2008R2

GO

ALTER TABLE Person.BusinessEntity ENABLE CHANGE_TRACKING WITH(TRACK_COLUMNS_UPDATED = ON);

GO

?

UPDATE TOP(10) Person.BusinessEntity

SET ModifiedDate=ModifiedDate;

GO

?

SELECT *

FROM CHANGETABLE(CHANGES Person.BusinessEntity,0) AS o;

GO

?

代码清单11-1 设置更改跟踪

图11-6 更改跟踪查询结果

代码清单11-1中的执行结果如图11-6中所示,使用CHANGETABLE可以获得对应表的更改历史,更改历史会将原有表的主键记录下来,如图11-6中BusinessEntityID字段所示。

关于更改跟踪的详细信息,可以参考一下SQL Server联机丛书。

  1. Service Broker

Service Broker是SQL Server自带的消息队列机制,通过Service Broker可以实现数据实例与实例间的通讯,同时也可以作为数据库实例与应用程序的消息传递机制。

同时,Service Broker是队列机制实现的,可以保证消息的执行顺序,对于具有事务性要求的数据同步,Service Broker将是很理想的一个数据同步实现。

如代码清单11-2中所示,配置了Service Broker在同实例下的同步配置。配置包括创建消息类型(Message Type),创建消息规则(Contract),队列(Queue)以及服务(Server)。其层级结构如图11-7中所示,首先,消息是存放在队列中的,每个队列都需要一个唯一的服务对应,服务将成为找到对应的标识。服务与服务间通讯时,需要指定相同的,相互可以识别到的消息规则,这些规则会指定对应的消息通讯的类型。其工作的流程,如图11-8中所示。

图11-7 Service Broker的组件组成

图11-8 Service Broker的工作原理

当需要进行队列传输前,需要开启一个会话(Conversation),通过会话记录下对应的服务标识,标识从源服务发送到目标服务。找到会话标识后便可以找到对应的队列。

开启会话以后,进行消息发送,对于数据库实例来说,只需要将消息写入到发送队列就可以了。消息被写入到发送队列后,后续的工作都交给Service Broker来处理。

当消息进入发送队列,Service Broker根据会话记录的服务标识,找到目标服务,并将消息拆分为多个消息片断,将消息发送到目标服务,服务接收完成所有的消息后,将消息写入到目标队列中。在写入到目标队列后,消息传递就结束了。后续的工作便交给应用处理了。

应用需要调用接收消息的命令,将消息从接收队列中取出,并进行一系列的后续业务工作。

关于Service Broker可以参考SQL Server联机丛书(http://technet.microsoft.com/zh-cn/library/ms166104(v=SQL.105).aspx)。

下面的代码是一份在同一实例下进行Service Broker配置以及测试的脚本,可以参考一下代码,并结合上图11-8中的工作原理参考Service Broker的工作方式。

use master

go

alter database AdventureWorks2008R2 set enable_broker with rollback immediate;

go

?

use AdventureWorks2008R2

go

?

create message type ReceiveMsgType validation = none;

create message type SendMsgType validation = none;

?

go

create contract SampleContract(SendMsgType sent by initiator,ReceiveMsgType sent by target,FraudEndOfStream sent by initiator);

go

?

create queue SampleTargetQue;

create service SampleTargetSrv on queue SampleTargetQue(SampleContract);

go

?

create queue SampleInitQue;

create service SampleInitSrv on queue SampleInitQue(SampleContract);

go

?

/********************************Send Test********************************************

declare @handle uniqueidentifier,@msg varchar(8000) = ‘this is a test message!‘;

?

begin dialog conversation @handle

from service SampleInitSrv

to service ‘SampleTargetSrv‘

on contract SampleContract

with encryption = off;

?

send on conversation @handle

message type SendMsgType(@msg)

?

**********************************************************************************/

?

/*****************************Receive Test*************************************************

declare @receivemsg varchar(8000),@Handle uniqueidentifier;

waitfor(receive top(1) @Handle = conversation_handle,

[email protected] = Message_Body

????????????from SampleTargetQue),timeout 1000

end conversation @handle;

select @receivemsg;

?

**********************************************************************************/

代码清单11-2 同实例下的Service Broker配置

时间: 2024-07-29 09:58:54

SQL Server分布式数据库技术(LinkedServer,CT,SSB)的相关文章

SQL Server 分布式数据库性能测试

我使用三台SQL Server 2012 搭建分布式数据库,将一年的1.4亿条数据大致均匀存储在这三台Server中,每台Server 存储4个月的数据,Physical Server的配置基本相同,内存16G,双核 CPU 3.6GHz. 1,创建的分区视图,Linked Server的Alias是db2 和 db3,Catalog 是 tdw(test data warehouse). CREATE TABLE [dbo].[Commits] ( [CommitID] [bigint] ID

SQL Server 分布式事务与本地事务

SQL Server 分布式事务与本地事务 @(SQL Server) 背景:之前有项目中出现大量死锁,进行排查后最终发现很多死锁都是由于序列化隔离级别导致,开发针对业务和SQL进行优化后,死锁减少,但是没进行后续研究.最近又有很多项目出现死锁及超时,特别是工作流和待办这块,同样发现都是存在序列化,于是针对这一点进行相关资料查阅及解答. 一. 为什么会出现serializable(序列化) 如果我们程序中定义事务类调用了分布式事务,那么事务的隔离级别默认就是serializable,数据库中即会

使用Source Safe for SQL Server解决数据库版本控制问题

简介 在软件开发过程中,版本控制是一个广为人知的概念.因为一个项目可能会需要不同角色人员的参与,通过使用版本控制软件,可以使得项目中不同角色的人并行参与到项目当中.源代码控制使得代码可以存在多个版本,而不会将代码库变得混乱,典型的场景包括Bug修复.添加新功能.版本整合等. 虽然在开发层面的版本控制软件已经非常成熟,但目前国内还没有专门针对数据库层面的版本控制软件来帮助不同角色的人员在数据库层面进行团队协作.变更代码管理以及对数据库的变更进行查看和比对.在数据库层面版本控制工具的缺乏可能会出现如

SQL Server 2012 数据库笔记

慕课网 首页 实战 路径 猿问 手记 Python 手记 \ SQL Server 2012 数据库笔记 SQL Server 2012 数据库笔记 2016-10-25 16:29:33 123浏览 0评论 第一章 初识SQL Server2012 1.2.作为SQL Server的最新版本,SQL Server 2012具有以下激动人心的新功能. 1.AlwaysOn. 2.Columnstore索引. 3.DBA自定义服务器权限. 4.Windows Server Core支持. 5.Se

SQL SERVER 2008数据库MDF文件0字节数据恢复

SQL SERVER 2008数据库文件碎片恢复软件, 不管是MDF文件自然损坏后变0字节,还是经过删除后使用数据恢复软件找到后变成0字节均有良好的效果! 案例分析: 山东某政府机构的OA管理系统使用了SQLSERVER 2008数据库,有一天数据库置疑并无法拷贝,技术人员使用了CHKDSK/F 命令尝试修复,修复结束后17GB的MDF文件变成了0字节,经过百度搜索,联系到我们.本来使用自主开发的软件可以远程恢复,但由于用户是涉密单位,不能连外网,后来我们的工程师亲自上门去现场恢复,最终结果修复

跨越数据库发展鸿沟,谈分布式数据库技术趋势

金融行业架构转型需求随着移动化与互联网化的不断发展,我国金融行业的商业模式与技术体系已经逐渐走上了与西方世界完全不同的道路.众所周知,欧美国家的移动化普及率远远不如我国,同时人口基数也有着数量级的不同,这就使得国内外金融行业所面临的业务类型.数据量.并发量都存在巨大的差异,导致对整个IT基础设施的需求截然不同. 在最近的一两年中,国内部分科技领先的银行已经率先对微服务与分布式技术进行了探索,一些新建的互联网金融类业务也已经开始尝试使用微服务架构.分布式技术.DevOps框架进行应用的开发与维护.

windows 系统安装SQL Server 2008数据库 带图完整版详解

本机电脑:window10数据库版本:SQL Server 2008 数据库安装包网上有很多下载安装包的地方,如果没有可以联系我(Q614010656),我发给你; 1.双击安装包 2.安装 点击全新安装或向现有安装添加功能 3.许可条款 接受许可,点下一步 4.功能选择 点全选,点下一步 5.实例配置 默认即可,点下一步 6.服务器配置 点击 对所有SQL Server 服务使用相同的账户(U) 6.1.选择NT AUTHORITY\SYSTEM,不需要输入密码,点确认,点下一步 NT Aut

Sql Server 2012数据库的安装【自己一点一点敲的】

Sql Server 2012数据库的安装 1.到微软官网上下载 下载链接为:https://www.microsoft.com/zh-cn/download/details.aspx?id=29066 点击下载-->点击文件名(全选)-->点击Next,开始下载. 2.下载完成后,装载以.iso为扩展名的光盘镜像文件 右击文件-->点击装载-->出来下图所示页面 点击setup-->打开安装中心(如果是win7以上的版本,右击-->以管理员身份运行)-->出现如

sql server 2012数据库镜像

sql server 2012数据库镜像 以下通过域帐户来配置数据库镜像: 一.环境准备 1.准备计算机 AD02为域控制器/DNS服务器(sz1card1.com),IP:192.168.2.218/24,AD02安装成为域控制器.DNS服务(这里不做演示) W67为主体服务器,IP:192.168.2.67/24,安装SQL SERVER 2012 企业核心版(这里不做演示) W65为镜像服务器,IP:192.168.2.65/24,安装SQL SERVER 2012 企业核心版(这里不做演