SQL SERVER 2012 使用订阅发布同步数据库
软件做大了,客户就多了,一个数据库服务器是远远不够的,当有一台数据服务器卦掉,那整个系统就会崩溃,所以必须考虑到数据库的自动同步与备份,当一台数据库服务
器宕机,自然就有用一台数据服务器启动起来保证整个软件系统的可用性。备份数据库与总数据库之间既统一又独立。这就是业务,技术服务于业务,那么摆在我们面前的问题是
如何让数据既统一又独立?其实SQLServer已经为我们提供了很好的解决方案:发布、订阅。
打开SQL Server2012的对象资源管理器我们可以看到里面有一个”复制“节点。(图1)
先来简单了解下复制的概念:
复制是将数据或数据库对象从一个数据库复制和分发到另外一个数据库,并进行数据同步,从而使源数据库和目标数据库保持一致。使用复制,可以在局域网和广域网、
拨号连接、无线连接和Internet上将数据分发到不同位置以及分发给远程或移动用户。
复制由发布服务器、分发服务器、订阅服服务器组成:
发布服务器:数据的来源服务器,维护源数据,决定哪些数据将被分发,检测哪些数据发生了修改,并将这些信息提交给分发服务器。
分发服务器:分发服务器负责把从发布服务器拿来的数据传送至订阅服务器。
订阅服务器:订阅服务器就是发布服务器数据的副本,接收维护数据。
点开复制节点我们看到其下面的两个自节点:“本地发布”、“本地订阅”(图2)
举个经典的例子解释下发布、订阅:
发布服务器类似于报社,报社提供报刊的内容并印刷,是数据源;分发服务器相当于邮局,他将各报社的报刊送(分发)到订户手中;订阅服务器相当于订户,从邮局那
里收到报刊。
发布服务器通过复制向其他位置提供数据,分发服务器起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。每个发布服务器都与分发服务器上的单
个数据库(称作分发数据库)相关联。分发数据库存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。在很
多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色。这称为“本地分发服务器”。订阅服务器是接收复制数据的数据库实例。一个订阅服务器可以从多
个发布服务器接收数据。
好了先消化一下理论,下面我们创建一个发布服务器:
在“本地发布”节点上右击->新建发布由于我没有安装复制组件所以出了点儿意外(图3)
重新运行SQL Server2012安装向导,选择SQL Server复制功能(图4)

下一步->下一步->直到完成。
这次再点击“新建发布”,界面不一样了(图5)
点击下一步(图6)

我们先实验一下“本地分发服务器”模式直接点击下一步,由于我之前没有启动SQL Server代理所以又出了点儿小意外(图7)

微软已经解释的很清楚了,直接点击下一步(图8)

到了这一步是不是感到有些迷惑?好了我们先消化几个概念: 推订阅:推订阅是指由发布服务器将所有发生修改过的数据复制给订阅者,推荐使用推订阅。
拉订阅:拉订阅是指订阅服务器在经过一段时间就会向发布服务器要求复制出版数据库发生的变化的数据。
发布,分发,订阅可以部署在独立的服务器上面也可以部署在一台sql server 上面,分开部署可以提高性能。 点击下一步,键入数据库发布向导(选择要发布的数据库)(图9)点击“下一步” 如图10
微软的发布类型说明似乎不太好理解: (1)快照发布
快照发布指在某一时刻给出版数据库中的出版数据照相,然后将数据复制到订阅者服务器。快照复制实现较为简单,其所复制的只是某一时刻数据库的瞬间数据,快照 复制是将整个出版物传送给订阅者,就是在某一时刻将出版数据进行一次“照相”,生成一个描述出版数据库中数据的当前状态的一个文件,然后在相应的时间将其复制到 订阅的数据库上,快照复制并不是不停的监视出版数据库中发生的变化情况,它是对出版数据库进行一次扫描,把所有出版数据中的数据从源数据库送至目标数据库,而不 仅仅是变化的数据。如果数据量很大,那么要复制的数据就很多。因此对网络资源要求很高,不仅要有较快的传输速度,而且要保证传输的可靠性。快照复制是最为简单的 一种复制类型,能够在出版者和订阅者之间保证数据的一致性。快照复制通常使用在以下场合:在一定时间内出现大量的更改的操作,但数据总量不大,变化周期较长。 (2)事务发布
快照发布是将整个数据集发送给订阅服务器,由于体积大而造成复制周期较长,会形成复制滞后问题。那么事务复制使用事务日志来生成将复制到订阅服务器的事务, 因为它只复制事务也就是变化,所以滞后也比快照复制低得多。 (3)合并发布
合并发布是为移动用户设计的,可以在发布服务器或是订阅服务器处执行修改,在合并代理运行时,这些修改将同步,多用于发布服务器与订阅服务都修改数据的情况下。 工作原理如下:在要复制的每个表上实现触发器,并使用包含GUID列唯一标识要复制的表中的每一行。对其中的任何一个表进行修改时,都会将更改记录到一个数据表中,在 合并代理运行时,它收集数据表中的GUID,这些GUID指出了在发布服务器和订阅服务器处修改过的行。对于只在发布服务器或是订阅端修改的数据则直接进行相应操作,如 INSERT,UPDATE,DELETE,如果双方都有GUID则按照用户指定的方式解决冲突,默认发布服务器优先。 我们先选择最简单的发布模式(快照发布),点击下一步,由于我没有在Publish数据库中建立任何数据表所以又出了点儿意外(图11)
建立UserList数据表(图12)
继续我们的发布之旅(图13)
要发布的对象已经划分的很详细了,从数据表到数据表的每一个字段,项目属性也非常详细(图14)
点击下一步,查看右上角的“添加”按钮,还有更加令人惊喜的筛选器(图15)
微软做事总是很成熟,我们能想到的他都想到了。点击下一步(图16)
快照代理,它生成架构,数据以及跟踪复制过程所需的数据; 欣赏一下快照代理的核心界面(图17,图18)![]()

