微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLServer 数据库镜像+复制切换方案

目标:

      主机做了MirrorReplication,当主机出现问题时,ReplicationMirror实现自动的故障转移(Mirror Replication都切换到备机,而当主机

       重新启动后,自动充当备机的角色)。

 

环境:

          五台虚拟机,配置均为Windows2008 Enterprise + sqlServer2008R2 Enterprise

          08R201Mirror 见证机(WITnesS)           IP:192.168.56.101

          08R202:主机(Rep+Mirror                  IP:192.168.56.102

          08R203Rep分发机                               IP:192.168.56.103

          08R204Rep订阅                               IP:192.168.56.104

          08R205:镜像机(Mirror                       IP:192.168.56.105

 

步骤:

配置有见证服务器的镜像

  1. 创建证书和Endpoint

     08R202(Master) 上运行下面的脚本:

复制代码

 --主机执行:
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456abc';
    CREATE CERTIFICATE HOST_A_cert WITH SUBJECT HOST_A certificate',START_DATE 11/08/2010',EXPIRY_DATE 10/31/2099';

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 );

主机执行:

    BACKUP CERTIFICATE HOST_A_cert TO FILE D:\HOST_A_cert.cer';    

复制代码

      08R205(Mirror) 上运行下面的脚本:

复制代码

备机执行:
    CREATE CERTIFICATE HOST_B_cert HOST_B certificate= CERTIFICATE HOST_B_cert,255)">BACKUP CERTIFICATE HOST_B_cert D:\HOST_B_cert.cer';
  1. 交换证书

     将HOST_B_cert.cerHOST_W_cert.cer拷贝到 08R202 机器的”D:\Cert目录;

     将HOST_A_cert.cerHOST_W_cert.cer拷贝到 08R205 机器的”D:\Cert目录;

     将HOST_A_cert.cerHOST_B_cert.cer拷贝到 08R201 机器的”D:\Cert目录;

 

Master CREATE LOGIN HOST_B_login WITH PASSWORD 123abc!@#CREATE USER HOST_B_user FOR LOGIN HOST_B_login; AUTHORIZATION HOST_B_user FROM D:\Cert\HOST_B_cert.cerGRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login]; CREATE LOGIN HOST_W_login USER HOST_W_user FOR LOGIN HOST_W_login; AUTHORIZATION HOST_W_user D:\Cert\HOST_W_cert.cerHOST_W_login];

     08R205(Mirror) 上运行下面的脚本:

