镜像(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 2012 镜像_第1张图片

  在“管理工具”中打开“服务”(或者用“SQL Server 配置管理器”),修改SQL Server实例的属性,将登录身份改为contoso\UserMirror。修改之后,重启SQL Server实例。

实现SQL Server 2012 镜像_第2张图片

  转到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 默认创建了一个名为“镜像”的端点

实现SQL Server 2012 镜像_第3张图片

可以查看它创建的语法为:

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、分发数据库到镜像服务器

  数据库必须是“完整恢复模式”

实现SQL Server 2012 镜像_第4张图片

  事先还要将主数据库备份,然后恢复到镜像服务器上。在实现数据库镜像技术时,镜像数据库将一直处于“Restore With NoRecovery”状态。因此,在还原操作时要注意下面的选项。

实现SQL Server 2012 镜像_第5张图片

  默认情况下,还原的选项是“Restore With Recovery”,即“通过回滚未提交的事务,使数据库处于可以使用的状态。”此时,如果使用数据库镜像,将会出现以下错误:


实现SQL Server 2012 镜像_第6张图片


4、配置镜像

实现SQL Server 2012 镜像_第7张图片

实现SQL Server 2012 镜像_第8张图片

  我们这次实验只配了2台SQL Server服务器,所以没有“见证服务器”。

实现SQL Server 2012 镜像_第9张图片

  在“主体服务器实例”对话框,默认会显示本机已经配置了的侦听器端口和端点名称。

实现SQL Server 2012 镜像_第10张图片

  在“镜像服务器实例”窗体,在下拉列表中找到镜像服务器的名称然后点“连接”(或者在下拉列表中选择“浏览更多”)

实现SQL Server 2012 镜像_第11张图片

  在“服务帐户”窗体,输入域用户contoso\UserMirror,向导会自动为这个帐户创建登录名,还将为登录名授予对端点的连接权限。

实现SQL Server 2012 镜像_第12张图片

实现SQL Server 2012 镜像_第13张图片

实现SQL Server 2012 镜像_第14张图片


5、完成配置

  完成上述配置后,会有提示信息,询问是否立即“开始镜像”。点“不开始镜像”,回到配置对话框。

实现SQL Server 2012 镜像_第15张图片

  在配置对话框,核对配置信息无误后,点“开始镜像”

实现SQL Server 2012 镜像_第16张图片

  镜像成功之后,画面如下:

实现SQL Server 2012 镜像_第17张图片


三、检查与验证

1、检查登录名

实现SQL Server 2012 镜像_第18张图片

实现SQL Server 2012 镜像_第19张图片

2、检查数据库状态

实现SQL Server 2012 镜像_第20张图片

  对于镜像数据库,不可以删除,否则将出现如下错误信息:

实现SQL Server 2012 镜像_第21张图片

3、监视镜像

实现SQL Server 2012 镜像_第22张图片

实现SQL Server 2012 镜像_第23张图片

4、验证

实现SQL Server 2012 镜像_第24张图片

实现SQL Server 2012 镜像_第25张图片

  然后,再检查主体数据库与镜像数据库的状态变化,以及通过“数据库镜像监视器”查看镜像的状态。