SQLserver 能够把镜像和复制同一时候部署,结合了两方的高可用性。能够使数据库得到更好的高可用性和容灾的保证。

关于镜像:

f=255&MSPPError=-2147217396">数据库镜像

关于复制:SQL Server 复制

本章的复制为事务可更新订阅:事务复制的可更新订阅

关于复制和数据库镜像:复制和数据库镜像

理论的东西參考官方文档吧,这里主要是部署配置过程。

下图为本章參考部署的架构图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

本章模拟的server:

kk-ad

192.168.2.1

DC(域控)

kk-db1

192.168.2.10

主机(Replication + Mirror)

kk-db2

192.168.2.11

镜像(Mirror)

kk-db3

192.168.2.12

见证机(WITNESS)+ 分发

kk-db4

192.168.2.13

订阅(測试1个)

将复制与数据库镜像一起使用时。注意下面要求和注意事项:

1. 主体数据库和镜像数据库必须共享分发server。 建议此处使用远程分发server,假设公布server有意外故障转移,则远程分发server能够提供较大的容错能力。

2. 对于合并复制,以及对于使用仅仅读订阅server或排队更新订阅server的事务复制。复制支持对公布数据库进行镜像。 不支持即时更新对等拓扑中的订阅server、Oracle 公布server、公布server并又一次公布。

3. 存在于数据库外部的元数据和对象不拷贝到镜像数据库。包含登录名、作业、链接server等等。 假设要求镜像数据库中有元数据和对象。则必须手动复制它们。

配置复制和数据库镜像主要步骤:

