【SQLServer高可用性】数据库镜像:在SQLServer2008R2上的配置数据库镜像(四)

2014-11-24 08:28:44 · 作者: · 浏览: 17
M FILE = 'c:\share\CT_Mirror_SrvWitness.cer' -- b. 建立登录 CREATE LOGIN LOGIN_Mirror_SrvWitness FROM CERTIFICATE CT_Mirror_SrvWitness -- c. 授予对数据库镜像端点的 connect 权限 GRANT CONNECT ON ENDPOINT::EDP_Mirror TO LOGIN_Mirror_SrvWitness GO 4、见证服务器的配置

把主体服务器和镜像服务器上的证书,拷贝到见证服务器上后,再执行下面的代码:

-- ===========================================
-- 无论是主体服务器、镜像服务器, 还是见证服务器
-- 除特别说明外,均需要保证下面的操作在master库中执行
USE master
GO

-- ===========================================
--(9)  配置见证服务器
-- 此操作在见证服务器上执行
-- a. 完成见证服务器上数据库镜像端点的传输安全模式配置
-- (a). 用于数据库镜像端点身份验证的证书
IF NOT EXISTS(  -- 使用数据库主密钥加密证书
		SELECT * FROM sys.symmetric_keys
		WHERE name = N'##MS_DatabaseMasterKey##')
	CREATE MASTER KEY
		ENCRYPTION BY PASSWORD = N'abc.123'

CREATE CERTIFICATE CT_Mirror_SrvWitness
WITH
	SUBJECT = N'certificate for database mirror',
	START_DATE = '19990101',
	EXPIRY_DATE = '99991231'
GO


-- (b). 备份证书, 以便在与此端点通信的另一端建立此证书
BACKUP CERTIFICATE CT_Mirror_SrvWitness
TO FILE = 'c:\share\CT_Mirror_SrvWitness.cer'
GO


-- (c). 数据库镜像端点
CREATE ENDPOINT EDP_Mirror
	STATE = STARTED 
	AS TCP(
		LISTENER_PORT = 5022,  -- 镜像端点使用的通信端口
		LISTENER_IP = ALL)     -- 侦听的IP地址
    FOR DATABASE_MIRRORING(
		AUTHENTICATION = CERTIFICATE CT_Mirror_SrvWitness, -- 证书身份验证
		ENCRYPTION = DISABLED,                             -- 不对传输的数据加密,如果需要加密,可以配置为 SUPPORTED 或 REQUIRED, 并可选择加密算法
		ROLE = ALL)                                        -- 端点支持所有的数据库镜像角色, 也可以设置为 WITNESS(仅见证服务器),或 PARTNER(仅镜像伙伴)
GO

-- b. 完成主体服务器上数据库镜像端点的传输安全模式配置
-- (a). 建立主体服务器上的证书(假设主体服务器上备份的证书已经复制到 C:\CT_Mirror_SrvA.cer)
CREATE CERTIFICATE CT_Mirror_SrvA
FROM FILE = 'C:\share\CT_Mirror_SrvA.cer'

-- (b). 建立登录
CREATE LOGIN LOGIN_Mirror_SrvA
FROM CERTIFICATE CT_Mirror_SrvA

-- (c). 授予对数据库镜像端点的 connect 权限
GRANT CONNECT ON ENDPOINT::EDP_Mirror
TO LOGIN_Mirror_SrvA
GO

-- c. 完成镜像服务器上数据库镜像端点的传输安全模式配置
-- (a). 建立镜像服务器上的证书(假设镜像服务器上备份的证书已经复制到 C:\CT_Mirror_SrvB.cer)
CREATE CERTIFICATE CT_Mirror_SrvB
FROM FILE = 'C:\share\CT_Mirror_SrvB.cer'

-- (b). 建立登录
CREATE LOGIN LOGIN_Mirror_SrvB
FROM CERTIFICATE CT_Mirror_SrvB

-- (c). 授予对数据库镜像端点的 connect 权限
GRANT CONNECT ON ENDPOINT::EDP_Mirror
TO LOGIN_Mirror_SrvB
GO
5、查看数据库状态

配置完成后,主体服务器:

\

运行如入代码,查看同步状态:

-- ===========================================
-- 下面的操作可用于确定同步
-- 查询数据库状态
-- 下面的脚本可以在主体服务器和镜像服务器上执行,执行结果为镜像的状态
SELECT 
	mirroring_role_desc,           -- 数据库在镜像会话中当前的角色
	mirroring_state_desc,          -- 镜像当前状态
	mirroring_safety_level_desc,   -- 镜像运行模式
	mirroring_witness_state_desc   -- 与见证服务器的连接情况
FROM sys.database_mirroring
WHERE database_id = DB_ID(N'DB_Mirror')


而镜像服务器:

\

6、在镜像服务器上测试同步是否成功

那么有什么办法能知道数据是否被同步到进行服务器了呢?

这个可以通过数据库快照来实现。

这里引用微软的文档的一段文字:

可以利用为了实现可用性目标而维护的镜像数据库来减轻报表的负载。若要将镜像数据库用于报表,可以在镜像数据库中创建数据库快照,并将客户端连接请求定向到最新的快照。由于数据库快照只在创建快照时存在,因此,它是一个静态的、只读的并与其源数据库保持事务一致的快照。若要在镜像数据库中创建数据库快照,数据库必须处于同步镜像状态。

与镜像数据库本身不同,客户端可以访问数据库快照。只要镜像服务器与主体服务器进行通信,就可以将报表客户端连接定向到快照。注意,由于数据库快照是静态的,因此没有新数据可用。为了让用户能够使用相对较新的数据,必须定期创建新的数据库快照,并通过应用程序将传入客户端连接定向到最新的快照。

新的数据库快照几乎是空的,但是它会随着越来越多的数据页的首次更新而增长。由于数据库中的每个快照都以这种方式增长,因此,每个数据库快照与常规数据库使用同样多的资源。根据镜像服务器和主体服务器的配置,在镜像数据库中保留过多的数据库快照可能会降低主体数据库的性能。因此,我们建议在镜像数据库中仅保留少量相对较新的快照。一般情况下,在创建替换快照之后,应重新将传入查询定向到新的快照,并在完成所有当前的查询之后删除较早的快照。

完整的信息可以参考:

数据库镜像和数据库快照 (SQL Server) http://techne