事务复制和镜像共存性的测试

事务复制的发布库同时也是镜像的主库,测试的目的是当镜像发生故障转移时,事务复制关系是否能同时自动转移。

环境:JOEPC\SQLJOEC,DB_TEST1,DB_TEST2_VM三台机都是Win2008_R2_SP1+SQLServer2008_R2_SP1.

JOEPC,DB_TEST1都是物理机,DB_TEST2_VM是建立在DB_TEST1上的虚拟机。

关系说明:JOEPC\SQLJOEC是镜像关系的主体,是事务复制关系的发布者,

DB_TEST1是镜像关系的见证者,是事务复制的分发者和订阅者,

DB_TEST2_VM是镜像关系的镜像端。

1. 首先在JOEPC\SQLJOE上创建测试库和表。

USE TEST
GO
CREATE TABLE dbo.tb_Test
(
 ID INT NOT NULL,
 VAL NVARCHAR(20)
 )
GO
ALTER TABLE [dbo].[tb_Test] ADD CONSTRAINT PK_tbTest_ID PRIMARY KEY  CLUSTERED
(
	[ID] ASC
)
GO
INSERT INTO dbo.tb_Test
        ( ID, VAL )
VALUES  (1,N‘A‘),(2,N‘B‘),(3,N‘C‘),(4,N‘D‘)
       ,(5,N‘E‘),(6,N‘F‘),(7,N‘G‘),(8,N‘H‘);
GO

2. 参考工作组模式下SQL Server 2008 R2 事务复制建立JOEPC\SQLJOE与DB_TEST1事务复制关系。

3. 参考工作组模式下SQL Server 2008 R2 数据库镜像建立JOEPC\SQLJOE为主体,DB_TEST2_VM为镜像,DB_TEST1为见证的镜像关系。

在这里我遇到一个问题见证机总是连接不上,最后放弃用代码来实现,用镜像配置向导重新配置,成功

4. 在分发服务器DB_TEST1上把镜像服务器DB_TEST2_VM加入到发布者。

这一步的目的:1.将镜像添加为发布者。2. 镜像成为发布者后与镜像主体使用同一个快照文件夹,同一个发布服务器。

5. 在分发服务器上执行以下代码。profile_id代表不同的配置文件,下面列出几个对应关系。

--查看代理配置文件
-- 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent.
exec sp_help_agent_profile
--因为测试做的是事务复制,所以需要修改配置文件只包括Snapshot Agent,Log Reader Agent.
exec sp_add_agent_parameter @profile_id = 1, @parameter_name = N‘-PublisherFailoverPartner‘,
 @parameter_value = N‘DB_TEST2_VM‘;
exec sp_add_agent_parameter @profile_id = 2, @parameter_name = N‘-PublisherFailoverPartner‘,
@parameter_value = N‘DB_TEST2_VM‘;

6.基本配置完成。测试验证一下,把JOEPC\SQLJOE的SQLSERVER服务停掉,看一下镜像和复制关系能否转移。

6.1 镜像关系成功转移过来了。

6.2 事务复制关系开始时遇到一个错误:“进程无法在“DB_TEST2_VM”上执行“sp_replcmds”。 (源: MSSQL_REPL,错误号: MSSQL_REPL20011)”。

这个错误是个权限问题,执行sp_replcmds需要sysAdmin权限,于是把TEST库的所有者改成SA。在DB_TEST2_VM上执行:

USE TEST
GO
EXEC sp_changedbowner ‘SA‘,‘dbowner‘
GO

OK,事务复制也正常了。不过还是插入两条数据看一下,能否同步到DB_TEST1下的订阅库TEST_Subscriber。

INSERT INTO dbo.tb_Test(ID,VAL) VALUES(9,N‘I‘),(10,N‘J‘)

在DB_TEST1的订阅库TEST_Subscriber查询,发现数据没有同步过来。在日志读取代理的作业历史中找到“复制的事务正等待下一次日志备份或等待镜像伙伴更新”

在MSDN上找到:

这个测试中镜像用的正是“具有自动故障转移的高安全性模式”,并且“步骤6”中把JOEPC\SQLJOE的SQLSERVER停掉了。

所以只有当JOEPC\SQLJOE的SQLSERVER联机,重新构成镜像关系后,所做的修改才会从分发库传播到订阅库。

    于是启动JOEPC\SQLJOE的SQLSERVER,果不其然,数据同步过去了。

总结:

1. 镜像主体库,可以同时做事务复制的发布库,并且能实现故障自动转移。

2. 我想要给一个7*24的关键库,用事务复制做读写分离,并且用“具有自动故障转移的高安全性模式”做热备。测试的结果有些鸡肋。

当镜像关系中,有一个伙伴离线,故障自动转移后所做数据修改不会传播到订阅端。那么读写分离的只读库的数据也严重滞后,而不可用。

-------------------------------------

作者:Joe.TJ

时间: 2024-12-22 20:27:20