1. 配置数据库镜像。(參考 SQLServer 数据库镜像(二)域环境中完整镜像脚本配置

2. 配置分发server;(參考 怎样配置公布和分发  。 怎样在分发server上启用远程公布server

3. 配置公布和订阅。(參考 怎样创建事务性公布的可更新订阅  ,SqlServer 使用脚本创建分发服务及事务复制的可更新订阅

说明及注意改动的地方:

本測试使用域账号作为数据库登录账号:[KK\UserReplMirror]

相应数据库用户:[UserReplMirror]

測试数据库:[DemoDB]

确保各server能相互訪问

数据库 [DemoDB]  恢复模式为完整模式(镜像必须)

数据库 [DemoDB]  全部者改为 [sa]

账号 [KK\UserReplMirror] 授予 sysadmin 权限。或者在数据库 [DemoDB] 中授予用户 [UserReplMirror] 数据库角色为 [db_owner]

复制的代理作业的全部者都改为[sa]

数据库外的对象不会镜像:如登录账户。代理作业 等

1. 配置数据库镜像:

--主体创建数据库
USE [master]
GO
CREATE DATABASE [DemoDB]
GO
ALTER DATABASE [DemoDB] SET RECOVERY FULL WITH NO_WAIT
GO --主体:创建证书 和 备份
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'kk_2012@';
GO
CREATE CERTIFICATE Cert_kk_db1_mssqlserver
WITH SUBJECT = 'Cert_kk_db1_mssqlserver',
START_DATE = '2015-06-01',EXPIRY_DATE = '2018-06-01';
GO
BACKUP CERTIFICATE Cert_kk_db1_mssqlserver
TO FILE = 'C:\Databases\Cert_kk_db1_mssqlserver.cer';
GO --镜像:创建证书 和 备份
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'kk_2012@';
GO
CREATE CERTIFICATE Cert_kk_db2_mssqlserver
WITH SUBJECT = 'Cert_kk_db2_mssqlserver',
START_DATE = '2015-06-01',EXPIRY_DATE = '2018-06-01';
GO
BACKUP CERTIFICATE Cert_kk_db2_mssqlserver
TO FILE = 'C:\Databases\Cert_kk_db2_mssqlserver.cer';
GO --见证:创建证书 和 备份
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'kk_2012@';
GO
CREATE CERTIFICATE Cert_kk_db3_mssqlserver
WITH SUBJECT = 'Cert_kk_db3_mssqlserver',
START_DATE = '2015-06-01',EXPIRY_DATE = '2018-06-01';
GO
BACKUP CERTIFICATE Cert_kk_db3_mssqlserver
TO FILE = 'C:\Databases\Cert_kk_db3_mssqlserver.cer';
GO -- 交换证书(相互拷贝证书):
/*
主体证书(复制到)————>镜像、见证
镜像证书(复制到)————>主体、见证
见证证书(复制到)————>主体、镜像
*/ -- 主体(创建用户、还原证书、创建端点):
USE master
GO
CREATE LOGIN [KK\UserReplMirror] FROM WINDOWS;
GO
CREATE USER [UserReplMirror] FOR LOGIN [KK\UserReplMirror];
GO
CREATE CERTIFICATE [Cert_kk_db2_mssqlserver]
AUTHORIZATION [UserReplMirror]
FROM FILE = 'C:\Databases\Cert_kk_db2_mssqlserver.cer';
GO
CREATE CERTIFICATE [Cert_kk_db3_mssqlserver]
AUTHORIZATION [UserReplMirror]
FROM FILE = 'C:\Databases\Cert_kk_db3_mssqlserver.cer';
GO CREATE ENDPOINT [Endpoint_For_Mirror]
AUTHORIZATION [KK\UserReplMirror]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = PARTNER, AUTHENTICATION = CERTIFICATE Cert_kk_db1_mssqlserver, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
--GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserReplMirror];
--GO -- 镜像(创建用户、还原证书、创建端点):
USE master
GO
CREATE LOGIN [KK\UserReplMirror] FROM WINDOWS;
GO
CREATE USER [UserReplMirror] FOR LOGIN [KK\UserReplMirror];
GO
CREATE CERTIFICATE [Cert_kk_db1_mssqlserver]
AUTHORIZATION [UserReplMirror]
FROM FILE = 'C:\Databases\Cert_kk_db1_mssqlserver.cer';
GO
CREATE CERTIFICATE [Cert_kk_db3_mssqlserver]
AUTHORIZATION [UserReplMirror]
FROM FILE = 'C:\Databases\Cert_kk_db3_mssqlserver.cer';
GO CREATE ENDPOINT [Endpoint_For_Mirror]
AUTHORIZATION [KK\UserReplMirror]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = PARTNER, AUTHENTICATION = CERTIFICATE Cert_kk_db2_mssqlserver, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
--GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserReplMirror];
--GO -- 见证(创建用户、还原证书、创建端点):
USE master
GO
CREATE LOGIN [KK\UserReplMirror] FROM WINDOWS;
GO
CREATE USER [UserReplMirror] FOR LOGIN [KK\UserReplMirror];
GO
CREATE CERTIFICATE [Cert_kk_db1_mssqlserver]
AUTHORIZATION [UserReplMirror]
FROM FILE = 'C:\Databases\Cert_kk_db1_mssqlserver.cer';
GO
CREATE CERTIFICATE [Cert_kk_db2_mssqlserver]
AUTHORIZATION [UserReplMirror]
FROM FILE = 'C:\Databases\Cert_kk_db2_mssqlserver.cer';
GO USE master;
CREATE ENDPOINT [Endpoint_For_Mirror]
AUTHORIZATION [KK\UserReplMirror]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = WITNESS, AUTHENTICATION = CERTIFICATE Cert_kk_db3_mssqlserver, ENCRYPTION = REQUIRED ALGORITHM AES)
GO
--GRANT CONNECT ON ENDPOINT::Endpoint_For_Mirror TO [KK\UserReplMirror];
--GO --主体:备份数据库
USE master;
BACKUP DATABASE [DemoDB]
TO DISK = 'C:\Databases\DemoDB.BAK' WITH INIT,FORMAT
GO BACKUP LOG [DemoDB]
TO DISK = 'C:\Databases\DemoDB_LOG.BAK' WITH INIT,FORMAT
GO --镜像:还原数据库(NORECOVERY)
USE master;
RESTORE DATABASE [DemoDB]
FROM DISK = N'C:\Databases\DemoDB.BAK'
WITH FILE = 1,
MOVE N'DemoDB' TO N'C:\Databases\DemoDB.mdf',
MOVE N'DemoDB_log' TO N'C:\Databases\DemoDB_log.ldf',
NOUNLOAD, NORECOVERY, STATS = 10
GO RESTORE DATABASE [DemoDB]
FROM DISK = N'C:\Databases\DemoDB_LOG.BAK'
WITH NORECOVERY
GO --開始镜像 --在【镜像】运行,PARTNER为主服务器
USE [master]
GO
ALTER DATABASE [DemoDB] SET PARTNER = 'TCP://192.168.2.10:5022';
GO --在【主体】运行,PARTNER为镜像服务器
USE [master]
GO
ALTER DATABASE [DemoDB] SET PARTNER = 'TCP://192.168.2.11:5022';
GO
ALTER DATABASE [DemoDB] SET WITNESS = 'TCP://192.168.2.12:5022';
GO --在主体运行:设置为高安全模式
ALTER DATABASE [DemoDB] SET SAFETY FULL

