一 數據庫鏡像簡介
1.1 數據庫鏡像概述
數據庫鏡像維護一個數據庫的兩個副本,這兩個副本必須駐留在不一樣的 SQL Server 數據庫引擎服務器實例上。 一般,這些服務器實例駐留在不一樣位置的計算機上。 啓動數據庫上的數據庫鏡像操做時,在這些服務器實例之間造成一種關係,稱爲「數據庫鏡像會話」。
其中一個服務器實例使數據庫服務於客戶端(「主體服務器」), 另外一個服務器實例則根據鏡像會話的配置和狀態,充當熱備用或溫備用服務器(「鏡像服務器」)。 同步數據庫鏡像會話時,數據庫鏡像提供熱備用服務器,可支持在已提交事務不丟失數據的狀況下進行快速故障轉移。 未同步會話時,鏡像服務器一般用做熱備用服務器(可能形成數據丟失)。
在「數據庫鏡像會話」中,主體服務器和鏡像服務器做爲「夥伴」進行通訊和協做。 兩個夥伴在會話中扮演互補的角色:「主體角色」和「鏡像角色」。 在任何給定的時間,都是一個夥伴扮演主體角色,另外一個夥伴扮演鏡像角色。 每一個夥伴擁有其當前角色。 擁有主體角色的夥伴稱爲「主體服務器」,其數據庫副本爲當前的主體數據庫。 擁有鏡像角色的夥伴稱爲「鏡像服務器」,其數據庫副本爲當前的鏡像數據庫。 若是數據庫鏡像部署在生產環境中,則主體數據庫即爲「生產數據庫」。
數據庫鏡像涉及儘快將對主體數據庫執行的每項插入、更新和刪除操做「重作」到鏡像數據庫中。 重作經過將活動事務日誌記錄的流發送到鏡像服務器來完成,這會盡快將日誌記錄按順序應用到鏡像數據庫中。 與邏輯級別執行的複製不一樣,數據庫鏡像在物理日誌記錄級別執行。 從 SQL Server 2008 開始,在事務日誌記錄的流發送到鏡像服務器以前,主體服務器會先將其壓縮。 在全部鏡像會話中都會進行這種日誌壓縮。
提示:給定的服務器實例能夠參與到多個具備相同或不一樣夥伴的併發數據庫鏡像會話中。 某個服務器實例可能在某些會話中是夥伴,而在其餘會話中則是見證服務器。 鏡像服務器實例必須正在運行 SQL Server 的相同版本。
1.2 數據庫鏡像的優勢
數據庫鏡像是一種簡單的策略,具備下列優勢:
發生災難時,在具備自動故障轉移功能的高安全性模式下,自動故障轉移可快速使數據庫的備用副本聯機(而不會丟失數據)。 在其餘運行模式下,數據庫管理員能夠選擇強制服務(可能丟失數據),以替代數據庫的備用副本。 有關詳細信息,請參閱本主題後面的角色切換。
在 SQL Server 2008 Enterprise 或更高版本上運行的數據庫鏡像夥伴會自動嘗試解決某些阻止讀取數據頁的錯誤。 沒法讀取頁的夥伴會向其餘夥伴請求新副本。 若是此請求成功,則將以新副本替換不可讀的頁,這一般會解決該錯誤。
爲了儘可能減小鏡像服務器的停機時間,您能夠按順序升級承載故障轉移夥伴的 SQL Server 實例。 這樣只會致使一個故障轉移的停機時間。 這種形式的升級稱爲「滾動升級」。
1.3 數據庫鏡像術語和定義
- 自動故障轉移 (automatic failover)
一種過程,當主體服務器不可用時,該過程將致使鏡像服務器接管主體服務器的角色,並使其數據庫的副本聯機以做爲主體數據庫。
- 故障轉移夥伴 (failover partners)
充當鏡像數據庫的角色切換夥伴的兩個服務器實例(主體服務器或鏡像服務器)。
是指在負責將服務傳輸到鏡像數據庫(但它處於未知狀態)的主體服務器出現故障時數據庫全部者啓動的故障轉移。
- 高性能模式 (High-performance mode)
數據庫鏡像會話異步運行並僅使用主體服務器和鏡像服務器。 惟一的角色切換形式是強制服務(可能形成數據丟失)。
- 高安全性模式 (High-safety mode)
數據庫鏡像會話同步運行並能夠選擇使用見證服務器、主體服務器和鏡像服務器。
上圖所示不帶自動故障轉移的高安全性模式;
上圖所示帶自動故障轉移的高安全性模式。
是指在負責將服務從主體數據庫傳輸到鏡像數據庫(處於同步狀態)的主體服務器仍在運行時數據庫全部者啓動的故障轉移。
一般與主體數據庫徹底同步的數據庫副本。
在數據庫鏡像配置中,鏡像數據庫所在的服務器實例。
在數據庫鏡像配置中,鏡像數據庫所在的服務器實例。
- 主體數據庫 (principal database)
數據庫鏡像中的一種讀寫數據庫,其事務日誌記錄將應用到數據庫的只讀副本(鏡像數據庫)。
在數據庫鏡像中,是指當前做爲主體數據庫的數據庫所屬於的夥伴。
收到的等待鏡像服務器磁盤的事務日誌記錄。
主體服務器和鏡像服務器擔任互補的主體角色和鏡像角色。 也能夠由第三個服務器實例來擔任見證服務器角色。
鏡像接管主體角色。
在主體服務器的日誌磁盤累積的未發送的事務日誌記錄。
是指主體服務器、鏡像服務器和見證服務器(若是存在)之間進行數據庫鏡像期間造成的關係。
鏡像會話啓動或繼續後,將累積在主體服務器上的主體數據庫日誌記錄發送給鏡像服務器的過程,此過程將這些日誌記錄儘快寫入磁盤,以便與主體服務器保持同步。
- 事務安全 (Transaction safety)
一種鏡像特定的數據庫屬性,用於肯定數據庫鏡像會話是同步運行仍是異步運行。 有兩種安全級別:FULL 和 OFF。
僅用於高安全性模式,SQL Server 的一個可選實例,它能使鏡像服務器識別什麼時候要啓動自動故障轉移。 與這兩個故障轉移夥伴不一樣的是,見證服務器並不能用於數據庫。 見證服務器的惟一角色是支持自動故障轉移。
1.4 運行模式
數據庫鏡像會話以同步操做或異步操做運行。 在異步操做下,事務不須要等待鏡像服務器將日誌寫入磁盤即可提交,這樣可最大程度地提升性能。 在同步操做下,事務將在夥伴雙方處提交,但會延長事務滯後時間。
有兩種鏡像運行模式。 一種是「高安全性模式」,它支持同步操做。 在高安全性模式下,當會話開始時,鏡像服務器將使鏡像數據庫儘快與主體數據庫同步。 一旦同步了數據庫,事務將在夥伴雙方處提交,這會延長事務滯後時間。
第二種運行模式,即「高性能模式」,異步運行。 鏡像服務器嘗試與主體服務器發送的日誌記錄保持同步。 鏡像數據庫可能稍微滯後於主體數據庫。 可是,數據庫之間的時間間隔一般很小。 可是,若是主體服務器的工做負荷太高或鏡像服務器系統的負荷太高,則時間間隔會增大。
全部數據庫鏡像會話都只支持一臺主體服務器和一臺鏡像服務器。
具備自動故障轉移功能的高安全性模式要求使用第三個服務器實例,稱爲「見證服務器」。 與這兩個夥伴不一樣的是,見證服務器並不能用於數據庫。 見證服務器經過驗證主體服務器是否已啓用並運行來支持自動故障轉移。 只有在鏡像服務器和見證服務器與主體服務器斷開鏈接以後而保持相互鏈接時,鏡像服務器才啓動自動故障轉移。
注意:創建新的鏡像會話或將見證服務器添加到現有鏡像配置要求涉及的全部服務器實例運行相同版本的 SQL Server。 可是,當升級到 SQL Server 2008 或更高版本時,所涉及的實例的版本能夠不一樣。
1.5 事務安全與運行模式
運行模式是異步仍是同步取決於事務安全設置。 若是專門使用 SQL Server Management Studio 來配置數據庫鏡像,則在您選擇運行模式時,將自動配置事務安全設置。
若是使用 Transact-SQL 配置數據庫鏡像,則必須瞭解如何設置事務安全。 事務安全由 ALTER DATABASE 語句的 SAFETY 屬性控制。 在正在鏡像的數據庫中,SAFETY 爲 FULL 或 OFF。
若是將 SAFETY 選項設置爲 FULL,則在初始同步階段後,數據庫鏡像操做將同步執行。 若是在高安全性模式下設置見證服務器,則會話支持自動故障轉移。
若是將 SAFETY 選項設置爲 OFF,則數據庫鏡像操做將異步執行。 會話在高性能模式下運行,而且 WITNESS 選項也應設置爲 OFF。
二 角色切換
2.1 切換概述
在數據庫鏡像會話上下文中,一般可使用一個稱爲「角色切換」的過程來互換主體角色和鏡像角色。 角色切換涉及將主體角色轉換給鏡像服務器的操做。 在角色切換中,鏡像服務器充當主體服務器的「故障轉移夥伴」。 進行角色切換時,鏡像服務器將接管主體角色,並使其數據庫的副本聯機以做爲新的主體數據庫。 之前的主體服務器(若是有)將充當鏡像角色,而且其數據庫將變爲新的鏡像數據庫。 這些角色能夠反覆地來回切換。
2.2 角色切換形式
這要求使用高安全性模式並具備鏡像服務器和見證服務器。 數據庫必須已同步,而且見證服務器必須鏈接到鏡像服務器。
見證服務器的做用是驗證給定的夥伴服務器是否已啓動並運行。 若是鏡像服務器與主體服務器斷開鏈接,但見證服務器仍與主體服務器保持鏈接,則鏡像服務器沒法啓動故障轉移。
這要求使用高安全性模式。 夥伴雙方必須互相鏈接,而且數據庫必須已同步。
在高性能模式和不帶自動故障轉移功能的高安全性模式下,若是主體服務器出現故障而鏡像服務器可用,則能夠強制服務運行。
提示:高性能模式用於在沒有見證服務器的狀況下運行。 但若是存在見證服務器,則強制服務將要求見證服務器鏈接到鏡像服務器。
在任何一種角色切換狀況下,一旦新的主體數據庫聯機,客戶端應用程序便會經過從新鏈接到數據庫來快速恢復。
給定的服務器實例能夠參與到多個具備相同或不一樣服務器實例的併發數據庫鏡像會話(每一個鏡像數據庫發生一次)中。 一般,服務器實例專門用做其全部數據庫鏡像會話中的夥伴或見證服務器。 可是,因爲每一個會話都獨立於其餘會話,所以服務器實例能夠在某些會話中充當夥伴,而在其餘會話中充當見證服務器。 例如,請看三個服務器實例(SSInstance_一、SSInstance_2 和 SSInstance_3)中的下列四個會話。 每一個服務器實例均可在某些會話中做爲夥伴,而在其餘會話中做爲見證服務器:
服務器實例
|
數據庫 A 的會話
|
數據庫 B 的會話
|
數據庫 C 的會話
|
數據庫 D 的會話
|
SSInstance_1
|
見證服務器
|
夥伴
|
夥伴
|
夥伴
|
SSInstance_2
|
夥伴
|
見證服務器
|
夥伴
|
夥伴
|
SSInstance_3
|
夥伴
|
夥伴
|
見證服務器
|
見證服務器
|
下圖說明了都做爲夥伴參與兩個鏡像會話的兩個服務器實例。 一個會話用於名爲 Db_1 的數據庫,另外一個會話用於名爲 Db_2 的數據庫。
每一個數據庫獨立於其餘數據庫。 例如,服務器實例最初多是兩個數據庫的鏡像服務器。 若是其中一個數據庫發生故障轉移,則服務器實例將變爲已發生故障轉移的數據庫的主體服務器,同時爲其餘數據庫保留鏡像服務器。
或者有一個服務器實例,它是兩個或多個以具備自動故障轉移功能的高安全性模式運行的數據庫的主體服務器,若是此服務器實例失敗,則全部數據庫將自動故障轉移到其相應的鏡像數據庫。
提示:若是將一個服務器實例設置成既做爲夥伴又做爲見證服務器參與會話,請確保數據庫鏡像端點可以支持兩種角色。 同時,還要確保系統具備足夠資源以減小資源爭用。
注意:因爲鏡像數據庫相互獨立,所以這些數據庫不能做爲一個組來進行故障轉移。
三 其餘
3.1 暫停會話對主體事務日誌的影響
數據庫全部者能夠隨時暫停會話。 執行暫停操做將保留在刪除鏡像時的會話狀態。 暫停會話時,主體服務器不會向鏡像服務器發送任何新的日誌記錄。 全部這些記錄將保持活動狀態,並堆積在主體數據庫的事務日誌中。 只要數據庫鏡像會話保持暫停狀態,事務日誌就不會被截斷。 所以,若是數據庫鏡像會話暫停時間過長,則可能會使該日誌填滿。
3.2 設置數據庫鏡像會話
開始鏡像會話以前,數據庫全部者或系統管理員必須建立鏡像數據庫,設置端點和登陸名。在某些狀況下,還要建立並設置證書。
3.3 與其餘數據庫引擎功能的互操做性和共存
數據庫鏡像能夠與 SQL Server 的下列功能或組件一塊兒使用。
注意:後續版本的 Microsoft SQL Server 將刪除該功能。請避免在新的開發工做中使用該功能,並着手修改當前還在使用該功能的應用程序。可改用 AlwaysOn 可用性組。
參考官方文檔:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms189852(v%3dsql.110)