事务复制和镜像共存性的测试的相关文章

sql server 复制,镜像,日志传输及故障转移集群区别

复制:将数据传输到其他服务器上存储,做备份.镜像:主服务器数据库挂了,另一台自动成为主服务器运行,日志:可控制的镜像.集群:主服务器挂了,另一台自动成为主服务器运行,并不仅限于数据库. 明细:引自http://hi.baidu.com/jaimy_jie/blog/item/6e099ed52f42a4d250da4b24.html 一, 数据库复制 SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份

(初稿)SQL Server 复制(Replication)系列(2)——事务复制搭建

本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为发布服务器,RepB为订阅服务器.均安装WindowsServer 2008R2英文版(在外企工作的原因).并确保两台服务器能互访. SQL Server: 在上面的虚拟机中分别安装SQLServer 2008 R2 x64 英文企业版. 演示数据库: 微软示例数据库AdventureWorks2008 R2 配置事务复制 复制的配置可以使用T-SQL来实现,但是所需的T-SQL及存储过程加

SQL Server 复制(Replication) ——事务复制搭建

本文演示如何搭建最基本的事务复制. 环境准备: 虚拟机2台: 服务器名分别为RepA和RepB,RepA为发布服务器,RepB为订阅服务器.均安装WindowsServer 2008R2英文版(在外企工作的原因).并确保两台服务器能互访. SQL Server: 在上面的虚拟机中分别安装SQLServer 2008 R2 x64 英文企业版. 演示数据库: 微软示例数据库AdventureWorks2008 R2 配置事务复制 复制的配置可以使用T-SQL来实现,但是所需的T-SQL及存储过程加

事务复制中的分区表

背景 事务复制中发布表有分区表,如何配置发布项,使分区结构传播到订阅库?有何限制? 测试环境 CodeUSE [master] GO CREATE DATABASE [OMS_Test] ON PRIMARY ( NAME = N'OMS_Test_data1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\OMS_Test.mdf' , SIZE = 34816KB ,

监控SQL Server事务复制

通常,我们可以使用SSMS的复制监视器来监控复制.但我们不能24小时盯着看,得使用自动化的方式来监控它.微软在distribution数据库提供了系统存储过程dbo.sp_replmonitorsubscriptionpendingcmds,用于返回订阅上等待的命令数,以及需要投递所有这些命令到订阅者的时间的预估.我创建了一个每10分钟运行的作业,保存状态的历史记录数据到一个表,数据保留14天. 这个表在订阅者服务器的DBA数据库创建,代码如下: CREATE TABLE dbo.Replica

事务复制

本文截取自MSDN https://msdn.microsoft.com/zh-cn/library/ms151176(v=sql.120).aspx 事务复制通常从发布数据库对象和数据的快照开始.创建了初始快照后,接着在发布服务器上所做的数据更改和架构修改通常在修改发生时(几乎实时)便传递给订阅服务器.数据更改将按照其在发布服务器上发生的顺序和事务边界应用于订阅服务器,因此,在发布内部可以保证事务的一致性. 事务复制通常用于服务器到服务器环境中,在以下各种情况下适合采用事务复制: 希望发生增量

在Sql2000 sql2005 sql2008 下已能实现事务复制的强制订阅,但请求订阅始终不能实现总有下列错误提示

硬件环境 : 一台服务器 安装了 sqlserver2008 数据库 局域网还有一台机器 安装了 sqlserver2000数据库 两台server 通信 共享均没有问题 同步过程中遇到的问题  : 在Sql2000下已能实现事务复制的强制订阅,但请求订阅始终不能实现总有下列错误提示: 进程未能读取文件 "\\快照路径" 由于发生操作系统错误 5.. 步骤失败. 数据库的 [订阅] .[公布] 设置步骤 : 做了 从sql2008 到sql2000的数据同步 ,在sql2008数据库

如何处理SQL Server事务复制中的大事务操作

如何处理SQL Server事务复制中的大事务操作 事务复制的工作机制 事务复制是由 SQL Server 快照代理.日志读取器代理和分发代理实现的.快照代理准备快照文件(其中包含了已发布表和数据库对象的架构和数据),然后将这些文件存储在快照文件夹中,并在分发服务器中的分发数据库中记录同步作业. 日志读取器代理监视为事务复制配置的每个数据库的事务日志,并将标记为要复制的事务从事务日志复制到分发数据库中,分发数据库的作用相当于一个可靠的存储-转发队列. 分发代理将快照文件夹中的初始快照文件和分发数

ubuntu12.04 64bit libncurses5-dev和libncurses5-dev:i386共存性问题讨论

ubuntu12.04 64bit 编译kernel(或者make menuconfig)源码时出现如下错误: HOSTLD scripts/kconfig/mconf scripts/kconfig/mconf.o: In function `show_help': mconf.c:(.text+0x811): undefined reference to `stdscr' scripts/kconfig/mconf.o: In function `main': mconf.c:(.text+