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

时间:2022-02-11 12:16:28

使用数据库镜像来提高数据库的高可用性,在镜像服务器创建镜像数据库的快照以卸载报表查询对生产数据库的负载。TechNet有讲座对此技术进行介绍,但看到大家在讲座的讨论区中遇到了很多问题,下面我把在非域环境中带自动故障转移功能的镜像数据库的代码共享一下,在域环境中创建不用考虑太多用户权限的问题,在此不介绍,创建镜像包括以下几步:

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  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_C 上为 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_C 上为 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  CERTIFICATE HOST_C_cert;
非域环境下带自动故障转移数据库镜像的实现方法
GO
非域环境下带自动故障转移数据库镜像的实现方法
-- 授予对远程镜像端点的登录名的 CONNECT 权限。
非域环境下带自动故障转移数据库镜像的实现方法
GRANT  CONNECT  ON  ENDPOINT::Endpoint_Mirroring  TO   [ HOST_C_login ] ;
非域环境下带自动故障转移数据库镜像的实现方法
GO
非域环境下带自动故障转移数据库镜像的实现方法
SELECT   *   FROM  sys.database_mirroring_endpoints
非域环境下带自动故障转移数据库镜像的实现方法
非域环境下带自动故障转移数据库镜像的实现方法

--成功执行后查看伙伴和见证服务器之间是否正常连接(如上图所示),分别在主体和镜像服务器执行以下语句
SELECT * FROM sys.database_mirroring WHERE database_id=(
 SELECT database_id FROM sys.databases WHERE name='pubs')
--如果mirroring_witness_state_desc字段均显示为CONNECTED,则可以停止主体服务器的SQL服务,查看是否可以自动故障转移

上面在每个服务器根据各自创建的证书创建一个登录用户其实可以省略,如果镜像数据库始终不能和见证服务器连接,请尝试重启一下SQL服务,然后再检查。