SQL Server2012高可用之事物复制(发布订阅)测试

image

 

(一)测试目的

目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既不可写也不可读,即采用的高可用技术为“数据库镜像”。存在的问题为:开发人员需要登录到生产服务器上去确认数据,无法保证数据安全。因此,需要搭建一种主备模式,保证备库可读,从而让开发人员在不接触生产环境的情况下也能通过备库校验数据的正确性。

 

(二)技术选择

经过确认,SQL Server2012的高可用主要有以下方案:

高可用技术

优势

劣势

最终选择

SQL Server集群

多台服务器组成一个集群,可保证一个节点出故障,其它节点仍正常运行

集群使用共享存储,存储故障会导致整个集群出故障

不符合本次主备分离的特点。

日志传送

通过主库的日志恢复备库,可保证主备库数据一摸一样

备份作业每隔一段时间触发一次,所以不是实时的

日志恢复有延迟,无法查到最新的数据

数据库镜像

可保证主备库数据一摸一样

镜像数据库是一个一直处于“恢复”状态的数据库,因此不能直接访问

备库无法访问,不符合要求

复制-->快照复制

直接同步数据库某一时刻的整个状态

数据有延迟、需要保证整体数据量小,数据量大的时候速度非常慢

不符合要求

复制-->事务复制

通过日志读取代理和分发代理程序,将发布服务器上的数据更改和架构修改几乎实时传递给订阅服务器;

暂时无

符合要求

复制-->合并复制

允许用户同时修改订阅服务器和发布服务器上的数据,并把这些修改合并成一个统一的结果

暂时无

实际环境中主库不需要同步备库的变更,不符合要求

经过确认,使用复制技术中的事物复制来测试是否满足需求。

    

(三)搭建步骤

测试基础环境信息如下:

 

主库

备库

操作系统

Windows Server 2012 R2 64bit

Windows Server 2012 R2 64bit

数据库版本

cn_sql_server_2012_enterprise_edition_x86_x64

cn_sql_server_2012_enterprise_edition_x86_x64

服务器名称(IP)

WIN-PRIMARY(10.1.106.2)

WIN-STANDBY(10.1.106.3)

同步数据库信息

masterdb

slavedb

 

(3.1)配置分发(主库执行)

STEP1: 在SSMS“对象资源管理器”中选择“复制”,右键“配置分发”,弹出“配置分发向导”,点击“下一步”

wps42

STEP2: 分发服务器可以是当前服务器,也可以是其它服务器,这里选择当前服务器作为分发服务器

wps43[1]

STEP3: 快照文件夹用于存放快照

wps44

该文件夹需要手动修改权限,最好直接给“Everyone”的权限

wps45

STEP4: 配置分发数据库,默认即可

wps46

STEP5: 配置发布服务器,默认即可

wps47

STEP6: 后续步骤默认即可

 

(3.2)创建发布(主库执行)

STEP1: 在SSMS“对象资源管理器”中选择“复制”,点击“本地发布”,右键“新建发布”

wps1

STEP2:选择要发布的数据库,这里选择要发布的数据库,即要进行主备同步的数据库。本次测试为masterdb数据库的所有表,选择masterdb

wps2

STEP3:选择发布类型,这里选择事务发布

wps3

STEP4:发布项目,选择要发布的表。需要注意,要发布的表必须要有主键,否则无法发布。

wps4

STEP5:是否要过滤数据,这里因为要保持主备数据相同,不过滤,直接下一步。

wps5

STEP6:勾选“立即创建快照并使快照保持可用状态,以初始化订阅”

wps6

STEP7:代理安全性,选择“安全设置”

wps7

wps8

STEP8:默认在向导结束时创建发布

wps9

STEP9:填写发布名称,点击“完成”

wps10

STEP10:确认发布成功

wps11

发布成功后,可以在对象资源管理器的“复制”-->”本地发布”下面找到新的发布:

wps12

(3.3)创建订阅(备库执行)

STEP1:在备库服务器上创建新的数据库slavedb。在SSMS的“对象资源管理器”-->“数据库”-->右键点击“新建数据库”,创建slavedb。

wps13

STEP2:选择“复制”-->“本地订阅”-->“新建订阅”

wps14

STEP3:发布。“发布服务器”菜单选择“<查找SQL Server发布服务器...>”,在弹出的菜单中,填写主数据库的信息,然后“连接”,如下:

wps15

在“数据库和发布”中选择主库的发布

wps16

STEP4:在分发代理位置中选择“在分发服务器xxx上运行所有代理(推送订阅)”

wps17

STEP5:订阅服务器中选择“订阅数据库”为slavedb

wps18

STEP6:分发代理安全性,点击红框部分

wps19

如下图设置分发代理安全性

wps20

STEP7:同步计划,选择“连续运行”

wps21

STEP8:初始化订阅,选择“立即”

