一 概述
数据库镜像是SQL SERVER 2005用于提高数据库可用性的新技术。数据库镜像将事务日志记录直接从一台服务器传输到另一台服务器,并且能够在出现故障时快速转移到备用服务器。可以编写客户端程序自动重定向连接信息,这样一旦出现故障转移就可以自动连接到备用服务器和数据库。
优势:数据库镜像可以在不丢失已提交数据的前提下进行快速故障转移,无须专门的硬件,并且易于配置和管理。
二 环境准备
操作系统:Window 2003 enterprise sp2(至少两台,如要启用自动故障转移,必需三台)
SQL版本:MSSQL SERVER 2005 SP3
检查SQL SERVER版本:
exec xp_msver
select SERVERPROPERTY('productlevel')
数据库准备:准备一个数据库:ccerp_jzt ,备份此数据库还原到另外一台机器上,另外一台必须是with no recovery
这里我假设服务器A,B,C
A为主体服务器,B为镜像服务器,C为见证服务器
A服务器
use master
go
restore filelistonly from disk=N'f:\databak\ccerp_jzt_backup_200911250100.bak'
restore database ccerp_jzt from disk=N'f:\databak\ccerp_jzt_backup_200911250100.bak' with replace,recovery,
move 'ccerp_ydswzip_Data' to 'd:\data\ccerp_jzt.mdf',
move 'ccerp_ydswzip_Log' to 'd:\data\ccerp_jzt_log.ldf'
exec sp_helpdb 'ccerp_jzt'
backup database ccerp_jzt to disk =N'f:\databak\sk.bak' with init
--更改恢复模式
alter database ccerp_jzt set recovery full
B服务器:
CREATE DATABASE ccerp_jzt
ON
( NAME = Sales_dat,
FILENAME = 'd:\data\ccerp_jzt.mdf',
SIZE = 10
)
LOG ON
( NAME = 'ccerp_jzt_log',
FILENAME = 'd:\data\ccerp_jzt_log.ldf',
SIZE = 5MB
)
GO
restore filelistonly from disk=N'f:\xxzx\data\sk.bak'
use master
go
restore database ccerp_jzt from disk=N'f:\xxzx\data\sk.bak' with replace,norecovery,
exec sp_helpdb 'ccerp_jzt'
C服务器只要装上SQL SERVER 2005就可以,无需其他准备
准备完成后如下图所示:
三 三种模式的搭建
数据库镜像要建立必需得建立信任关系,那么在WIN环境下建立信任关系可以通过三种方式:域帐户,证书信任,windows 匿名登陆,现就前两种模式做配置说明.
3.1 域帐户模式:
3.1.1 更改mssqlserver服务的的登陆方式为域帐户登陆方式:
进入windows服务管理控制台,更改服务登陆帐户,使域账户有更改MSSQL SERVER服务状态的权限.三台机器都做同样设置
将域帐户赋予sysadmin角色

3.1.2 建立端点:
通过图形界面建立端点:
启动SQLWB,按图一直下一步
用域帐户登陆
如果成功则:
3.2 证书模式
3.2.1建立证书&端点
参与数据库镜像会话的服务器必须彼此信任。对于本地通信而言,例如一个域内的通信,信任意味着SQL Server实例登陆账号必须有权限连接到其他镜像服务器,也包括endpoints。首先在每个服务器上使用CREATE LOGIN命令,然后使用GRANT CONNECT ON ENDPOINT命令.非信任域之间的通信必须使用证书。如果使用CREATE CERTIFICATE语句创建自签名的证书,基本上所有数据镜像证书的要求都可以满足。确认在CREATE CERTIFICATE语句中将证书标记为ACTIVE FOR BEGIN_DIALOG。
一 建立证书:
镜像服务器上执行:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TEST';
CREATE CERTIFICATE HOST_A_cert WITH SUBJECT='HOST_A certificate', START_DATE='2010-03-10';
主体服务器上执行:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TEST';
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT='HOST_B certificate', START_DATE='2010-03-10';
见证服务器上执行:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TEST';
CREATE CERTIFICATE HOST_C_cert WITH SUBJECT='HOST_C certificate', START_DATE='2010-03-10';
二 建立端点:
镜像服务器上执行:
--create mirror endpoint on primary A
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED AS
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )
FOR DATABASE_MIRRORING
( AUTHENTICATION = CERTIFICATE HOST_A_cert