本文将介绍如何实现Alwayson + Replication ,通过AlwaysOn实现Publication
database的高可用性,使Publication
database在failover 之后事务复制可以正常运行。

 
 

拓扑如下:

 
 

 
 

Publisher primary

Denali1

Publication database

tranPubDB

Publication name

tranPublicationTest

Publisher secondary

Denali3

Distributor

Denali2

  

  

AlwaysOn Availability Group name

Liwei

Listener

liweion

 
 

 
 

 
 

 
 

首先配置AlwaysOn Availability Group

  1. 登陆Denali1对tranPubDB进行完全备份: backup
    database tranPubDB to
    disk='tranpubdb.bak'
    with
    init
  2. 右键点击AlwaysOn High Availability。

  1. 选择TranPubDb,如果之前不进行备份,Status会显示'Full backup is required'的提示。

 
 

  1. 指定Replicas:添加priamry 和secondary。

  1. 添加Listener。Listener将会用于后续的操作。

  1. 选择初始化数据的方式。

  1. 验证。

 
 

AlwaysOn的配置就结束了。

 
 

接下来配置事务复制

(1,2,3步的配置和普通的事务复制完全一致,详细步骤请您参考http://www.sql-server-performance.com/2010/transactional-replication-2008-r2/)

  1. 连接Denali2:
    1. 将Denali2配置为distributor .
    2. 在Denali2里指定Denali1和Denali3为发布服务器
  2. 连接Denali3:指定Denali2为分发服务器
  3. 连接Denali1:
    1. 指定Denali2为分发服务器.
    2. 创建发布
  4. 连接Denali2, 在分发数据库下执行下面的语句. 执行下面的语句之后,logreader就可以通过Listener连接到正在工作的primary
    server了。请注意,这一步是实现Publication database高可用性的关键步骤。

    EXEC
    sys.sp_redirect_publisher 

    @original_publisher =
    'Denali1',

    @publisher_db =
    'tranPubDB',

    @redirected_publisher =
    'liweion';----将之前创建的listener带入到这个参数

    配置步骤就全部完成了,之后您可以任意添加订阅,当failover发生之后,事务复制也可以正常工作。

     
     

     
     

     
     

     
     

    如何配制Subscription database
    +AlwaysON

    (需要说明的是:当subscription database 的availability group发生failover后,replication是无法自动工作的,我们需要一些手工操作)

    当前拓扑如下

     
     

Publisher

Denali1

Publication database

tranPubDB

Publication name

tranPublicationTest

Distributor

Denali2

Subscriber  primary

Denali4

Subscriber  secondary

Denali5

Subscription database

subDB

 
 

 
 

  1. 假设subscriber的Availability
    group发生了failover,此时distrubiton
    agent是无法工作的。
  2. 切换之后,Denali5成为新的primary。
  3. 连接到发布服务器Denali1,进入发布数据库tranPubDB,将发布设置为运行从备份初始化: EXEC
    sp_changepublication
    @publication =
    'tranPublicationTest', @property =
    'allow_initialize_from_backup', @value =
    'true';
  4. 连接到新的Denali5. 进入订阅数据库:
    1. 得到当前订阅的LSN: SELECT transaction_timestamp,
      *
      FROM MSreplication_subscriptions;
    2. 清除订阅数据库的原数据:EXEC
      sp_subscription_cleanup
      @publisher =
      'Denali1', @publisher_db =
      'tranPubDB'
  5. 连接到发布服务器,将新的primary
    server的数据库指定为订阅:

    EXEC
    sp_addsubscription
    -- past the LSN before executing

    @publication =
    'tranPublicationTest',

    @subscriber =
    'Denali5',

    @destination_db =
    'subDB',

    @subscription_Type =
    'Push',

    @sync_Type =
    'initialize from LSN',

    @subscriptionlsn = 0x00000023000000E60003000000000000, ----这个值就是我们在4 a)步骤得到的transaction_timestamp

    @article =
    'all',

    @update_mode =
    'read only',

    @subscriber_type = 0;

     
     

    执行完这步之后,事务复制就可以正常工作了。

     
     

Alwayson+Replication的更多相关文章

  1. SQLServer AlwaysOn在阿里云的前世今生

    缘起 早在2015年的时候,随着阿里云业务突飞猛进的发展,SQLServer业务也积累了大批忠实客户,其中一些体量较大的客户在类似大促的业务高峰时RDS的单机规格(规格是按照 内存CPUIOPS 一定 ...

  2. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  3. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  4. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  5. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  6. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  7. (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...

  8. (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    原文地址:  http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...

  9. (转)从0开始搭建SQL Server AlwaysOn 第一篇(配置域控+域用户DCADMIN)

    原文地址: http://www.cnblogs.com/lyhabc/p/4678330.html 实验环境: 准备工作 软件准备 (1) SQL Server 2012 (2) Windows S ...

随机推荐

  1. CSS水平垂直居中总结

    行内元素水平居中 把行内元素包裹在块级父元素中,且父元素中的css设置text-align:center; <!DOCTYPE html> <html> <head> ...

  2. Android中的内部类引起的内存泄露

    引子 什么是内部类?什么是内存泄露?为什么Android的内部类容易引起内存泄露?如何解决? 什么是内部类? 什么是内部类?什么又是外部类.匿名类.局部类.顶层类.嵌套类?大家可以参考我这篇文章 ,再 ...

  3. http协议读书笔记1-概述

    1.http协议在网络中的位置: http协议位于TCP协议的上层,http试用tcp来传输其报文数据,tcp在ip的上层. 2.浏览器发起连接的过程 上述图的过程是: 浏览器从url中解析出服务区的 ...

  4. 【转】Windows Phone 8 开发环境的搭建

    1.先安装Microsoft Visual Studio 2012旗舰版,安装包自己下载. 系统必须是Win8 X64 对于软硬件的检测可以参照: Windows Phone 8开发环境搭建之一.电脑 ...

  5. highcharts插件使用总结和开发中遇到的问题及解决办法

    这里使用的highchart是2014-01-09从官网下载的版本,版本号是3.0.8, 当过了几天后,发现版本号变成了3.0.9,不由得的感叹highchart的版本更新之快. 在jsp中使用hig ...

  6. linux 文件夹说明,用户添加删除,不熟悉的命令

    一.Linux 根目录下的文件夹说明 usr 程序默认安装路径,相当于windows的 program 附显示当前所处位置:pwd 二.用户 用户添加:useradd 用户名 passwd 用户名 u ...

  7. mac系统如何关闭root账户

    第一步:系统偏好设置 ->用户与群组 第二步:登录选项 ->解锁 ->单击网络帐户服务器加入 第三步:打开目录实用工具 第四步:菜单栏 ->编辑 ->停用 Root 用户 ...

  8. [AX2012]Report data provider调试

    运行使用RDP作为数据源的报表时,RDP类被编译成.NET的服务调用,RDP是X++的代码,它的调试是在MorphX调试器中完成.要在MorphX调试器中调试RDP的X++代码需要以下配置: 添加AO ...

  9. C# WinForm程序打印条码 Code39码1

    做WinForm程序需要打印条码,为了偷懒不想自己写生成条码的程序在网上下载一个标准的39码的字体,在程序里面换上这个条码字体即可打印条码了. 最重要的一点作为记录: 如果想把“123456789”转 ...

  10. 关于float /double、string类型的hash函数/hash表实现(转)

    #include <ext/hash_map> #include <math.h> #include <stdio.h> using namespace std; ...