none
镜像配置出现的一些问题 RRS feed

  • 问题

  • 今晚按照这篇文章做了一下镜像配置:http://www.cnblogs.com/killkill/archive/2008/05/23/1205792.html

    我的环境:家里两台电脑,一台手提:win7   32位 SQL2005开发版SP3   ,台式机Windows2003  32位 SQL2008 SP1 企业版

    家里的局域网,没有见证服务器,就这两台电脑做镜像  win7是主机    win2003是备机

    出现两个问题

    问题一:向备机发出ALTER DATABASE DB SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
    备机会执行出错,抛出“无法对数据库 "DB" 强制执行数据库镜像服务,因为该数据库未处于要成为主体数据库的正确状态。”

    下面是问题一的图片

    问题二:在做测试的时候执行下面语句就报错

    USE master;
    ALTER DATABASE GPOSDB SET PARTNER RESUME; --恢复镜像
    ALTER DATABASE GPOSDB SET PARTNER FAILOVER; --切换到主机
    消息 1422,级别 16,状态 2,第 3 行
    镜像服务器实例未反映数据库 "GPOSDB" 的最近更改。无法进行故障转移。

    本人没有设置过安全模式 ALTER DATABASE GPOSDB SET PARTNER SAFETY ,采用的是默认设置

    问题二图片





    2012年9月25日 17:06

