设为首页 加入收藏

TOP

第三篇――第二部分――第一文SQLServer镜像简介(二)
2014-11-23 21:29:10 来源: 作者: 【 】 浏览:22
Tags:第三篇 第二部分 一文 SQLServer 简介
a_huangzj/article/details/26846203

  注意:一个数据库只能有一个镜像库,如果需要保持多个副本,可以借助日志传送加镜像。

镜像状态:

SQL Server镜像状态可能包含下面几种:

SYNCHRONIZING:正在同步,通常在第一次启用数据库镜像时出现,表示镜像服务器正在追上主体服务器的进度。
SYNCHRONIZED:已经同步完毕,大部分时间都是这种状态,一旦有爆发性的事务传输到镜像数据库,状态会从SYNCHRONIZED转变成SYNCHRONIZING。在高安全性模式下,这种状态通常不会导致数据丢失,仅表示镜像服务器正在同步,但是在高性能模式下,可能有数据丢失的风险。
SUSPENDED:挂起,当主体服务器不发送事务到镜像服务器时出现,在Failover发生后会出现这种状态(如果镜像环境依旧运行,仅使用Failover则不出现,但是如果镜像库断开连接,则会出现)。手动暂停镜像会话或者redo 日志发生错误时都会出现。
PENDING_FAILOVER:仅当主体服务器变成镜像服务器并且断开用户连接时,会在原主体服务器出现这种状态。在这种状态下,主体服务器和镜像服务器都会表现这种状态。但是见证服务器会出现:CONNECTED/DISCONNECTED/UNKNOWN的其中一种状态。
CONNECTED:代表见证服务器能连到其中一个伙伴,另外两种代表不能连到伙伴服务器,这种情况下,数据库会变成不可用,如果镜像环境使用了见证,而镜像服务器为DISCONNECTED,并且镜像服务器奔溃,那么数据库(即使在主体服务器上)都会变得无法访问。所以当见证为disconnected,可以关闭见证,从而禁用仲裁,使用ALTER DATABASE SET WITNESS OFF实现。
DISCONNECTED:当镜像环境中的伙伴均无法连接对方时出现。

  可以使用sys.database_mirroring目录视图查看镜像信息。

切换角色:

相比其他高可用,镜像可以轻易切换角色,SQL Server镜像可以使用下面三种方式切换角色:

手动Failover:

使用T-SQL语句:

Use master
go
ALTER DATABASE  SET PARTNER FAILOVER--在主体服务器上执行

使用SSMS:

\

图1-6使用SSMS实现手动Failover

注意:高性能模式下不支持手动切换

自动Failover:

带有见证服务器的高安全模式,当主体连接失败或者停止工作时,会自动切换到镜像服务器。当原主体服务器重新连机时,这台原主体服务器会变成镜像环境中的镜像服务器。

可能丢失数据的强制切换:

这种切换方式支持没有见证服务器的高性能和高安全模式,可以使用下面的T-SQL语句实现:

ALTER DATABASE  SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS --在镜像库执行

透明客户端重定向 :

由SQL Native Client(SNAC)提供,允许镜像环境下,应用程序自动重定向到镜像数据库中。通过在连接字符串加上Failover_Partner关键字来实现。应用程序需要添加重新尝试联接的功能。

SQL Server2008镜像的改进:

日志流压缩:

基于最小化网络带宽带来的影响,2008引入了日志流压缩功能,但是需要注意压缩和解压功能天生就会增加CPU的开销。

自动页还原:

在过去,页损坏是很头痛的事情,并且很难恢复。2008的镜像功能通过把镜像库的对应页恢复到主体库的页上,从而恢复数据。但是有些页镜像是不能回复的,比如文件头(page 0),数据库启动页(boot page,page 9),SGAM、PFS。但是对于下面的情况,镜像可以恢复:

Error 823:OScyclic redundancy check(CRC)failure
Error 824:logical errors including a bad page checksum or torn write
Error 829:page has been marked as restore pending

SQL Server镜像各功能所需版本:

  一图抵千言,图1-7展示了SQL Server镜像中各个功能所需的版本支持:

\

图1-7 SQL Server镜像中各个功能所需的版本支持

其他高可用对比

截至SQL Server 2012为止,内置的高可用功能有集群(Cluster)、镜像(Mirroring)、复制(Replication)、日志传送(Log Shipping)和AlwaysOn(2012出现)。其中AlwaysOn基本上已经实现了集群、镜像的组合功能,所以本文不把镜像和AlwaysOn比较。仅对其他部分比较。详细信息可以看官方文档:

http://msdn.microsoft.com/zh-cn/library/ms190202(v=sql.105).aspx

下面简要介绍一下镜像和其他部分的对比:

集群(Cluster)

优点:
这部分特指2012之前的Cluster,它基于Windows 的故障转移集群,可以自动检测SQL Server的健康状态,进行自动故障转移切换(自动Failover)。并且它的切换时间几乎等于SQL Server服务启动时间,除非有大量事务需要redo,否则一般不会延时很久,和带有见证服务器的高安全运行模式一起被称为2012之前的0延时高可用技术。另外两种都不能实现自动切换及0延时。
通过虚拟网络名称,客户端可以透明访问活动实例,而不用修改程序的连接字符串,这一点比镜像有进一步的改进,镜像由于只有一个镜像库,所以在第一次Failover成功之后,如果不做处理,镜像环境中原主体库即使重新联机。
从2008开始可以指定对非活跃节点进行升级维护。
缺点:
使用共享磁盘,如果共享磁盘出问题,整个Cluster都会瘫痪。
非活跃节点一直处于停止状态,不能分摊负载,也造成资源浪费。
实施成本高,需要最少3台机且必须在域中。
故障转移是整个实例的,和镜像不同,如果只有某个或者少数几个库出现问题需要Failover,镜像可以进行单独转移,但是Cluster不可以,这样会导致少数不相关的库受牵连。

  Cluster有译成群集,不过这个无所谓,大家知道这个意思即可。我个人偏向使用英文。

复制(Replication)

  复制天生就不是一种高可用技术,实际上是用来进行数据同步而已。如果单纯进行高可用方案,复制不是一个首选方案。

优点:
实现对象级别的同步,可以细化到列和行。
订阅库(也就是复制环境下的目标库)是可读的,可以进行读写分离方案。
支持多个库订阅一个库。延时可以达到秒级。
可以使用不同的SQL Server版本。
缺点:
不提供自动故障转移。
不保证对象0丢失。
故障侦测较为困难,错误信息往往不能很明显地表现出问题。
对表的定义有一定限制,比如事务复制要求表必须有主键。

日志传送(Log Shipping)

优点:
目标库可作为报表使用。并且过程中对主体服务器的压力很小。
支持冗余多个副本,可进行远程暖备。
机制简单,故障侦测较为容易。
缺点:
不支持不同版本的SQL Server。
延时是一定有的,不能实现完全同步。
不支持自动侦测和转移。
还原日志时,
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL Server用户自定义函数 下一篇SQL 字符串截取函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: