SQLServer复制和数据库镜像详细配置部署(一)

2015-07-24 08:08:00 · 作者: · 浏览: 2

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

关于镜像:数据库镜像

关于复制:SQL 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. 主体数据库和镜像数据库必须共享分发服务器。 建议此处使用远程分发服务器,如果发布服务器有意外故障转移,则远程分发服务器可以提供较大的容错能力。


?

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

?

3. 存在于数据库外部的元数据和对象不复制到镜像数据库,包括登录名、作业、链接服务器等等。 如果要求镜像数据库中有元数据和对象,则必须手动复制它们。


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

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

2. 配置分发服务器;(参考 如何配置发布和分发 , 如何在分发服务器上启用远程发布服务器)

3. 配置发布和订阅;(参考 如何创建事务性发布的可更新订阅 ,SqlServer 使用脚本创建分发服务及事务复制的可更新订阅)

说明及注意修改的地方:

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

对应数据库用户:[UserReplMirror]

测试数据库:[DemoDB]

确保各服务器能相互访问

数据库 [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



--  镜像(创建用户