全部回复

  • 我已经配置好镜像了,只是做测试的时候出现这两个问题,具体可以看一下那篇文章,我是按照那篇文章一步一步来的





    2012年9月25日 17:08
  • Mirroed in HP or HS mode? Can't switch side if it's in HP mode.
    2012年9月25日 18:06
  • 问题1,确认你的操作是正确的,并且满足条件

    参考联机帮助上的语法说明:

    http://msdn.microsoft.com/zh-cn/library/bb522476.aspx

    FORCE_SERVICE_ALLOW_DATA_LOSS

    未发生自动故障转移时,在数据库处于不同步状态或处于同步状态的情况下当主体服务器失败后,强制数据库服务转向镜像数据库。

    强烈建议仅在主体服务器不再运行时强制运行该服务。 否则,某些客户端可能会继续访问原始主体数据库而不是新的主体数据库。

    FORCE_SERVICE_ALLOW_DATA_LOSS 仅在镜像服务器上可用,且下列条件必须全部成立:

    • 主体服务器已关闭。

    • WITNESS 设置为 OFF,或者将见证服务器连接到镜像服务器。

    2012年9月26日 1:07
  • 问题2,也是确认一下你执行操作的服务器是否是对的

     只能在主体服务器上指定 FAILOVER。 此选项仅在 SAFETY 设置为 FULL(默认设置)时有效。

    master 作为数据库上下文。

    2012年9月26日 1:10
  • 明白,我试一下

    问题一那里主题服务器已关闭是 计算机关机还是sql服务关闭?




    2012年9月26日 14:55
  • They are same.
    2012年9月26日 15:53
  • 今晚我是这样操作的

    --1、主备互换
     
    --主机停掉SQL服务


    --2、主服务器Down掉,备机紧急启动并且开始服务
    --备机执行:
    USE master;
    ALTER DATABASE S_C_SC SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
    ALTER DATABASE S_C_SC SET ONLINE

    --这时候备机可以访问了
    --3、开启主机的SQL服务,原来的主服务器恢复,可以继续工作,需要重新设定镜像
    --备机执行:
    USE master;
    ALTER DATABASE S_C_SC SET PARTNER RESUME; --恢复镜像

    --主机执行
    ALTER DATABASE S_C_SC SET PARTNER FAILOVER; --切换到主机

    当我做到第3步的时候,在备机执行下面这句话的时候弹出下面这个错误,我没有做过任何操作,不知道为何会这样

    ALTER DATABASE S_C_SC SET PARTNER FAILOVER; --切换到主机

    消息 1417,级别 16,状态 1,第 1 行
    数据库 "S_C_SC" 的管理员已禁用数据库镜像。


    给我写信: QQ我:点击这里给我发消息


    2012年9月26日 16:28
  • Is the db still mirrored? Double check in db properties.
    2012年9月26日 17:08
  • 备机显示  主体,已挂起  

    主机显示  镜像 正在同步/正在还原

    镜像监视器里看到跟我上面贴出的图片一样的信息




    2012年9月27日 0:59
  • --3、开启主机的SQL服务,原来的主服务器恢复,可以继续工作,需要重新设定镜像
    --备机执行:
    USE master;
    ALTER DATABASE S_C_SC SET PARTNER RESUME; --恢复镜像

    --主机执行
    ALTER DATABASE S_C_SC SET PARTNER FAILOVER; --切换到主机

    ------------------ 没看到图片,不过,你的后面这句,应该是在备机上执行的,当你的主机启动,备机上执行 RESURE 成功的话,这个时候,备机是主服务器,所以切换的操作应该在备机执行

    2012年9月27日 1:45
  • 语法说明中的主体服务器,镜像服务器,是一个逻辑概念,不是物理机

    比如你前面说的”备机显示 主体,已挂起 “,这个时候,备机是你的镜像主体服务器

    2012年9月27日 1:48
  • 备机显示  主体,已挂起  

    主机显示  镜像 正在同步/正在还原

    镜像监视器里看到跟我上面贴出的图片一样的信息


    给我写信: QQ我:点击这里给我发消息

    It shows principal suspected that mean mirror is broken.
    2012年9月27日 2:14
  • 是不是要重新建立镜像?



    2012年9月27日 12:12
  • 昨晚打算在主机上打开镜像配置的GUI来配置镜像的,但是配置完的时候弹出对话框说什么FQDN错误

    由于现在备机还是正在还原状态不能打开镜像配置的GUI,所以无办法给大家显示昨晚的错误信息

    最后想问一下大家,你们配置镜像数据库的时候一般是使用SSMS的查询窗口写SQL配置还是

    在数据库上右键-》任务-》镜像 通过GUI来配置镜像数据库的,哪种方法比较好一点


    给我写信: QQ我:点击这里给我发消息

    2012年9月27日 12:53
  • We use both since they do same thing. By the way, you can't open db properties on mirror partner.
    2012年9月27日 13:32
  • 是啊,原来你两种都使用的,今晚我添加上见证 再重做一遍 希望可以配置成功

    给我写信: QQ我:点击这里给我发消息

    2012年9月27日 14:30
  • 今晚加了见证服务器 3台计算机都可以telnet通和ping通,但是当我停掉主机的SQL服务的时候,备机没有自动变成主体服务器,不知道是不是见证服务器不起作用,

    见证服务器使用的是SQLEXPRESS2005 sp3 ,用手动切换服务器也不行,就快放弃了,我按照下面的脚本配置的

    在备机执行下面语句报错:

    USE master;
    ALTER DATABASE S_C_SC SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
    ALTER DATABASE S_C_SC SET ONLINE


    消息 1455,级别 16,状态 106,第 2 行
    无法对数据库 "S_C_SC" 强制执行数据库镜像服务,因为该数据库未处于要成为主体数据库的正确状态。
    消息 1468,级别 16,状态 5,第 3 行
    无法对数据库 "S_C_SC" 执行该操作,因为该数据库参与了数据库镜像会话。
    消息 5069,级别 16,状态 1,第 3 行
    ALTER DATABASE 语句失败。


    给我写信: QQ我:点击这里给我发消息

    2012年9月27日 15:35
  • 配置的脚本

    --SQL2005数据库镜像的步骤
    
    -------------------------------------------------------------------------------------------
    
    --1、设置镜像数据库为完整恢复模式
    alter DATABASE S_C_SC set recovery FULL
    
    
    --2、创建证书(主备可并行执行)
    --主机执行
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'joe';
    CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' , 
    START_DATE = '2012-09-25';
    
    --备机执行
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'joe';
    CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate' , 
    START_DATE = '2012-09-25';
    
    --见证执行
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'joe';
    CREATE CERTIFICATE HOST_C_cert WITH SUBJECT = 'HOST_C certificate' , 
    START_DATE = '2012-09-25';
    
    --3、创建连接的端点(主备可并行执行)
     
    --主机执行:
    USE master
    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 );
    
    --备机执行:
     USE master
    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 );
    
    --见证执行:
     USE master
    CREATE ENDPOINT Endpoint_Mirroring 
    STATE = STARTED 
    AS 
    TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) 
    FOR 
    DATABASE_MIRRORING 
    ( AUTHENTICATION = CERTIFICATE HOST_C_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = WITNESS );
    
    
    
    --4、备份证书以备建立互联(主备可并行执行)
     
    --主机执行:
     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';
    --见证执行:
     USE master
    BACKUP CERTIFICATE HOST_C_cert TO FILE = 'D:\SQLBackup\HOST_C_cert.cer';
    
    
    --5、互换证书
    -- 
    --将备份到D:\SQLBackup\的证书进行互换,即HOST_A_cert.cer复制(是复制不是剪切)
    --到备机的D:\SQLBackup\。HOST_B_cert.cer复制(是复制不是剪切)到主机的D:\SQLBackup\
    --见证的证书HOST_C_cert.cer复制到主机和备机,主机和备机复制到见证
    
    
    
    
    
    --6、添加登陆名、用户(主备见证可并行执行)
     
    --以下操作只能通过命令行运行,通过图形界面无法完成。(截至文档编写结束,SQL Server2005的版本号为SP2)
     
    --主机执行:
     USE master
    CREATE LOGIN HOST_B_login WITH PASSWORD = 'test';
    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';
    CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\HOST_B_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login]
    USE master
    CREATE LOGIN HOST_C_login WITH PASSWORD = 'test';
    CREATE USER HOST_C_user FOR LOGIN HOST_C_login;
    CREATE CERTIFICATE HOST_C_cert AUTHORIZATION HOST_C_user FROM FILE = 'D:\HOST_C_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];
    GO
    
    
    
     
    --备机执行:
     USE master
    CREATE LOGIN HOST_A_login WITH PASSWORD = 'test';
    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';
    CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\HOST_A_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
    USE master
    CREATE LOGIN HOST_C_login WITH PASSWORD = 'test';
    CREATE USER HOST_C_user FOR LOGIN HOST_C_login;
    CREATE CERTIFICATE HOST_C_cert AUTHORIZATION HOST_C_user FROM FILE = 'D:\HOST_C_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_C_login];
    GO
    
    --见证执行:
     USE master
    CREATE LOGIN HOST_A_login WITH PASSWORD = 'test';
    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';
    CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\HOST_A_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_A_login];
     USE master
    CREATE LOGIN HOST_B_login WITH PASSWORD = 'test';
    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';
    CREATE CERTIFICATE HOST_B_cert AUTHORIZATION HOST_B_user FROM FILE = 'D:\HOST_B_cert.cer';
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [HOST_B_login];
    
    
    
    
    
    -------------------------------------------------------------------------------------------------------
    --建立镜像关系---------------------------------------------------------------------------------------
    
    --以下步骤是针对每个数据库进行的,例如:现有主机中有5个数据库以下过程就要执行5次。
     
    --7、 手工同步登录名和密码
     
    --在前面提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录解决孤立用户。
     
    
    --在主数据库中执行如下语句:
    USE master;
    select sid,name,dbname from syslogins WHERE dbname='S_C_SC'
    
    --查找出要做镜像的那个数据库里面有哪些用户名和sid,例如:上述的’myuser’
    
    --在备库中执行如下语句:
     
    USE master;
    exec sp_addlogin 
    @loginame = '<LoginName>', 
    @passwd = '<Password>', 
    @sid = <sid> ;
    
    
    --8、准备备机数据库
    --主库要备份两个bak文件
    --第一个:完整备份
    --第二个:事务日志备份  ,截断事务日志
    
    --(1)先在备机还原完整备份,“restore with norecovery”和 覆盖现有数据库
    --(2)再还原事务日志,“restore with norecovery” 和时间点:最近状态
    
    
    
    
    --由于是实验,没有为服务器配置双网卡,IP地址与图有点不一样,但是原理一样。
     
     
    --9、必须要在镜像数据库中先设置好伙伴后,才能在主体服务器执行
    --再在主体服务器实例上,将 备机上的服务器实例设置为伙伴
    
    
    --备机执行
     USE master
    ALTER DATABASE S_C_SC SET PARTNER = 'TCP://192.168.1.100:5022'
    
    --主机执行
     USE master
    ALTER DATABASE S_C_SC SET PARTNER = 'TCP://192.168.1.103:5022'
    
    
    --10、在主机执行设置见证服务器
    ALTER DATABASE S_C_SC SET WITNESS = 'TCP://192.168.1.101:5022';
    GO
    
    
    
    
    -------------------------测试------------------------------
    --1、主备互换
     
    --主机停掉SQL服务
    
    
    --2、主服务器Down掉,备机紧急启动并且开始服务
    --备机执行:
    USE master;
    ALTER DATABASE S_C_SC SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS;
    ALTER DATABASE S_C_SC SET ONLINE
    
    
    --3、开启主机的SQL服务,原来的主服务器恢复,可以继续工作,需要重新设定镜像
    --备机执行:
    USE master;
    ALTER DATABASE S_C_SC SET PARTNER RESUME; --恢复镜像
    ALTER DATABASE S_C_SC SET PARTNER FAILOVER; --切换到主机
    
    
    --4、原来的主服务器恢复,可以继续工作


    给我写信: QQ我:点击这里给我发消息

    2012年9月27日 15:39