软件做大了,客户就多了,一个数据库服务器是远远不够的,当有一台数据服务器卦掉,那整个系统就会崩溃,所以必须考虑到数据库的自动同步与备份,当一台数据库服务
器宕机,自然就有用一台数据服务器启动起来保证整个软件系统的可用性。备份数据库与总数据库之间既统一又独立。这就是业务,技术服务于业务,那么摆在我们面前的问题是
如何让数据既统一又独立?其实SQLServer已经为我们提供了很好的解决方案:发布、订阅。
	打开SQL Server2012的对象资源管理器我们可以看到里面有一个”复制“节点。(图1)
 
 
先来简单了解下复制的概念:
    复制是将数据或数据库对象从一个数据库复制和分发到另外一个数据库,并进行数据同步,从而使源数据库和目标数据库保持一致。使用复制,可以在局域网和广域网、
拨号连接、无线连接和Internet上将数据分发到不同位置以及分发给远程或移动用户。
    复制由发布服务器、分发服务器、订阅服服务器组成:
  1. 发布服务器:数据的来源服务器,维护源数据,决定哪些数据将被分发,检测哪些数据发生了修改,并将这些信息提交给分发服务器。
  2. 分发服务器:分发服务器负责把从发布服务器拿来的数据传送至订阅服务器。
  3. 订阅服务器:订阅服务器就是发布服务器数据的副本,接收维护数据。
点开复制节点我们看到其下面的两个自节点:“本地发布”、“本地订阅”(图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 使用订阅发布同步数据库的更多相关文章

  1. SQL Server 2012 复制(发布订阅的研究)

    原文:SQL Server 2012 复制(发布订阅的研究) 已实现发布订阅功能,可以实现局域网内双击备份. 一.注意事项: a) 使用[事务复制]功能 b) 必须是相同的SqlServer 帐号和密 ...

  2. 在Vs2012 中使用SQL Server 2012 Express LocalDB打开Sqlserver2012数据库

    http://www.cnblogs.com/huangtailang/p/4221164.html 背景:个人电脑中使用的是VS2012,数据库为2008R2,最近需要打开一个SqlServer20 ...

  3. SQL SERVER 使用订阅发布同步数据库(转)

    一.数据库复制涉及  1.发布服务器:  数据的来源服务器,维护源数据,决定哪些数据将被分发,检测哪些数据发生了修改,并将这些信息提交给分发服务器.  2.分发服务器: 分发服务器负责把从发布服务器拿 ...

  4. Sql Server 2012 Local DB发布到服务器端后无法访问

    背景 基于Windows认证的Web application, 通过Visual Studio 2013创建的LocalDB位于App_Data目录下 现象 本地调试没有任何问题.发布到服务器(Win ...

  5. SQL Server 2012 从备份中还原数据库

    1.首先把原数据库备份,检查原数据库的日志文件是否太大,如果过于大应该先收缩数据库日志 2.把备份的数据库文件在目标SQL Server还原,点击数据库,选择“还原文件或文件组” 3.如果需要修改还原 ...

  6. SQL Server 2012 新特性:包含数据库访问数据库引擎

    简单的说就是可以让包含用户访问其他数据库,那么来看看如何配置,并且验证一下:   USE test CREATE USER up1 WITH PASSWORD = 'zhuzhu' SELECT *  ...

  7. Microsoft SQL server 2012数据库学习总结(一)

    一.Microsoft SQL Server2012简介 1.基本概要 Microsoft SQL Server 2012是微软发布的新一代数据平台产品,全面支持云技术与平台,并且能够快速构建相应的解 ...

  8. SQL Server 2012复制教程以及复制的几种模式

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  9. SQL Server 2012 Express LocalDB

    微软最新推出的 SQL Server 2012 Express LocalDB 是一种 SQL Server Express 的运行模式,特别适合用在开发环境使用,也内置在 Visual Studio ...

随机推荐

  1. EasyUI文档学习心得

    概述 jQuery EasyUI 是一组基于jQuery 的UI 插件集合,它可以让开发者在几乎完全不需要CSS以及复杂的JS代码情况下完成美观且功能强大的Web界面. 本文主要说明一些如何利用Eas ...

  2. [CLR via C#]26. 计算限制的异步操作

    一.CLR线程池基础 前面说过,创建和销毁线程是一个比较昂贵的操作,太多的线程也会浪费内存资源.由于操作系统必须调度可运行的线程并执行上下文切换,所以太多的线程还有损于性能.为了改善这个情况,CLR使 ...

  3. AC自动机---Keywords Search

    题目网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/A Description In the moder ...

  4. mybatis generator with oracle

    1.generator.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generat ...

  5. java四大域总结

    最近学完了web部分,发现有些地方总是单个容易理解,可是把所有的放在一起来大杂烩,总是有那么几个知识点容易混淆.其实网上的资料已经够多了,虽然也不乏辛劳的搬运工.可是最终的目的不就是要我们自身理解吗? ...

  6. 用php做了下冒泡排序

    大学没好好读书,那会没怎么明白冒泡排序是这么回事 早上睡到九点多起来,就在房间看书.听歌,下午吃完饭做了下冒泡排序,现在把代码贡献如下: <?php /** * Created by PhpSt ...

  7. Linux下建立Nexus私服

    Linux下建立Nexus私服 要安装3个东西,然后配置私服: 1.JDK 2.Maven 3.Nexus 然后配置 1.JDK的安装 下载JDK安装包,格式为RPM格式,安装即可 安装程序 #rpm ...

  8. 搭建angularjs API文档站点

    提供一个国内可以访问的 angularjs API文档站点 http://i.frllk.com/ 文档直接在 github 上下载的: https://github.com/angular-cn/n ...

  9. spring boot学习笔记

    spring boot 是什么 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. spring boot采用了“约定优于配置” ...

  10. spring bean加载顺序指定方式之一

    在某些情况下,我们在容器启动的时候做一些事情,举个例子,加载缓存等.. 此时我们会希望某个bean先被加载并执行其中的afterpropertiesset方法. 因为spring默认是通过contex ...