主服务器为sql03,数据库实例为sql03;镜像服务器为sql04,数据库实例为sql04
 
 
SQL03配置
--为主体数据库配置出站连接 --创建数据库主密钥
use master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password111111';
GO
--在MIR-A上为数据库实例创建证书
USE master;
CREATE CERTIFICATE sql03_cert
WITH SUBJECT = 'sql03 certificate', --证书描述
START_DATE = '01/7/2010',
EXPIRY_DATE = '01/07/2090';
GO
--在MIR-A上使用上面创建的证书为数据库实例创建镜像端点
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5024,
LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE sql03_cert,
 ENCRYPTION = REQUIRED ALGORITHM RC4,
 ROLE = ALL
 );
 GO
 --备份MIR-A上的证书并拷贝到MIR-B,MIR-W上
 BACKUP CERTIFICATE sql03_cert TO FILE = 'C:\cert\sql03_cert.cer';
 GO
--------------------------------------------------------------------
 --------------------------------------------------------------------
--在 sql03 上为 sql04 创建一个登录名。
USE master;
--DROP LOGIN sql04_login
CREATE LOGIN sql04_login WITH PASSWORD = 'password111111';
GO
--创建一个使用该登录名的用户。
--DROP USER sql04_user
CREATE USER sql04_user FOR LOGIN sql04_login;
GO
--使证书与该用户关联。
--DROP CERTIFICATE sql04_cert
CREATE CERTIFICATE sql04_cert
AUTHORIZATION sql04_user
FROM FILE = 'c:\cert\sql04_cert.cer'
GO
--授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [sql04_login];
GO
 
sql04
--drop master key
--为镜像数据库配置出站连接
--创建数据库主密钥
--drop master key;
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password111111';
GO
--在sql04上为数据库实例创建证书
CREATE CERTIFICATE sql04_cert
WITH SUBJECT = 'sql04 certificate for database mirroring',
START_DATE = '01/7/2010',EXPIRY_DATE = '01/07/2090';
GO
--在sql04上使用上面创建的证书为数据库实例创建镜像端点
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5024,
LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE sql04_cert,
ENCRYPTION = REQUIRED ALGORITHM RC4,
ROLE = ALL
);
GO
--备份sql04上的证书并拷贝到sql03上
BACKUP CERTIFICATE sql04_cert TO FILE = 'C:\cert\sql04_cert.cer';
GO
--------------------------------------------------------------------
--------------------------------------------------------------------
--在 sql04 上为 sql03 创建一个登录名。
USE master;
--DROP LOGIN sql03_login
CREATE LOGIN sql03_login WITH PASSWORD = 'password111111';
GO
--创建一个使用该登录名的用户。
--DROP USER sql03_user
CREATE USER sql03_user FOR LOGIN sql03_login;
GO
--使证书与该用户关联。
--DROP CERTIFICATE sql03_cert
CREATE CERTIFICATE sql03_cert
AUTHORIZATION sql03_user
FROM FILE = 'c:\cert\sql03_cert.cer'
GO
--授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [sql03_login];
GO

--接下来是在sql03上完整备份数据库test.bak,并把这个备份文件拷贝到sql04上,在sql04上以WITH NORECOVERY的形式还原。
--备份主数据库sql03:
USE master;
GO
ALTER DATABASE test
SET RECOVERY FULL;
GO
BACKUP DATABASE test TO DISK = 'C:\test.bak' WITH FORMAT;
GO
--转到sql04上去恢复数据库
--在sql04的镜像服务器实例上还原数据库:
RESTORE DATABASE test  FROM DISK = 'C:\sqlback\test.bak' WITH NORECOVERYGO
--配置镜像:顺序:镜像----主体
----------------------------------------------
先执行sql04服务器:
ALTER DATABASE test
    SET PARTNER = 'TCP://192.168.1.15:5024'
GO
再执行sql03服务器:
ALTER DATABASE DBNAME
    SET PARTNER = 'TCP://192.168.1.3:5024' (,SAFETY OFF用这个会其冲突,目前还没有解决,有些文档上出现,就此注解)
 GO
后面就是测试
 
 

总结:

配置sql2008数据库通过证书镜像,大致可以分为两个步骤;

1、配置数据库的全局环境;如设置主密钥、建立证书、导出证书、为对方创建登录账号、给予账号登录权限、互换证书。

2、创建指定的数据库镜像;如“ ALTER DATABASE test  SET PARTNER = 'TCP://192.168.1.15:5024'   ” ,红色表示需要镜像的数据库,这里主要注意“先从后主”的顺序。

先从后主:先在从镜像服务器上指定伙伴服务器,再去主数据库服务器上指定伙伴服务器。

                                                                                    OVER