概要
If you have a multi-array environment, you can freeze database write I/O to take coordinated snapshots across volumes on two FlashArray systems using the T-SQL snapshot backup feature in SQL Server 2022.
本文首先出現在 Anthony Nocentino 的部落格上。經作者的信任與同意,重新發表。
在這篇文章中,我想分享一個例子,說明 SQL Server 2022 的 T-SQL 快照備份功能,其中資料庫橫跨多個儲存陣列。如果您正在處理多陣列環境,您會知道這項技術如何凍結資料庫寫入 I/O,以便在兩個 FlashArray FlashArray 系統上跨磁碟區擷取經過協調的快照。在這篇文章中,我會引導您完成整個流程,指出腳本的關鍵要素,並向您展示寫入 I/O 暫停的時間。
情境
假設您有一個名為 MultiArraySnapshot 的資料庫,分佈在兩個不同的磁碟區中,每個磁碟區都位於 Pure Storage® FlashArray 系統上。此設定有助於管理大型、任務關鍵型環境,這些環境對效能和資料一致性至關重要。挑戰在於協調快照備份,讓兩個陣列能夠同時擷取一致的資料檢視。使用 SQL Server 2022 的 T-SQL 快照備份功能,我們就能做到這一點…讓我們深入探討一下。
圖 1:兩個 FlashArray 系統上的檔案資料庫。
流程概覽
這個過程非常簡單:使用 T-SQL 快照凍結資料庫,擷取每個陣列的快照,然後執行僅中繼資料的備份,以記錄快照詳細資料。此中繼資料備份會自動解凍資料庫。
設定環境
首先,我們會匯入必要的模組,並定義 SQL Server 實例、兩個 FlashArray 系統和各種磁碟區所需的連線變數。請注意,我們如何指定目標磁碟序號和備份共用路徑等詳細資料:
我們利用新工作階段建立 PowerShell 移除工作階段,並透過 Connect-DbaInstance 建立持久的 SMO 連線。此連線非常重要,因為在寫入備份中繼資料之前,它將保持開啟狀態。
檢查資料庫檔案配置
接下來,讓我們使用 Get-DbaDbFile 取得指定資料庫的資料庫檔案詳細資訊。在我們的範例中,P:\SQLDATA1\MultiArraySnapshot.mdf 位於 FlashArray1 上,而 Q:\SQLLOG1\MultiArraySnapshot_log.ldf FlashArrayFlashArray2 上。
連接至 FlashArray 系統
現在,我們使用本地儲存的憑證,對我們 FlashArray 系統的 REST API 進行驗證。這讓我們能夠在陣列上執行快照操作。
凍結資料庫
為了建立兩個 FlashArray 系統的即時快照,我們先執行指令 ALTER DATABASE [MultiArraySnapshot] SET SUSPEND_FOR_SNAPSHOT_BACKUP = ON,暫時暫停寫入 I/O。此動作讓資料庫處於穩定狀態,為兩個 FlashArray 系統的快照做好準備。在此過程中,您仍可從資料庫讀取。
快照
凍結資料庫進行寫入 I/O 後,我們現在使用 New-Pfa2ProtectionGroupSnapshot 擷取兩個陣列的快照。這些快照會擷取保護群組狀態。
Metadata備份與解凍
接下來會建立中繼資料備份。這是產生備份檔案的關鍵步驟 (稍後在還原此資料庫時,我們將使用這個步驟)、自動解凍資料庫,並在資料庫的備份歷史記錄中記錄快照。
您可以使用 Get-DbaDbBackupHistory 從實例中複查備份記錄,以檢查快照備份的狀態。
讓我們做些不太棒的事…
現在,為了展示目的,讓我們放一張桌子。
在兩個陣列上執行快照備份還原
刪除表格後,讓我們從快照中還原整個資料庫。我們需要做的第一件事就是讓資料庫離線。
接下來,我們使用 Set-Disk 離線處理包含資料庫檔案的磁碟區,透過 PowerShell 移除連線將磁碟的序號鎖定。雖然您可以在 SQL Server 執行個體上本機執行,但我是從我的 jumpbox 執行此程式碼。
在資料庫及其磁碟區離線的情況下,我們現在使用每個 FlashArray 上的快照將磁碟區還原至其狀態。在我從資料庫中刪除表格之前,我們會先使用 New-Pfa2Volume 來達成這個目標。
在透過快照將每個 FlashArray 系統上的磁碟區還原至先前狀態後,讓我們在 Windows 中將資料庫的磁碟上線。
將磁碟重新上線後,我們會使用我們的中繼資料備份來還原資料庫,使用 RESTORE DATABASE $DbName FROM DISK = ‘$BackupFile’ with METADATA_ONLY, REPLACE。
還原後,我們會檢查資料庫 MultiArraySnapshot 的狀態,並看到它在線上。
最後,由於幾乎能立即進行還原,我們確認我們的桌位已落回原處。
我為什麼要這麼做?
此指令碼很重要,因為它顯示了一種在 SQL Server 環境中,從快照跨多個儲存陣列還原資料庫的方式。原因如下:
- 跨陣列一致的快照:以上範例利用 SQL Server 2022 的 T-SQL 快照備份,暫停資料庫上的寫入 I/O,在兩個不同的 FlashArray 系統上,檔案橫跨兩個磁碟區。如此一來,兩個 FlashArray 系統所拍攝的快照就能以穩定狀態擷取資料庫,確保資料庫能可靠地還原。
- 最小化寫入 I/O 暫停: 透過協調中繼資料中繼資料專用的備份,自動解凍資料庫,此流程可將停機時間降至最低,這是高可用性/高效能環境中的關鍵因素。
- 現代化 SQL Server 功能: 本節展示 SQL Server 2022 的新功能,並提供實際範例,說明如何使用這些功能,在複雜的部署情境中強化備份策略和災害復原方案,例如橫跨兩個或更多陣列的資料庫。
這需要多長時間?
此示範會從凍結狀態執行程式碼,直到兩個陣列的快照過程解凍時間約為 200ms。
總結
在本篇文章中,我們系列的第四篇文章是在多陣列環境中使用 T-SQL 快照備份功能。
您看到如何:
- 使用僅限中繼資料的備份快速還原
- 凍結資料庫上的寫入 I/O
- 跨多個儲存陣列協調快照
Go Deeper
Learn more in the video “Are Snapshots Backups?”