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