wps22

STEP9:保持默认

wps23

wps24

STEP10:确认订阅成功

wps25

刷新“本地订阅”,即可看到刚刚创建的订阅

wps26

(3.4)检查数据同步状态

检查“对象资源管理器”-->“数据库”-->“slavedb”-->“表”下面是否已经有表

wps27

检查表中是否有数据

wps28

如果有表和数据,那么说明数据已经同步过来。或者在主库手动插入数据,看是否会同步到备库,也是一个好办法。

 

(四)数据库操作对复制的影响

(4.1)添加新表(主库操作)

结果:主库添加新表,备库并不会自动同步。

如果要同步,有3种方法:

方法一:在发布服务器重新生成快照,重启发布、分发作业

STEP1:在主库上打开SSMS,点击“复制”-->“本地发布”,点击要修改的发布名称“[masterdb]:publish_masterdb”-->右键“属性”

wps29

STEP2:在“项目”中,去掉勾选“仅显示列表中已选中的项目”,即可看到所有表,选择新表,点击确定,

wps30

STEP3:选择发布,重新初始化

wps31

wps32

STEP4:重启快照代理和分发代理

首先确认本地发布“publish_masterdb”的快照代理和分发代理的名称。在“SQL Server代理”--“作业活动监视器”,找到“publish_masterdb”相关代理。

image

 

然后关闭快照代理和分发代理(停止作业),最后在开启快照代理和分发代理(作业开始步骤...)

wps34

STEP5:确认备库表是否同步过去

方法二:添加新表到原来的发布中,然后重启发布、分发作业

TEP1:在主库上打开SSMS,点击“复制”-->“本地发布”,点击要修改的发布名称“[masterdb]:publish_masterdb”-->右键“属性”

wps35

STEP2:在“项目”中,去掉勾选“仅显示列表中已选中的项目”,即可看到所有表,选择新表,点击确定,

wps36

STEP3:重启快照代理和分发代理

首先确认本地发布“publish_masterdb”的快照代理和分发代理的名称。在“SQL Server代理”--“作业活动监视器”,找到“publish_masterdb”相关代理。

wps37

然后关闭快照代理和分发代理(停止作业),最后在开启快照代理和分发代理(作业开始步骤...)

wps38

STEP4:确认备库表是否同步过去

方法三:对新表新建发布、订阅

这里以test10表为例,将test10表同步到salvedb中。

STEP1:在主库上对test10表新建事务发布“p_masterdb_test10”

wps39

STEP2:在备库上对“p_masterdb_test10”进行订阅

wps40

STEP3:确认备库表是否同步过去

三种方法使用总结:

方法

使用优劣势

方法一:在发布服务器重新生成快照,重启发布、分发作业

优势:能够在同一个发布中增加新表,管理规范、方便;

劣势:重新初始化步骤会将主库的所有数据重新同步到备库,如果数据量很大,同步速度会较慢;

方法二:添加新表到原来的发布中,然后重启发布、分发作业

优势:1.能够在同一个发布中增加新表,管理规范、方便;

        2.不需要重新生成快照,仅对新加的表增量更新,负载小

个人认为该方法是最优的

方法三:对新表新建发布、订阅

优势:直接对新表新建发布订阅,不影响原有的同步,对业务影响小;

劣势:每次增加新表都需要新建发布订阅,管理上不规范;

(3.2)删除表(主库操作)

结果:主库无法删除正在同步的表。

drop table test01;

报错:

消息 3724,级别 16,状态 2,第 2 行

无法对 表'test01' 执行 删除,因为它正用于复制。

(3.3)修改表结构(主库操作)

结果:①添加列:主库添加列,备库会自动添加列;②删除列:主库删除列,备库会自动删除列;

(3.4)插入、更新、删除数据(主库操作)

结果:主库插入、更新、删除数据,备库自动同步;

(3.5)truncate表(主库操作)

结果:无法执行truncate操作;

truncate table test01;

消息 4711,级别 16,状态 1,第 1 行

无法截断表 'test01',因为该表已为复制发布或者已启用了变更数据捕获。

(3.6)修改操作系统Administrator密码(主库操作)

结果:数据传输正常;

 

(四)如何监控

在SMSS中,点击“复制”-->“启动复制监视器”,即可看到所有的发布、订阅监视列表、代理,双击“订阅监视列表”,即可看到具体的执行记录。

wps41

 

(五)总结

如果使用事务复制:

1.对于要同步到备库的表,必须要有主键;

2.被复制的表在主库无法执行drop、truncate操作;

3.新添加表需要DBA重新手动将其加入到发布中;

4.备库仅仅作为数据查询使用,不具备主备切换的功能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( &#39;table_name&#39; [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: &#39;No Process is on the Other End of the Pipe&#39;。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:&#xD;&#xA;对于指定的缓冲区大小而言,源列的数据太大