Fork me on GitHub
Clustering vs. Witness SQL Server AlwaysOn vs. Database Mirroring

 

SQL Server 2012 AlwaysOn vs. Database Mirroring

 

 http://caryhsu.blogspot.com/2012/04/sql-server-2012-alwayson-vs-database.html

 

        SQL Server 2012中最重要的一個新功能就是高可用性(High-Availability)中的AlwaysOn,而在我之前的文章中已有深入的介紹,詳細請參考下列的連結,由於AlwaysOn是Database Mirroring的加強版,但是常常有人搞不清楚兩者之間的差異,所以我參考了網路上的一篇文章後,將文章與心得整理如下,再請參考。

參考文章:
SQL Server 2012 新功能 - AlwaysOn安裝與設定
http://caryhsu.blogspot.com/2012/04/sql-server-2012-alwayson.html
SQL Server - AlwaysOn連線設定
http://caryhsu.blogspot.com/2012/04/sql-server-alwayson.html
SQL Server - 如何建立 Database Mirroring
http://caryhsu.blogspot.com/2011/12/sql-server-database-mirroring.html

1、Clustering vs. Witness
AlwaysOn必須架設在Windows Cluster(WSFC)上,而如果Database Mirroring要作到Auto Failover時,就必須有第三台進行監控,也就是Witness的角色,就兩者相比由於Cluster必須要有特定硬體支援,而Witness的電腦只需要非常簡單的配備與SQL Server Express的版本就好,但是由於WSFC在節點偵測上(Heartbeat)的處理比Database Mirroring好很多,所以算是大大的提升穩定度的部份。

2、四個複寫節點 vs. 1 個鏡射節點
AlwaysOn比Database Miroring更優越的地方就是最多有四個複寫節點,比Database Mirroring只有一個節點相比,更可以提高系統的可用性。

 
3、多點資料庫失敗移轉 vs. 單點資料庫失敗移轉
如同第二項所述,由於Database Mirroring只有一個鏡射節點,所以系統發生失敗時,就只有一個節點可以當成備援,而Database Mirroring是一個以資料庫層級為主的高可用性,所以關於Server - Level的物件並不會進行同步,如系統登入帳號等,在Database Mirroring你不必須手動進行建立,但是在在AlwaysOn,由於透過可用性群組(Availability Group),所以這些就不需在擔心了。

4、混合同步與非同步連線 vs 同步或非同步連線
在Database Mirroring你只能選擇同步(High Safety)或是非同步(High Performance)模式,但是在AlwaysOn中不同複寫節點可以選擇不同的同步方式,但最重要的事,在容錯移轉的同時,必須以同步的節點進行,否則會有資料遺失的可能性,再請注意了。

5、唯讀的資料庫複本 vs 還原中的鏡射資料庫
在Database Mirroring中鏡射資料庫為還原中的狀態,所以是完全無法進行讀取的,但是您可以透過快照的方式,讓使用者存取,但是在建立快照時,還是需要將使用者的連線切斷,所以仍有不便的地方。而AlwaysOn複本資料庫提供唯讀的方式進行存取,讓你在效能負載平衡上有更好的應用。


參考網址:
SQL Server Denali AlwaysOn vs. Database Mirroring
http://www.sqlmag.com/article/sqlserverdenali/sql-server-denali-alwayson-140199


關鍵字:SQL Server 2012AlwaysOnDatabase MirroringAvailability Group

搭建sqlserver AlwaysOn

 

AlwaysOn是sqlserver2012开始支持的基于日志的数据库同步方案

参考

从0开始搭建SQL Server AlwaysOn 第一篇(配置域控):https://www.cnblogs.com/lyhabc/p/4678330.html
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群):https://www.cnblogs.com/lyhabc/p/4682028.html
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn):https://www.cnblogs.com/lyhabc/p/4682986.html
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点):http://www.cnblogs.com/lyhabc/p/6136227.html
搭建非域AlwaysOn win2016+SQL2016:http://www.cnblogs.com/lyhabc/p/6498712.html
SQL Server AG集群启动不起来的临时自救大招:http://www.cnblogs.com/lyhabc/p/6953255.html

根据sys.database_mirroring查询镜像数据库同步状态

 
SELECT * FROM sys.database_mirroring WHERE database_id =DB_ID('dbname')

主要查看mirroring_state字段和值和mirroring_end_of_log_lsn字段的值

实例 SQL Server 中的每个数据库在表中占一行。如果数据库未联机,或未启用数据库镜像,则除 database_id 以外的所有列的值都将为 NULL。

若要查看除 master 或 tempdb 以外的数据库行,您必须是数据库所有者或至少在 master 数据库中拥有 ALTER ANY DATABASE 或 VIEW ANY DATABASE 服务器级别的权限或 CREATE DATABASE 权限。若要查看某一镜像数据库上的非 NULL 值,您必须是 sysadmin 固定服务器角色的成员。

注意注意

如果数据库未参与镜像,则所有带有 mirroring_ 前缀的列将为 NULL。

 

列名

数据类型

说明

database_id

int

数据库的 ID。在 SQL Server 实例中是唯一的。

mirroring_guid

uniqueidentifier

镜像合作关系的 ID。

NULL = 数据库不可访问或未镜像。

注意注意
如果数据库未参与镜像,则所有带有 mirroring_ 前缀的列将为 NULL。

mirroring_state

tinyint

镜像数据库的状态和数据库镜像会话的状态。

0 = 已挂起

1 = 与其他伙伴断开

2 = 正在同步

3 = 挂起故障转移

4 = 已同步

5 = 伙伴未同步。现在无法进行故障转移。

6 = 伙伴已同步。可以进行故障转移。有关故障转移要求的信息,请参阅同步数据库镜像(高安全性模式)

NULL = 数据库不可访问或未镜像。

mirroring_state_desc

nvarchar(60)

镜像数据库状态和数据库镜像会话状态的说明,可以是下列值之一:

DISCONNECTED

SYNCHRONIZED

SYNCHRONIZING

PENDING_FAILOVER

SUSPENDED

UNSYNCHRONIZED

SYNCHRONIZED

NULL

有关详细信息,请参阅镜像状态

mirroring_role

tinyint

本地数据库在数据库镜像会话中的当前角色。

1 = 主体

2 = 镜像

NULL = 数据库不可访问或未镜像。

mirroring_role_desc

nvarchar(60)

本地数据库在镜像中的角色说明,可以是以下值之一:

PRINCIPAL

MIRROR

mirroring_role_sequence

int

由于故障转移或强制服务,导致镜像伙伴在主体数据库角色和镜像数据库角色之间进行切换的次数。

NULL = 数据库不可访问或未镜像。

mirroring_safety_level

tinyint

镜像数据库更新的安全设置:

0 = 未知状态

1 = 关闭 [异步]

2 = 完全 [同步]

NULL = 数据库不可访问或未镜像。

mirroring_safety_level_desc

nvarchar(60)

镜像数据库更新的事务安全设置,可以是下列值之一:

UNKNOWN

OFF

FULL

NULL

mirroring_safety_sequence

int

将更改的序列号更新为事务安全级别。

NULL = 数据库不可访问或未镜像。

mirroring_partner_name

nvarchar(128)

数据库镜像伙伴的服务器名称。

NULL = 数据库不可访问或未镜像。

mirroring_partner_instance

nvarchar(128)

其他伙伴的实例名和计算机名称。如果伙伴成为主体服务器,则客户端需要此信息以连接到该伙伴服务器。

NULL = 数据库不可访问或未镜像。

mirroring_witness_name

nvarchar(128)

数据库镜像见证服务器的服务器名称。

NULL = 不存在见证服务器。

mirroring_witness_state

tinyint

数据库的数据库镜像会话中的见证服务器状态,可以是下列值之一:

0 = 未知

1= 已连接

2 = 已断开

NULL = 见证服务器不存在,数据库未联机或未镜像。

mirroring_witness_state_desc

nvarchar(60)

状态说明,可以是下列值之一:

UNKNOWN

CONNECTED

DISCONNECTED

NULL

mirroring_failover_lsn

numeric(25,0)

保证将被镜像到两个伙伴服务器磁盘中的最新事务日志记录的日志序列号 (LSN)。故障转移之后,伙伴服务器便会将 mirroring_failover_lsn 用作调解点,在这个调解点上,新的镜像服务器开始将新的镜像数据库与新的主体数据库进行同步。

mirroring_connection_timeout

int

镜像连接超时值(秒)。这是等待伙伴或见证服务器回复的秒数,超过该时间后,伙伴或见证服务器将被视为不可用。默认超时值为 10 秒。

NULL = 数据库不可访问或未镜像。

mirroring_redo_queue

int

对镜像服务器重做的最大日志量。如果 mirroring_redo_queue_type已设置为默认设置 UNLIMITED,则此列为 NULL。如果数据库未联机,则该列也为 NULL。

否则,该列包含最大日志量 (MB)。如果达到最大值,则当镜像服务器也达到同一值时,日志将在主体服务器上临时停止。此功能限制故障转移时间。

有关详细信息,请参阅估计角色切换过程中的服务中断

mirroring_redo_queue_type

nvarchar(60)

UNLIMITED 指示镜像不会禁止重做队列。这是默认设置。

以兆字节为单位的重做队列的最大大小 (MB)。注意,如果队列大小以 KB 或 GB 形式指定,则 SQL Server 2005 数据库引擎会将该值转换为 MB。

如果数据库未联机,则该列为 NULL。

mirroring_end_of_log_lsn

numeric(25,0)

已刷新到磁盘的本地日志结束信息。这与镜像服务器的硬化 LSN 对应(请查看 mirroring_failover_lsn列)。

mirroring_replication_lsn

numeric(25,0)

复制可以发送的最大 LSN。

posted on 2021-12-14 11:03  HackerVirus  阅读(105)  评论(0编辑  收藏  举报