您的位置:首页 > 数据库

使用证书在SQL SERVER2005下配置数据库镜像

2010-08-07 11:07 369 查看
此示例说明使用基于证书的身份验证创建不带有见证服务器的数据库镜像会话所需的所有阶段。两个服务器实例在非信任的 Windows 域中运行,因此需要基于证书的身份验证。
在以下示例中,HOST_A 担当初始主体角色,HOST_B 担当镜像角色。
备注:
这里需要提到的一点的就是在SQL SERVER2005刚刚发布出来的时候数据库镜像这个服务默认是关闭的,也是不支持的。在刚刚发布SQL SERVER2005正式版本的时候,认为数据库镜像这个技术还不成熟,有待完善。所以如果你使用的是正式版本则无法使用这个技术。
  那么需要下载SP1或是以上的补丁。
· 版本号
sql server 2005 版本
9.00.1399
sql server 2005(初始版本)
9.00.2047
sql server 2005 SP1
9.00.3042
sql server 2005 SP2
我们这里直接打SP2补丁:略
步骤一:同步主数据库与备数据库的运行环境(只需配置一次即可)
1、 创建证书(主备可并行执行)
--主机执行:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';
CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' ,
START_DATE = '01/01/2008';
--备机执行:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'killkill';
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate',
START_DATE = '01/01/2008';

2、 创建连接的端点(主备可并行执行)
--主机执行:
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR
DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_A_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );
--备机执行:
CREATE ENDPOINT Endpoint_Mirroring
STATE = STARTED
AS
TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )
FOR
DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );

3、 备份证书以备建立互联(主备可并行执行)
--主机执行:
USE master;
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:/SQLBackup/HOST_A_cert.cer';
--备机执行:
USE master;
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:/SQLBackup/HOST_B_cert.cer';

4、互换证书
将备份到D:/SQLBackup/的证书进行互换,即HOST_A_cert.cer复制到备机的D:/SQLBackup/。HOST_B_cert.cer复制到主机的D:/SQLBackup/

5、添加登陆名、用户(主备可并行执行)
以下操作只能通过命令行运行,通过图形界面无法完成。
--主机执行:
CREATE LOGIN HOST_B_login WITH PASSWORD = 'killkill';
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:/SQLBackup/HOST_B_cert.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
--备机执行:
CREATE LOGIN HOST_A_login WITH PASSWORD = 'killkill';
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:/SQLBackup/HOST_A_cert.cer';
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];

步骤二:同步主数据库与备数据库的数据(要同步的主数据库执行)
若要对主数据库进行数据库镜像,必须将它更改为使用完整恢复模式。若要用 Transact-SQL 实现此目的,请使用 ALTER DATABASE 语句:
USE master;
ALTER DATABASE <DatabaeName> SET RECOVERY FULL;
再对主数据库进行完整备份和至少一次事务日志备份,将完整备份和事务日志备份复制到镜像服务器上,使用 WITH NORECOVERY 将完整备份和事务日志备份还原到镜像服务器实例上

步骤三:配置镜像伙伴
注意:如果HOST_A,HOST_B所在系统开启了防火墙,则必须将端口5022添加到防火墙例外,对于局域网的用户,则还需将其自身计算机的5022端口映射到广域网(在路由器的“虚拟服务器”中添加映射条目)。
1、 在 HOST_B 的镜像服务器实例上,将 HOST_A 上的服务器实例设置为伙伴(使其成为初始主体服务器实例)。方法是在新建查询窗口中执行:
--At HOST_B, set server instance on HOST_A as partner (principal server):
ALTER DATABASE <DatabaeName>
SET PARTNER = 'TCP://HOST_A的IP地址:5022’;
2、 在 HOST_A 的主体服务器实例上,将 HOST_B 上的服务器实例设置为伙伴(使其成为初始镜像服务器实例)。方法是在新建查询窗口中执行:
--At HOST_A, set server instance on HOST_B as partner (mirror server).
ALTER DATABASE <DatabaeName>
SET PARTNER = ‘TCP://HOST_B的IP地址:5022’;
GO
参考网址:http://msdn.microsoft.com/zh-cn/library/ms191140(SQL.90).aspx

如何删除数据库镜像 (Transact-SQL)
1、 连接到任一伙伴。
2、 ALTER DATABASE <database_name> SET PARTNER OFF
其中,<database_name> 是要删除其会话的镜像数据库。此语句可删除数据库镜像会话并从数据库中删除镜像。可以在任一合作伙伴上指定 OFF。有关删除数据库镜像的影响的详细信息,请参阅删除数据库镜像
3、 或者,可以恢复以前的镜像数据库。在作为镜像服务器的服务器实例上,输入:
RESTORE DATABASE <database_name> WITH RECOVERY;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: