这个是介于clustering和log
shipping之间的一种维持数据库的高可用性的方式。今天在配置的时候也是碰到了一些问题,在这里记述一下,以后需要的时候避免再为同样的问题所困扰。
首先说明一下,进行sqlserver镜像,不非得是在同一个域中(或者说有域)才能进行,在工作组中的两台服务器一样可以进行镜像,但是在
sqlserver2005中,在工作组中的镜像好像不能用图形界面的向导来完成,最后启动镜像需要使用sql脚本来完成(不知道这是不是又是微软的一个
bug),另外sqlserver至少得是sp1的,没打sp1的先打了好像才能使用sqlserver镜像。
下面说下准备工作:
1 如果要实现完全自动化的fail
over,那么就需要准备出三个sqlserver的实例,否则的话,至少要有两个sqlserver的实例,一个运行主数据库,一个运行镜像数据库,但这个在发生故障的时候,只能自己使用sql语句或者使用图形界面中的按钮来实行fail
over。
2 这点最重要,也最容易出现问题和混乱,又是。因为镜像需要在sqlserver中创建endpoint并进行验证,所以如果要使用windows验证,也就是镜像服务器和主服务器之间使用windows的账户来进行验证的话,那么则需要改变sqlserver服务的启动用户,不能使用默认的本地服务账户启动sqlserver服务,要使用用来验证的windows用户来启动sqlsever服务。我是工作组中的两台计算机,简单点的话,在两台服务器上配两个完全一样的账户,用它们来启动各自的sqlserver实例的服务。如果两台计算机不能使用windows验证,例如服务器实例不在受信任域中或
SQL Server
作为本地服务运行时,则只能使用证书的验证方法,这个就不需要对sqlserver服务的启动账户进行配置了。
3 这点要注意,尤其是操作顺序。首先要将主数据库的恢复模式设置为完全模式,使用如下sql语句来完成
alter database test set recovery
full,如果不将主数据库设为完全恢复模式就备份,在执行启动镜像的sql语句的时候会报错,说没有处在完全恢复模式一类的错误。
然后对主数据库进行完全备份,然后将其恢复到镜像服务器中,在恢复的时候要创建一个和主数据库同名的镜像数据,在恢复镜像数据库的时候,要使用with
norecovery选项,我使用的是图形界面进行的恢复,在恢复选项里设置,这项不是默认选项,(接下来说的这步在后面也有提,但放在前面我觉得后面就不会出现那个问题了)然后再对主数据库进一次事务日志备份,然后同样用with
norecovery在镜像服务器上恢复到刚才的恢复的镜像数据库上。
然后开始设置镜像:其实主要就是要来创建endpoint而已。使用windows验证的话,使用主数据库->属性中的镜像设置中的配置安全性来创建
endpoint即可,很方便。因为我没有第三个sqlserver实例,所以在包括见证服务器的设置中,只能选择否,然后其他的按向导走就行,很明了,最后有一个服务账户的设置,它上面的说明其实说的也挺明白的了,一般来说,如果使用的是windows验证,两个sqlserver服务的启动账户又使用的是相同的账户名,则留空就行了,这个只有在使用的是不同账户的时候才需要进行设置。然后next,也就设置完了,设置成功后会询问是否要启动镜像,如果两台数据库服务器是在域里的话,选启动应该不会有什么问题了(到底怎么样我不清楚,因为我没有域的环境),但如果是在工作组中的两台服务器的话,点开始的话就会报:
一个或多个服务器网络地址缺少完全限定域名(FQDN)。为每个服务器指定
FQDN,然后再次单击“开始镜像”。
完全限定 TCP
地址的语法如下:
TCP://<计算机名>.<域段>[.<域段>]:<端口>
这样的错误,因为在工作组中的计算机可能会没有域名,它这里要求的主服务器跟镜像服务器的计算机名要使用完全的名称语法,即计算机名.域名的模式,但是在工作组中的计算机的名字可能只会是计算机名,没有域名。这里有两种解决办法:
一种是修改计算机名,在控制面板-系统-计算机名选项卡中点更改,然后点其他,给这个计算机添加一个dns后缀,然后重启计算机,镜像服务器也得做同样的修改,添加上同样的dns后缀,这样计算机名就符合sqlserver要求的计算机名.域名的格式了,然后要在WINDOWS/system32
/drivers/etc/hosts文件中加入主机名(计算机.域名)跟ip的映射,在主服务器中加入镜像服务器的计算机名和ip映射,镜像服务器同样要加上主服务器的映射,这样才能通过计算机名.域名的方式访问到相应的服务器,不然(我估计是没有DNS服务器的缘故)镜像和主服务器是无法通过那种模式的计算机名互相访问的。两台机器加上那个配置以后,在向导中点开始镜像就可以顺利的开始镜像了。(这种方法一样存在下面那个方法中的问题,不能光只还原一个主数据库的完全备份,还要在之后还原一个主数据库的事务日志备份,才能顺利启动镜像)
第二种方法就是使用sql脚本来启动镜像。首先在镜像服务器的master数据中,执行
alter
database test set partner='tcp://principalserver:5502'
然后在主服务器上执行
ALTER
DATABASE test SET PARTNER = ‘TCP://MirrorServer:5023’,这时候会报错:
消息 1412,级别
16,状态 0,第 1 行
数据库 "test"
的远程副本尚未前滚到包含在数据库日志的本地副本中的时间点。
在主数据库上执行一个日志备份,然后将这个备份用with
norecovery选项在镜像服务器上恢复,然后再分别在镜像服务器上和主服务器上(注意顺序不可颠倒)执行上面的sql语句,就成功启动镜像了。如果需要进行failover,则在主服务器上使用alter
database test set partner
failover就可以了,或者在主服务器的test服务器节点的镜像设置中,点故障转移,也可以进行转移了。
不过我觉得要是主服务器真的彻底玩完了,那就可能没法这样子故障转移了。而且这个还得需要手动操作,如果使用见证服务器的话就可以自动进行了转移了。还有就是一般数据库镜像还是用于中型数据库即可,大型的数据库这种技术好像不是太适合,书中如是说我记得。
另外要说的是,如果使用的不是windows验证而使用证书验证的话,则需要在所有参与的服务器上先在master数据库中创建密钥,然后创建证书,最后在创建节点的时候,使用证书验证。具体的参见:
如何允许数据库镜像使用证书进行出站连接
(Transact-SQL)
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/udb9/html/464c9096-10d6-4c5e-8bb1-19acba27ad9e.htm
示例:使用证书设置数据库镜像
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/udb9/html/df489ecd-deee-465c-a26a-6d1bef6d7b66.htm
Sqlserver 数据库镜像配置小记
最新推荐文章于 2025-10-13 10:04:11 发布
本文详细记录了在非域环境下配置SQLServer数据库镜像的过程,包括遇到的问题及解决方案。涉及完全自动化故障切换的条件、数据库恢复模式设置、镜像实例的创建以及使用Windows验证和证书验证的方法。在配置过程中强调了endpoint的创建、事务日志备份的重要性以及在没有FQDN时的解决策略。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Python3.10
Conda
Python
Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本
498

被折叠的 条评论
为什么被折叠?



