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