SQL Server2008 R2 数据库镜像实施手册(双机)
一、配置主备机
1、 服务器基本信息
主机名称为:HOST_A,IP地址为:192.168.1.155
备机名称为:HOST_B,IP地址为:192.168.1.156
二、主备实例互通
实现互通可以使用域或证书来实现,考虑实现的简单,以下选取证书的方式实现。注意:实现“主备数据库实例互通”的操作只需要做一次,例如为了将两个SQL Server 2008的实例中的5个数据库建成镜像关系,则只需要做一次以下操作就可以了;或者这样理解:每一对主备实例(不是数据库)做一次互通。
1、创建证书(主备可并行执行)
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--主机执行:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456' ;
CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' ,
START_DATE = '2012-08-02' ,
EXPIRY_DATE = '2099-08-02' ;
--备机执行:
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456' ;
CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate' ,
START_DATE = '2012-08-02' ,
EXPIRY_DATE = '2099-08-02' ;
|
2、创建连接的端点(主备可并行执行)
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
--主机执行:
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 );
|
可能出现的错误
--第一步,先删除帐号: --删除账号 --DROP LOGIN HOST_A_user --第二步: IF EXISTS (SELECT * FROM sys.endpoints e WHERE e.name = N'Endpoint_Mirroring') DROP ENDPOINT [Endpoint_Mirroring] GO --第三步: --删除证书 USE master; DROP CERTIFICATE HOST_A_cert
3、备份证书以备建立互联(主备可并行执行)
?1 2 3 4 5 6 7 8 |
--主机执行:
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\SQLBackup\HOST_A_cert.cer' ;
--备机执行:
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\SQLBackup\HOST_B_cert.cer' ;
|
4、互换证书
将备份到C:\SQLBackup\的证书进行互换,即HOST_A_cert.cer复制到备机的C:\SQLBackup\。HOST_B_cert.cer复制到主机的C:\SQLBackup\。
5、添加登陆名、用户(主备可并行执行)
以下操作只能通过命令行运行,通过图形界面无法完成。(截至SQL Server2005的补丁号为SP2)
?1 2 3 4 5 6 7 8 9 10 11 |
--主机执行:
CREATE LOGIN HOST_B_login WITH PASSWORD = '123456' ;
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'C:\SQLBackup\HOST_B_cert.cer' ;
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
--备机执行:
CREATE LOGIN HOST_A_login WITH PASSWORD = '123456' ;
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'C:\SQLBackup\HOST_A_cert.cer' ;
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
|
三、建立镜像关系
以下步骤是针对每个数据库进行的,例如:现有主机中有5个数据库以下过程就要执行5次。
1、 手工同步登录名和密码
在上文中提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录。
通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用'myuser'作为登录名访问数据库,但是在备机中没有'myuser'这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"。在主机和备机数据库上建立相同用户名及密码即可。
2、 准备备机数据库(主机备份及镜像还原)
在主机上备份数据库,先做完整备份,再做日志事务备份。
1、主数据必须设置成完整模式进行备份,如下图:
上图中将“恢复模式”选成“完整模式”。
2、备份数据库,如下图:
备份时将“备份类型”选成“完整”。
3、备份事务日志,如下图:
将“备份类型”选成“事务日志”且备份目录与备份数据库的目录一致。
将备份文件在备机上使用主机的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:
如果执行成功数据库将会变成这个样子:
3、 建立镜像
?1 2 3 4 5 6 7 8 9 |
--在备机中执行如下语句:
ALTER DATABASE shishan SET PARTNER = '?
|