镜像(Mirror)是SQL Server 2005引入的新功能,微软从SQL Server 2005 SP1版本就开始提供官方技术支持。
SQL Server 2012发布后,在官方的联机手册中出现了新的声明:后续版本的 Microsoft SQL Server 将删除数据库镜像功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用数据库镜像的应用程序,以便改用 AlwaysOn 可用性组。
实现镜像需要在主数据库与镜像数据库之间进行身份验证,有两种身份验证方法:一是通过域帐户,二是通过证书。
根据能否故障转移、数据是否实时同步,分为三种部署方式:
1、高可用:需要增加一台见证服务器(安装有SQL Server实例),主体实例与镜像实例之间实时同步,无数据丢失,主体实例发生故障时一般在10秒内即可自动转移到镜像实例(注意:是两个独立的IP,应用程序有点麻烦)
2、高安全:主体实例与镜像实例之间实时同步,无数据丢失,不可故障转移。当不能实时同步时(主体实例与镜像实例失去联系时,或任何其一发生故障时),主体实例停止操作。
3、高性能:主体实例将事务日志传送给镜像实例去同步,稍有延时,可能会有数据丢失。不能自动故障转移。
以下通过域帐户来配置数据库镜像。
一、环境准备
1、准备计算机
DC1为contoso域的域控制器,IP地址为192.168.1.1,子网掩码为255.255.255.0,默认网关为192.168.1.254,DNS为192.168.1.1
SQL1为主体服务器,IP地址为192.168.1.21,子网掩码为255.255.255.0,默认网关为192.168.1.254,DNS为192.168.1.1
SQL2为镜像服务器,IP地址为192.168.1.22,子网掩码为255.255.255.0,默认网关为192.168.1.254,DNS为192.168.1.1
2、准备域帐户
转到DC1,打开“Active Directory 用户和计算机”,新建一个域用户帐户UserMirror。
3、在客户端配置域帐户
转到SQL1计算机,将contoso\UserMirror帐户添加为本机管理员。
在“管理工具”中打开“服务”(或者用“SQL Server 配置管理器”),修改SQL Server实例的属性,将登录身份改为contoso\UserMirror。修改之后,重启SQL Server实例。
转到SQL2计算机,按照上面的步骤把contoso\UserMirror帐户添加到本机管理员,并且用这个帐户启动SQL Server实例。
说明:如果SQL Server实例是通过不同的本地帐户启动的,那么在创建镜像时主体数据库会尝试用本机帐户去连接镜像数据库,最终会报错。以下是一个错误信息的示例:
Database Mirroring login attempt by user 'CONTOSO\SQL2$.' failed with error: 'Connection handshake failed. The login 'CONTOSO\SQL2$' does not have CONNECT permission on the endpoint. State 84.'. [CLIENT: 192.168.1.22]
二、实现数据库镜像
1、配置镜像的端点
SQL Server 2012 默认创建了一个名为“镜像”的端点
可以查看它创建的语法为:
USE [master]
CREATE ENDPOINT [镜像]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE
, ENCRYPTION = REQUIRED ALGORITHM RC4)
2、配置防火墙
Windows 2008 自带的防火墙默认封锁了端口,因此,要想让SQL1与SQL2这两台计算机之间的SQL Server可以互相访问,必须在防火墙上打开SQL Server默认的TCP1433端口。
由于默认的镜像的端点是TCP5022,因此必须在防火墙上打开这个端口,允许“入站连接”。
3、分发数据库到镜像服务器
数据库必须是“完整恢复模式”
事先还要将主数据库备份,然后恢复到镜像服务器上。在实现数据库镜像技术时,镜像数据库将一直处于“Restore With NoRecovery”状态。因此,在还原操作时要注意下面的选项。
默认情况下,还原的选项是“Restore With Recovery”,即“通过回滚未提交的事务,使数据库处于可以使用的状态。”此时,如果使用数据库镜像,将会出现以下错误:
4、配置镜像
我们这次实验只配了2台SQL Server服务器,所以没有“见证服务器”。
在“主体服务器实例”对话框,默认会显示本机已经配置了的侦听器端口和端点名称。
在“镜像服务器实例”窗体,在下拉列表中找到镜像服务器的名称然后点“连接”(或者在下拉列表中选择“浏览更多”)
在“服务帐户”窗体,输入域用户contoso\UserMirror,向导会自动为这个帐户创建登录名,还将为登录名授予对端点的连接权限。
5、完成配置
完成上述配置后,会有提示信息,询问是否立即“开始镜像”。点“不开始镜像”,回到配置对话框。
在配置对话框,核对配置信息无误后,点“开始镜像”
镜像成功之后,画面如下:
三、检查与验证
1、检查登录名
2、检查数据库状态
对于镜像数据库,不可以删除,否则将出现如下错误信息:
3、监视镜像
4、验证
然后,再检查主体数据库与镜像数据库的状态变化,以及通过“数据库镜像监视器”查看镜像的状态。