镜像(Mirror)是SQL Server 2005引入的新功能,微软从SQL Server 2005 SP1版本就开始提供官方技术支持。
SQL Server 2012发布后,在官方的联机手册中出现了新的声明:后续版本的 Microsoft SQL Server 将删除数据库镜像功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用数据库镜像的应用程序,以便改用 AlwaysOn 可用性组。
实现镜像需要在主数据库与镜像数据库之间进行身份验证,有两种身份验证方法:一是通过域帐户,二是通过证书。
根据能否故障转移、数据是否实时同步,分为三种部署方式:
1、高可用:需要增加一台见证服务器(安装有SQL Server实例),主体实例与镜像实例之间实时同步,无数据丢失,主体实例发生故障时一般在10秒内即可自动转移到镜像实例(注意:是两个独立的IP,应用程序有点麻烦)
2、高安全:主体实例与镜像实例之间实时同步,无数据丢失,不可故障转移。当不能实时同步时(主体实例与镜像实例失去联系时,或任何其一发生故障时),主体实例停止操作。
3、高性能:主体实例将事务日志传送给镜像实例去同步,稍有延时,可能会有数据丢失。不能自动故障转移。
在“管理工具”中打开“服务”(或者用“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”,即“通过回滚未提交的事务,使数据库处于可以使用的状态。”此时,如果使用数据库镜像,将会出现以下错误: