002.SQLServer資料庫鏡像高可用簡介

来源:https://www.cnblogs.com/itzgr/archive/2019/05/15/10867682.html
-Advertisement-
Play Games

一 資料庫鏡像簡介 1.1 資料庫鏡像概述 資料庫鏡像維護一個資料庫的兩個副本,這兩個副本必須駐留在不同的 SQL Server 資料庫引擎伺服器實例上。 通常,這些伺服器實例駐留在不同位置的電腦上。 啟動資料庫上的資料庫鏡像操作時,在這些伺服器實例之間形成一種關係,稱為“資料庫鏡像會話”。 其中 ...


一 資料庫鏡像簡介

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)
資料庫鏡像會話非同步運行並僅使用主體伺服器和鏡像伺服器。 唯一的角色切換形式是強制服務(可能造成數據丟失)。 001
  • 高安全性模式 (High-safety mode)
資料庫鏡像會話同步運行並可以選擇使用見證伺服器、主體伺服器和鏡像伺服器。 002 上圖所示不帶自動故障轉移的高安全性模式; 003 上圖所示帶自動故障轉移的高安全性模式。
  • 手動故障轉移 (manual failover)
是指在負責將服務從主體資料庫傳輸到鏡像資料庫(處於同步狀態)的主體伺服器仍在運行時資料庫所有者啟動的故障轉移。
  • 鏡像資料庫 (mirror database)
通常與主體資料庫完全同步的資料庫副本。
  • 鏡像伺服器 (mirror server)
在資料庫鏡像配置中,鏡像資料庫所在的伺服器實例。
  • 鏡像伺服器 (mirror server)
在資料庫鏡像配置中,鏡像資料庫所在的伺服器實例。
  • 主體資料庫 (principal database)
資料庫鏡像中的一種讀寫資料庫,其事務日誌記錄將應用到資料庫的只讀副本(鏡像資料庫)。
  • 主體伺服器 (principal server)
在資料庫鏡像中,是指當前作為主體資料庫的資料庫所屬於的伙伴。
  • 重做隊列 (redo queue)
收到的等待鏡像伺服器磁碟的事務日誌記錄。
  • 角色 (role)
主體伺服器和鏡像伺服器擔任互補的主體角色和鏡像角色。 也可以由第三個伺服器實例來擔任見證伺服器角色。
  • 角色切換 (role switching)
鏡像接管主體角色。
  • 發送隊列 (send queue)
在主體伺服器的日誌磁碟累積的未發送的事務日誌記錄。
  • 會話 (session)
是指主體伺服器、鏡像伺服器和見證伺服器(如果存在)之間進行資料庫鏡像期間形成的關係。 鏡像會話啟動或繼續後,將累積在主體伺服器上的主體資料庫日誌記錄發送給鏡像伺服器的過程,此過程將這些日誌記錄儘快寫入磁碟,以便與主體伺服器保持同步。
  • 事務安全 (Transaction safety)
一種鏡像特定的資料庫屬性,用於確定資料庫鏡像會話是同步運行還是非同步運行。 有兩種安全級別:FULL 和 OFF。
  • 見證伺服器 (Witness)
僅用於高安全性模式,SQL Server 的一個可選實例,它能使鏡像伺服器識別何時要啟動自動故障轉移。 與這兩個故障轉移伙伴不同的是,見證伺服器並不能用於資料庫。 見證伺服器的唯一角色是支持自動故障轉移。

1.4 運行模式

資料庫鏡像會話以同步操作或非同步操作運行。 在非同步操作下,事務不需要等待鏡像伺服器將日誌寫入磁碟便可提交,這樣可最大程度地提高性能。 在同步操作下,事務將在伙伴雙方處提交,但會延長事務滯後時間。 有兩種鏡像運行模式。 一種是“高安全性模式”,它支持同步操作。 在高安全性模式下,當會話開始時,鏡像伺服器將使鏡像資料庫儘快與主體資料庫同步。 一旦同步了資料庫,事務將在伙伴雙方處提交,這會延長事務滯後時間。 第二種運行模式,即“高性能模式”,非同步運行。 鏡像伺服器嘗試與主體伺服器發送的日誌記錄保持同步。 鏡像資料庫可能稍微滯後於主體資料庫。 但是,資料庫之間的時間間隔通常很小。 但是,如果主體伺服器的工作負荷過高或鏡像伺服器系統的負荷過高,則時間間隔會增大。 所有資料庫鏡像會話都只支持一臺主體伺服器和一臺鏡像伺服器。 004 具有自動故障轉移功能的高安全性模式要求使用第三個伺服器實例,稱為“見證伺服器”。 與這兩個伙伴不同的是,見證伺服器並不能用於資料庫。 見證伺服器通過驗證主體伺服器是否已啟用並運行來支持自動故障轉移。 只有在鏡像伺服器和見證伺服器與主體伺服器斷開連接之後而保持相互連接時,鏡像伺服器才啟動自動故障轉移。 005   註意:建立新的鏡像會話或將見證伺服器添加到現有鏡像配置要求涉及的所有伺服器實例運行相同版本的 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_1、SSInstance_2 和 SSInstance_3)中的下列四個會話。 每個伺服器實例都可在某些會話中作為伙伴,而在其他會話中作為見證伺服器:
伺服器實例 資料庫 A 的會話 資料庫 B 的會話 資料庫 C 的會話 資料庫 D 的會話
SSInstance_1 見證伺服器 伙伴 伙伴 伙伴
SSInstance_2 伙伴 見證伺服器 伙伴 伙伴
SSInstance_3 伙伴 伙伴 見證伺服器 見證伺服器
下圖說明瞭都作為伙伴參與兩個鏡像會話的兩個伺服器實例。 一個會話用於名為 Db_1 的資料庫,另一個會話用於名為 Db_2 的資料庫。 006 每個資料庫獨立於其他資料庫。 例如,伺服器實例最初可能是兩個資料庫的鏡像伺服器。 如果其中一個資料庫發生故障轉移,則伺服器實例將變為已發生故障轉移的資料庫的主體伺服器,同時為其他資料庫保留鏡像伺服器。 或者有一個伺服器實例,它是兩個或多個以具有自動故障轉移功能的高安全性模式運行的資料庫的主體伺服器,如果此伺服器實例失敗,則所有資料庫將自動故障轉移到其相應的鏡像資料庫。 提示:如果將一個伺服器實例設置成既作為伙伴又作為見證伺服器參與會話,請確保資料庫鏡像端點能夠支持兩種角色。 同時,還要確保系統具有足夠資源以減少資源爭用。 註意:由於鏡像資料庫相互獨立,因此這些資料庫不能作為一個組來進行故障轉移。

三 其他

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)
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 安裝SQL資料庫時遇到問題。需要更新以前的visual studio 2010實例此電腦安裝了需要service pack 1更新的visual 2010,必須安裝此更新才能成功安裝選擇的SQL server 功能。若要繼續,從SQL介質或者從http://go.microsoft.com/fwl ...
  • 本文參考-https://www.cnblogs.com/xxaxx/p/3584036.html oracle沒有像sqlserver中identity一樣的函數,需要依賴於序列、觸發器來實現自增主鍵。 創建表 Create table t_user( pk_user number(6), use ...
  • 1 資料庫基本操作? (1) 查看資料庫 show databases; (2)切換到指定的資料庫 use dbname; (3)創建資料庫 create database 庫名 charset=utf8; (4)刪除資料庫 drop database 庫名; 2 數據表基本操作? (1) 查看當前 ...
  • 在動態編程中,我們需要獲取表的結構數據,如表名,數據類型,精度等數據。你可以參考下麵幾行代碼: DECLARE @table_Name SYSNAME = 'Q' SELECT t.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.NUMERIC_PRECISION ...
  • 一、Linux lucene: 全文檢索引擎的架構 solr: 基於lucene的全文搜索伺服器,實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面。 推薦一個大數據學習群 142974151每天晚上20:10都有一節【免費的】大數據直播課程,專註大數據分析方法,大數據編程 ...
  • 搜索存儲過程,視圖,函數(Table-valued Function, Scalar-valued Function)內容。 DECLARE @search_word NVARCHAR(MAX) = 'CAST' SELECT sys.objects.name AS [Object Name] FR ...
  • 本文引用自- https://www.cnblogs.com/qianyuliang/p/6649983.html https://blog.csdn.net/defonds/article/details/80455816 方法一:vm_concat() 函數 oracle wm_concat(c ...
  • 想知道某一天是星期幾,下麵Insus.NET寫了一個函數,具體是怎樣,可以細細研究。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- -- Author: Insus.NET -- Create date: 2019-05-15 -- Upda ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...