背景
在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性組中的次要副本的唯一方法是使用備份、復制和還原。
在一個高可用組里面添加一個數據庫需要很多手動任務和一些必要條件。需要完成的這些工作中,有一些是有些困難的,比如:
- 我們需要從主副本中備份數據庫,並將這個備份分發到可用組的其他副本中。這是基於手動操作的,因為這需要你從主數據庫備份還原數據庫到次要副本。
- 有時候,我們不能通過網絡防火牆在副本之間傳送數據庫備份文件。這種情況下,需要開放SMB協議端口,以便能在節點間傳輸備份文件。
- 通常,復制一個備份文件會占用更多空間,這是額外的需求,更多的磁盤空間。
- 特別是針對第三方備份的方案,會導致備份/還原鏈的中斷。但是這又取決於數據庫的備份策略。
- 分發和還原數據庫是耗時並且不透明的過程。
作為一個兼職DBA,我不喜歡處理這些問題。當我創建數據庫在主節點上時,我想要數據庫被自動創建在所有副本上,幸運的是SQLServer 2016以后這樣的工作就容易多了。為了更好的幫助DBA們處理這些問題,微軟引入了可用組的自動增長數據庫。即SQL Server 2016 引入了用於初始化次要副本的新功能 - 我一般稱之為數據庫自增長(自動種子設定)
那么這個自動化如何實現的?
當你打算創建一個數據庫在主副本上,並且加入數據庫到AG里面時,自動填充就會在數據庫鏡像端間進行通信,並且復制數據庫到次要副本中。假設有一個可用組,由N個副本組成,replicas - Replica1, Replica2, ... ReplicaN。當前你的主副本是Replica2 ,然后你創建一個新的數據庫在主副本上。下一步就是要盡快把數據庫加入到可用組的其他副本上。這個解決方案就如下圖的流程所示:
數據庫自動種子設定(自增長),沒有特殊的必要條件和限制,只是需要數據和日志文件路徑在可用組中是完全一致的。這個可用組配置自增長,數據庫在可用組中一定是完整還原模式,需要有一個完成備份以及事務日志備份。如果在可用組中用手動同步加入的數據庫也需要上述一樣的條件。
啟動自動種子設定功能
在每一個需要自增長數據庫的副本上,需要允許可用組創建數據庫。下面的腳本用來允許AG創建數據庫,但是確保你可以連接到master數據庫並且能夠對所有可用組中的副本執行這個腳本:
ALTER AVAILABILITY GROUP [{your_AG_name}]
GRANT CREATE ANY DATABASE;
GO
可用組必須被切換為自動增長模式。該模式可以通過在每個副本中執行下面額T-SQL代碼來實現(或者每個副本中啟動自增模式):
ALTER AVAILABILITY GROUP [{your_AG_name}] MODIFY REPLICA ON '{your_replica_name}' WITH (SEEDING_MODE = AUTOMATIC); GO
另外,對於Always On 的可用組來說,自增期間能夠使用跟蹤標記trace flag 9567壓縮數據流,從而大大減少傳輸時間。相關內容可以再找個連接看到: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-traceon-trace-flags-transact-sql
添加一個帶有自增長屬性的數據庫
打開SSMS並且連接可用組主節點。導航到AlwaysOn 高可用(AlwaysOn High Availability)文件,打開“Availability Groups”,然后找到打算添加數據庫的可用組。在打開"Availability Databases" 文件夾。右擊"Availability Databases",右鍵菜單"Add databases..", 這個菜單選項將會激活配置向導如下:
選擇打算加入到可用組的數據庫:
注意,這個數據庫一定滿足一下必要條件。選擇選項“Skip initial data synchronization”:
在次要節點,你會看到數據庫已經被還原的信息:
因此,你也可以在msdb.dbo.restorehistory 表中看到每個數據庫的增加信息。在主服務器,可以在表msdb.dbo.backupmediafamily 中看到每個數據庫信息,數據庫可以shiyo8ng下面的T-SQL語句實現:
ALTER AVAILABILITY GROUP {your_AG_name} ADD DATABASE {your_database_name};
這個腳本必須在可用組的每個數據庫上執行。
優缺點
我通常使用自動數據庫填充為可用組並且發現它很有價值。例如,微軟SharePoint 支持組有權去創建新的數據庫在主副本上,但是他們不能直接把數據庫加入到可用組中,因為這樣做影響了數據庫的高可用。當我們使用自動數據填充在指定的可用組上時,我們可以自動添加新的Sharepoint 數據庫在可用組上,使用一個將所有最近創建的Sharepoint 數據庫添加到可用組上的腳本,使用2016這個特性不在需要使用手動操作。
綜上所述,使用自動填充的優勢有如下幾點:
- 操作過程簡單.
- 節省磁盤空間.
- 節省備份還原事件,因為SQLServer復制數據庫使用網絡.
- 使用追蹤標記9567,能夠大大減少同步時間。
在可用組中使用自動增長的缺點:
- 在同步過程中需要巨大的網絡流。
- 處理需要一些手動處理步驟
引用本文請注明原文地址:http://www.cnblogs.com/wenBlog/p/8341245.html