现在的位置: 首页 > 综合 > 正文

非域环境下带自动故障转移数据库镜像的实现方法

2013年09月09日 ⁄ 综合 ⁄ 共 6569字 ⁄ 字号 评论关闭

创建镜像包括以下几步:1、创建备份数据库还原至镜像服务器
2、创建相应的镜像端点
3、给相应用户分配连接至端点的权限
4、首先在镜像数据库设置伙伴
5、然后在主体服务器设置伙伴
6、在主体服务器设置见证服务器
HOST-A主体服务器、HOST-B镜像服务器、HOST-C见证服务器(图中228的机器)

/**/
--镜像只支持完全恢复模式,在备份数据库之前检查恢复的模式
--
对要镜像的数据库进行完整备份后,复制到镜像数据库以NORECOVERNY选项进行恢复
USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';
GO
--为此服务器实例制作一个证书。
--
DROP CERTIFICATE HOST_A_cert
CREATE CERTIFICATE HOST_A_cert 
   
WITH SUBJECT = 'HOST_A certificate',START_DATE  = '10/31/2006';
GO 
--使用该证书为服务器实例创建一个镜像端点。
--
DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
   STATE 
= STARTED
   
AS TCP (
      LISTENER_PORT
=7024
      , LISTENER_IP 
= ALL
   ) 
   
FOR DATABASE_MIRRORING ( 
      AUTHENTICATION 
= CERTIFICATE HOST_A_cert
      , ENCRYPTION 
= REQUIRED ALGORITHM AES
      , ROLE 
= PARTNER
   );
GO

--备份 HOST_A 证书,并将其复制到其他机器,将 C:\HOST_A_cert.cer 复制到 HOST_B\HOST_C。
BACKUP CERTIFICATE HOST_A_cert TO FILE = 'C:\HOST_A_cert.cer';
GO
--为入站连接配置 Host_A
--
在 HOST_A 上为 HOST_B 创建一个登录名。 
USE master;
--DROP LOGIN HOST_B_login
CREATE LOGIN HOST_B_login WITH PASSWORD = '1Sample_Strong_Password!@#';
GO

--创建一个使用该登录名的用户。
--
DROP USER HOST_B_user
CREATE USER HOST_B_user FOR LOGIN HOST_B_login;
GO
--使证书与该用户关联。
--
DROP CERTIFICATE HOST_B_cert
CREATE CERTIFICATE HOST_B_cert
   
AUTHORIZATION HOST_B_user
   
FROM FILE = 'C:\HOST_B_cert.cer'
GO

--授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
GO
 
--在 HOST_A 上为 HOST_C 创建一个登录名。 
USE master;
--DROP LOGIN HOST_C_login
CREATE LOGIN HOST_C_login WITH PASSWORD = '1Sample_Strong_Password!@#';
GO

--创建一个使用该登录名的用户。
--
DROP USER HOST_C_user
CREATE USER HOST_C_user FOR LOGIN HOST_C_login;
GO
--使证书与该用户关联。
--
DROP CERTIFICATE HOST_C_cert
CREATE CERTIFICATE HOST_C_cert
   
AUTHORIZATION HOST_C_user
   
FROM FILE = 'C:\HOST_C_cert.cer'
GO

--授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];
GO

USE master;
--DROP LOGIN HOST_A_login
CREATE LOGIN HOST_A_login WITH PASSWORD = '1Sample_Strong_Password!@#';
GO
--创建一个使用该登录名的用户。
--
DROP USER HOST_A_user
CREATE USER HOST_A_user FOR CERTIFICATE HOST_A_cert;
GO
--授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
GO

--必须要在镜像数据库中先设置好伙伴后,才能在主体服务器执行
--
在 HOST_A 的主体服务器实例上,将 HOST_B 上的服务器实例设置为伙伴(使其成为初始镜像服务器实例)。
ALTER DATABASE pubs 
    
SET PARTNER = 'TCP://192.168.0.162:7024';
GO

--设置见证服务器
ALTER DATABASE pubs SET WITNESS = N'TCP://192.168.0.228:7024';
GO

--设置为高安全性模式
ALTER DATABASE pubs SET SAFETY FULL
GO 
--此示例假设会话将在高性能模式下运行。若要在高性能模式下配置此会话,在主体服务器实例上(位于 HOST_A 上),将事务安全性设置为 OFF。
--
Change to high-performance mode by turning off transacton safety.
--
ALTER DATABASE pubs 
--
    SET PARTNER SAFETY OFF --如果使用高性能模式时,WITNESS也应设为OFF
--
GO
--
ALTER DATABASE pubs 
--
    SET PARTNER WITNESS OFF --如果使用高性能模式时,WITNESS也应设为OFF
--
GO 
 

--设置主体数据库在高安全模式下运行
--
ALTER DATABASE pubs SET SAFETY OFF
--
GO
--
在主体数据库执行手动故障转移
--
ALTER DATABASE pubs SET PARTNER FAILOVER
--
GO

--当主体数据库不可用随后又重新连接后,在任意伙伴中执行,恢复镜像会话
--
ALTER DATABASE pubs SET PARTNER RESUME
--
GO

SELECT * FROM sys.database_mirroring WHERE database_id=(
 
SELECT database_id FROM sys.databases WHERE name='pubs')

 

/***********************************************
在镜像服务器执行此脚本
**********************************************
*/

USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';
GO
--为 HOST_B 服务器实例制作一个证书。
--
DROP CERTIFICATE HOST_B_cert
CREATE CERTIFICATE HOST_B_cert 
   
WITH SUBJECT = 'HOST_B certificate for database mirroring',START_DATE  = '10/31/2007';
GO
--在 HOST_B 中为服务器实例创建一个镜像端点。
--
DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
   STATE 
= STARTED
   
AS TCP (
      LISTENER_PORT
=7024
      , LISTENER_IP 
= ALL
   ) 
   
FOR DATABASE_MIRRORING ( 
      AUTHENTICATION 
= CERTIFICATE HOST_B_cert
      , ENCRYPTION 
= REQUIRED ALGORITHM AES
      , ROLE 
= PARTNER
   );
GO
--备份 HOST_B 证书,将 C:\HOST_B_cert.cer 复制到 HOST_A\HOST_C。
BACKUP CERTIFICATE HOST_B_cert TO FILE = 'C:\HOST_B_cert.cer';
GO 

--为入站连接配置 Host_B
--
在 HOST_B 上为 HOST_A 创建一个登录名。
USE master;
--DROP LOGIN HOST_A_login
CREATE LOGIN HOST_A_login WITH PASSWORD = '1Sample_Strong_Password!@#';
GO
--创建一个使用该登录名的用户。
--
DROP USER HOST_A_user
CREATE USER HOST_A_user FOR LOGIN HOST_A_login;
GO
--使证书与该用户关联。
--
DROP CERTIFICATE HOST_A_cert
CREATE CERTIFICATE HOST_A_cert
   
AUTHORIZATION HOST_A_user
   
FROM FILE = 'C:\HOST_A_cert.cer'
GO

--授予对远程镜像端点的登录名的 CONNECT 权限。 
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
GO

--在 HOST_B 上为 HOST_C 创建一个登录名。
USE master;
--DROP LOGIN HOST_C_login
CREATE LOGIN HOST_C_login WITH PASSWORD = '1Sample_Strong_Password!@#';
GO

--创建一个使用该登录名的用户。
--
DROP USER HOST_C_user 
CREATE USER HOST_C_user FOR LOGIN HOST_C_login;
GO
--使证书与该用户关联。
--
DROP CERTIFICATE HOST_C_cert
CREATE CERTIFICATE HOST_C_cert
   
AUTHORIZATION HOST_C_user
   
FROM FILE = 'C:\HOST_C_cert.cer'
GO

--授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];
GO

--在 HOST_B 上为 HOST_B 创建一个登录名。 
USE master;
--DROP LOGIN HOST_B_login
CREATE LOGIN HOST_B_login WITH PASSWORD = '1Sample_Strong_Password!@#';
GO
--创建一个使用该登录名的用户。
--
DROP USER HOST_B_user
CREATE USER HOST_B_user FOR CERTIFICATE HOST_B_cert;
GO
--授予对远程镜像端点的登录名的 CONNECT 权限。
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
GO
--在 HOST_B 的镜像服务器实例上,将 HOST_A 上的服务器实例设置为伙伴(使其成为初始主体服务器实例)。
ALTER DATABASE pubs 
    
SET PARTNER = 'TCP://192.168.0.165:7024';
GO
--创建数据库的快照
--
CREATE DATABASE pubs_dbss1800 ON
--
( NAME = pubs, FILENAME = 
--
'C:\Program Files\Microsoft SQL Server\MSSQL.1\pubs_data_1800.ss' )
--
AS SNAPSHOT OF pubs;
--
GO

--在主体数据库执行手动故障转移
--
ALTER DATABASE pubs SET PARTNER FAILOVER
--
GO

--在高性能模式下如果主体数据库不可用时,则在镜相数据库强制服务
--
ALTER DATABASE pubs SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
--
GO

SELECT * FROM sys.database_mirroring WHERE database_id=(
 
SELECT database_id FROM sys.databases WHERE name='pubs')

 

/****************************
见证服务器执行
****************************
*/

--ALTER DATABASE MirrorDB SET PARTNER OFF
USE master;
--DROP MASTER KEY
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<1_Strong_Password!>';
GO
 
--为此服务器实例制作一个证书。
--
DROP CERTIFICATE HOST_C_cert
CREATE CERTIFICATE HOST_C_cert 
   
WITH SUBJECT = 'HOST_C certificate',START_DATE  = '10/31/2007';
GO

--使用该证书为服务器实例创建一个镜像端点。
--
DROP ENDPOINT Endpoint_Mirroring
CREATE ENDPOINT Endpoint_Mirroring
   STATE 
= STARTED
   
AS TCP (
      LISTENER_PORT
=7024
      , LISTENER_IP 
= ALL
   ) 
   
FOR DATABASE_MIRRORING ( 
      AUTHENTICATION 
= CERTIFICATE HOST_C_cert
      , ENCRYPTION 
= REQUIRED ALGORITHM AES
      , ROLE 
= WITNESS
   );
GO
 

--备份 HOST_C 证书,并将其复制到其他系统,即 HOST_B\HOST_A。
BACKUP CERTIFICATE HOST_C_cert TO FILE = 'C:\HOST_C_cert.cer';
GO

--为入站连接配置 Host_C
--
在 HOST_C 上为 HOST_B 创建一个登录名。 
USE master;
--DROP LOGIN HOST_B_login
CREATE LOGIN HOST_B_login WITH

抱歉!评论已关闭.