EXEC [DemoDB].dbo.sp_changedbowner @loginame = N'sa', @map = false
GO
EXEC master..sp_addsrvrolemember @loginame = N'KK\UserReplMirror', @rolename = N'sysadmin'
GO

2. 配置分发server

登录到该server。

kk-db3

192.168.2.12

见证机(WITNESS)+ 分发

右键复制,配置分发。

分发server选择 “kk-db3” 本地server。加入 “KK-DB1 ” (主机)和  “KK-DB2 ” (镜像) 为公布server。否则连接不到该分发server。

注意:创建分发server时,要求数据管理password。右键“复制”—“分发server属性”—“公布server”  可看到和设置。

配置用于故障转移的复制代理

可配置參数 PublisherFailoverPartner 的代理:

1 - 复制快照代理(对于全部公布)

2 - 复制日志读取器代理(对于全部事务公布)

4 - 复制合并代理(对于合并订阅)

9 - 复制队列读取器代理(对于支持排队更新订阅的事务公布)

当前为可更新订阅,仅仅要更改1,2,9 即可(分发库运行)

--@parameter_value 为镜像服务
exec sp_add_agent_parameter @profile_id = 1,
@parameter_name = N'-PublisherFailoverPartner',
@parameter_value = N'kk-db2' exec sp_add_agent_parameter @profile_id = 2,
@parameter_name = N'-PublisherFailoverPartner',
@parameter_value = N'kk-db2' exec sp_add_agent_parameter @profile_id = 9,
@parameter_name = N'-PublisherFailoverPartner',
@parameter_value = N'kk-db2'

接着 重新启动SQL Server 代理

3. 配置公布和订阅

登录到server

kk-db1

192.168.2.10

主机(Replication + Mirror)

创建本地公布,选择分发server。

(仅仅有分发中加入了公布server的信息。此处才干訪问)

这里须要输入在分发server设置的管理password。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

注:此时在分发server( 192.168.2.12 )生成的复制相关作业代理,全部者改为 [sa]

登录到server

kk-db4

192.168.2.13

订阅

创建订阅:(公布选择 “kk-db1”)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

创建完毕订阅后。初始化订阅,登录到server:

kk-db1

192.168.2.10

主机(Replication + Mirror)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

登录到server:

kk-db3

192.168.2.12

见证机(WITNESS)+ 分发

右键 “复制”—“启动复制监视器”,右键 “加入公布server”,将 公布server “kk-db1” 加入。就可以看到复制监控情况

配置已完毕!

~

4. 測试

如今把主体(Replication + Mirror)服务停止:

停止后,到原来的镜像(kk-db2)查看。镜像变成了主体。本地公布也出现了(原来镜像是不存在的)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

可是。当我从如今的主体(kk-db2)插入数据时,数据并没有同步到订阅!

~

难道是哪里配置不正确??!~~

网上查找后,发现是BUG,原因是:

This problem occurs because Log Reader Agent does not copy the transactions that are marked for replication from the transaction log into the distribution database. Log Reader Agent cannot read past a specific log sequence number (LSN). This specific LSN
represents the last LSN that has been hardened to the transaction log of the mirror database.

FIX: Changes in the publisher database are not replicated to the subscribers in a transactional replication if the publisher database runs exposed in a database mirroring
session in SQL Server 2005

临时不修复,用其它方法设置也能够:

(先启动 kk-db1 的SQLserver 服务)

在主体 和 镜像中,设置服务启动參数。加入 -T1448,重新启动服务就可以。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2sxODU4MDA5NjE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

此时停止主体实例。镜像变成主体。操作数据可正常和订阅同步了!

~

至此,就算完毕了,个人測试,也可能有不正确的地方。

