背景 在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性組中的次要副本的唯一方法是使用備份、複製和還原。 在一個高可用組裡面添加一個資料庫需要很多手動任務和一些必要條件。需要完成的這些工作中,有一些是有些困難的,比如: 我們需要從主副本中備 ...
背景
在 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