Mirror CREATE LOGIN HOST_A_login USER HOST_A_user FOR LOGIN HOST_A_login; AUTHORIZATION HOST_A_user D:\Cert\HOST_A_cert.cerHOST_A_login      08R201(WITNESS上运行下面的脚本:

WITNESS
  • 备份还原数据库
  •      08R202(Master) 上备份数据库:

      BACKUP DATABASE RepTest DISK=D:\temp\RepTest.bak'
      BACKUP LOG RepTest D:\temp\RepTest.trn'

         将备份文件拷贝到 08R205(Mirror) 上做还原(最好以SA帐号登录,使得数据库所有者为”SA“):

    复制代码

      RESTORE 
    RESTORE FROM  disK = ND:\RepTest.bak' 
    WITH  1,MOVE NRepTest' TO ND:\Data\RepTest.mdfRepTest_logD:\Data\RepTest_log.ldfnorECOVERY,NOUNLOAD,STATS 10
    GO
    
    RESTORE D:\RepTest.trnWITH norECOVERY
  • 建立镜像
  •       在08R205(Mirror) 上执行:

    ALTER SET PARTNER TCP://192.168.56.102:5022';

         在 08R202(Master)上执行:

    TCP://192.168.56.105:5022SET WITNESS TCP://192.168.56.101:5022SET SAFETY FULL

         到此,镜像已经建立完成。

    配置Replication(事务型复制)

         Replicaiton不做具体的搭建过程,只做几点说明:

         1.  08R20208R205都需要搭建到08R203Distribution

          

         2.  08R20208R205上的发布库的所有者必须为“SA,否则切换会出现如下错误:The process could not execute 'sp_replcmds' on 'WIN-08R205'.

         3.  08R203分发机上配置文件需要做如下修改(配置故障转移Partner):

    复制代码

        配置复制故障转移参数
        查看代理配置,在分发服务器运行
        exec sp_help_agent_profile
        Agent_Type含义
        1 = Snapshot Agent; 2 = Log Reader Agent; 3 = distribution Agent; 
        4 = Merge Agent; 9 = Queue Reader Agent.
        对于事务复制,需查看Agent_Type=1,2的Profile_id
        
        对于事务复制,需要配置快照代理(Snapshot Agent)和日志读取代理(Log Reader Agent)
        exec sp_add_agent_parameter @profile_id @parameter_name -PublisherFailoverPartner@parameter_value WIN-08R205'镜像服务器名称
        
        2,128)">镜像服务器名称
           修改完成后,记得重启Agent服务,使之生效。

          4.  08R202创建到08R204的同步链。

    模拟故障转移并观察结果

         1.  暂停08R202SQLServer服务;

         2.  到08R205上观察镜像和同步链是否转移过去了;

          

          3.  如果同步链正常,修改某个表中的数据,看是否能同步到08R204上;

          4.  重新启动08R202SQLServer服务,看其是否成为了镜像机;

          


    C# 连结镜像服务器连结 Data Source=192.168.0.139;Failover Partner0.140DataBase=mydbUser ID=saPassword;

    1、 手工同步登录名和密码

    在第一章中提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录

    通常来说数据库都将会有若干个用户作为访问数据库用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’myuser’作为登录名访问数据库,但是在备机中没有’myuser’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"

    在主数据库中执行如下语句:

    1

    USE  master;
    2

    select  sid,name  from  syslogins;
    3

    查找出相应的用户名和sid,例如:上述的’myuser’

    在备数据库中执行如下语句:

    exec  sp_addlogin 
    @loginame   =   ' <LoginName> '
    4 @passwd <Password> 5 @sid < sid >  ;
    6 这里的’LoginName’即主数据库中的登录名,sid即是上述通过sql语句查找出的sid。

    例如,查询得到的sid和name如下所示。

     

     

    sid name


    -- -------------------------------- -----------------


    0x074477739DCA0E499C29394FFFC4ADE4  cz_account
    7
    则建立登录名的sql语句:

    cz_account password ;
    到此为止可以认为备机数据库的环境已经与主机同步了,还差数据库内的数据未同步。

    1、主备互换
    
    
    --主机执行:
    
    
    [sql] view plaincopy
    USE master;     
    ALTER DATABASE <DatabaseName> SET PARTNER FAIlovER;    
    2、主服务器Down掉,备机紧急启动并且开始服务
    
    
    --备机执行:
    
    
    [sql] view plaincopy
    USE master;     
    ALTER DATABASE <DatabaseName> SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;    
    
    
    3、原来的主服务器恢复,可以继续工作,需要重新设定镜像
    
    
    --备机执行:
    
    
    [sql] view plaincopy
    USE master;     
    ALTER DATABASE <DatabaseName> SET PARTNER RESUME; --恢复镜像     
    ALTER DATABASE <DatabaseName> SET PARTNER FAIlovER; --切换主备    
    
    
    4、原来的主服务器恢复,可以继续工作
    
    
    --认情况下,事务安全级别的设置为 FULL,即同步运行模式,而且sql Server 2005 标准版只支持同步模式。
    
    
    --关闭事务安全可将会话切换到异步运行模式,该模式可使性能达到最佳。
    
    
    [sql] view plaincopy
    USE master;     
    ALTER DATABASE <DatabaseName> SET PARTNER SAFETY FULL; --事务安全,同步模式     
    ALTER DATABASE <DatabaseName> SET PARTNER SAFETY OFF; --事务不安全,异步模式   
    

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

    相关推荐