SQLServer 复制和数据库镜像 具体配置部署的更多相关文章

  1. 003.SQLServer数据库镜像高可用部署

    一 数据库镜像部署准备 1.1 数据库镜像支持 有关对 SQL Server 2012 中的数据库镜像的支持的信息,请参考:https://docs.microsoft.com/zh-cn/previ ...

  2. 如何配置数据库镜像<一>

    一.简介 “数据库镜像”是Sql Server 2005推出的一个主要用于提高数据库可用率的软件解决方案.镜像是基于每个数据库执行的,仅适用于使用完整恢复模式的数据库.简单恢复模式和大容量日志恢复模式 ...

  3. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

  4. 【转】通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  5. SQL Server 数据库镜像

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/镜像 概述 本章内容主要讲述数据库镜像的安装,安装环境是在域环境下进行安装. 环境:SQL Server 2008 r2 企业版 ...

  6. Sqlserver2008 数据库镜像会话的初始连接

    sqlserver2008 数据库镜像服务配置完成后,大家会发现我们有了两个数据库服务,这两个服务可以实现自动故障转移,那么我们的程序如何实现自动连接正常的数据库呢? 这个问题很简单,使用ADO.NE ...

  7. 数据库镜像转移Failover Partner

    数据库主体镜像转换:任务 - 镜像 - 故障转移 sqlserver2008 数据库镜像服务配置完成后,大家会发现我们有了两个数据库服务,这两个服务可以实现自动故障转移,那么我们的程序如何实现自动连接 ...

  8. SQLServer数据库镜像配置

    目录 一.目标...2 二.前提条件.限制和建议...2 三.设置概述...2 四.安装Sql Server 2008 enterprise X64.3 4.1.安装.NET3.5.3 4.2.安装时 ...

  9. SQL Server 2008 数据库镜像部署实例之三 配置见证服务器

    SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...

随机推荐

  1. NetBeans 7.2 or 8.0 编辑文件时不显示文件路径。

    NetBeans 7.2 or 8.0 编辑文件时不显示文件路径. 仅仅实用鼠标停在标签上一下,才干够看到.非常不方便. 怎样解: http://plugins.netbeans.org/plugin ...

  2. smartforms换页,

    smartforms换页,可以把最后的窗口设置成最终窗口, 这样页码有可以用系统变量控制: 总页码/页码 :&SFSY-FORMPAGES&

  3. JDBC操作数据库的学习(1)

    单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...

  4. uva 12627

    题意:开始有1个红气球,每小时后1个红气球会变为3个红气球和1个蓝气球,问k小时后第A行到第B行的气球数. 解:用g(k,i)表示第k小时时,从底部数i行的红气球数.所以ans = g(k,2^k-A ...

  5. 28.uva 10891 Game of Sum 记忆化dp

    这题和上次的通化邀请赛的那题一样,而且还是简化版本... 那题的题解      请戳这里 ... #include<cstdio> #include<algorithm> #i ...

  6. HDU4452Running Rabbits(模拟)

    HDU4452Running Rabbits(模拟) pid=4452" target="_blank" style="">题目链接 题目大意: ...

  7. Qt之VLFeat SLIC超像素分割(Cpp版)

    源地址:http://yongyuan.name/blog/vlfeat-slic-with-qt.html 近段时间学了点Qt,恰好前段时间用借助VLfeat以及OpenCV捣鼓了SLIC超像素分割 ...

  8. 实现 select中指定option选中触发事件

    我们在用到下拉列表框select时,需要对选中的<option>选项触发事件,其实<option>本身没有触发事件方法,我们只有在select里的onchange方法里触发. ...

  9. LIS小结(O(∩_∩)O~哄哄)

    ~\(≧▽≦)/~啦啦啦,昨天说的是LCS,今天我们要学习的是LIS,什么是LIS呢?  LIS: 最长有序子序列(递增/递减/非递增/非递减)这么说还是有些模糊,举个例子: 在一个无序的序列a1,a ...

  10. 8592 KMP算法

    8592 KMP算法 时间限制:1000MS  内存限制:1000K 题型: 编程题   语言: 无限制 描写叙述 用KMP算法对主串和模式串进行模式匹配. 本题目给出部分代码.请补全内容. #inc ...