设置账户(图19)


点击下一步(图20)

为发布起个名字吧(图21)

总算可以点完成了,大功告成(图22)

SQL SERVER 2012 使用订阅发布同步数据库的更多相关文章
- SQL Server 2012 复制(发布订阅的研究)
原文:SQL Server 2012 复制(发布订阅的研究) 已实现发布订阅功能,可以实现局域网内双击备份. 一.注意事项: a) 使用[事务复制]功能 b) 必须是相同的SqlServer 帐号和密 ...
- 在Vs2012 中使用SQL Server 2012 Express LocalDB打开Sqlserver2012数据库
http://www.cnblogs.com/huangtailang/p/4221164.html 背景:个人电脑中使用的是VS2012,数据库为2008R2,最近需要打开一个SqlServer20 ...
- SQL SERVER 使用订阅发布同步数据库(转)
一.数据库复制涉及 1.发布服务器: 数据的来源服务器,维护源数据,决定哪些数据将被分发,检测哪些数据发生了修改,并将这些信息提交给分发服务器. 2.分发服务器: 分发服务器负责把从发布服务器拿 ...
- Sql Server 2012 Local DB发布到服务器端后无法访问
背景 基于Windows认证的Web application, 通过Visual Studio 2013创建的LocalDB位于App_Data目录下 现象 本地调试没有任何问题.发布到服务器(Win ...
- SQL Server 2012 从备份中还原数据库
1.首先把原数据库备份,检查原数据库的日志文件是否太大,如果过于大应该先收缩数据库日志 2.把备份的数据库文件在目标SQL Server还原,点击数据库,选择“还原文件或文件组” 3.如果需要修改还原 ...
- SQL Server 2012 新特性:包含数据库访问数据库引擎
简单的说就是可以让包含用户访问其他数据库,那么来看看如何配置,并且验证一下: USE test CREATE USER up1 WITH PASSWORD = 'zhuzhu' SELECT * ...
- Microsoft SQL server 2012数据库学习总结(一)
一.Microsoft SQL Server2012简介 1.基本概要 Microsoft SQL Server 2012是微软发布的新一代数据平台产品,全面支持云技术与平台,并且能够快速构建相应的解 ...
- SQL Server 2012复制教程以及复制的几种模式
简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...
- SQL Server 2012 Express LocalDB
微软最新推出的 SQL Server 2012 Express LocalDB 是一种 SQL Server Express 的运行模式,特别适合用在开发环境使用,也内置在 Visual Studio ...
随机推荐
- SqL数据库发布订阅非聚集索引没有被复制到订阅服务器的解决方案
Non-Clustered Indexes not copying in Transactional Replication : SQL Server 2008 方法1: You have trans ...
- 【Bootstrap基础学习】02 Bootstrap的布局组件应用示例
字体图标的应用示例 <button type="button" class="btn btn-default"> <span class=&q ...
- csharp: 百度语音合成
public string API_id = "3333"; //你的ID public string API_record = null; public string API_r ...
- 【转载】delete table 和 truncate table 的区别
使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where] 将XS表中的所有行数据删除 delete XS 执行完后,发现X ...
- 初识 easyui datagrid
首先应该下载好easyui datagrid所用的各种js 和css 这个可以到官网上去下载. 首先要引入datagrid所引入的js和css. <script src="js/jqu ...
- SQL Server的各种表
以下表格简便易懂 请认真仔细斟酌! 字符串函数: 字符串函数用于对字符串数据进行处理,并返回一个字符串或者数字. 函数名 描述 例子 CHARINDEX 用来寻找一个指定的字符串在另一个字符串中的起始 ...
- [Xamarin.Android] ActionBar Tips
[Xamarin.Android] ActionBar Tips ActionBar用途 快速搞懂 ActionBar的用途,可以参考下列文章: [Android]使用 ActionBarCompat ...
- 可怜的js居然没有块级作用域
js中在一个函数中定义一个for循环:for(var i=0;i<5;i++) 其中的i并不会随着for循环的结束就销毁,i会一直存在该函数中,这就是js和其他语言的区别,也就是js没有块级作用 ...
- javascript数组浅谈1
最近心血来潮要开始玩博客了,刚好也在看数组这块内容,第一篇就只好拿数组开刀了,自己总结的,有什么不对的地方还请批评指正,还有什么没写到的方面也可以提出来我进行完善,谢谢~~ 首先,大概说说数组的基本用 ...
- Mssql链接mysql数据库
最近在做mysql数据库实时同步到mssql数据库的方案,花了一周时间,测试通过了,在实际机器上测试出现了若干问题.第一个问题就是在mssql上链接mysql的问题. 第一步,安装 Mysql ODB ...



点击“下一步” 如图10





