SQL Server 2016 新功能搶先看 - Stretch Database / Managed Backup (內含 Demo 畫面)

承之前提及的「SQL Server 2016 公開預覽版將在今年夏天推出!」一文,今天要直接帶大家搶先看這款尚未推出的 SQL Server 新功能!嘿嘿嘿,已經有 Demo 畫面釋出囉!

本文將帶大家了解以下新功能:

Stretch Database

Managed Backup


Stretch Database

說明

內部部署的 SQL Server 經年累月運作下來,存放了許多應用程式所儲存的資料,其中可能有些資料表已經相當龐大,再者有些歷史資料的保存只是為了應付稽核所需,平時並不太會去存取,這些資料當初可能沒有適當做資料分割(Partition),久而久之逐漸造成效能或管理儲存空間上的負擔。為此 SQL Server 2016 推出一樣全新的功能—Stretch Database,可以無縫的整合雲端平台,將資料表延展(stretch)到 Microsoft Azure,當使用者查詢這些資料表,並不會察覺資料到底是來自 SQL Server 本身或是存放在 Azure 之中,應用程式也不需要因為這項功能而需要做修改。

該如何使用 Stretch Database 讓管理大型資料表的工作更簡化?下面將會做進一步的介紹。

實際展示

下圖示範使用 sp_spaceused 系統預存程序,查看 TRADE_HISTORY 資料表所使用的儲存空間以及資料筆數,可以看到該資料表有 4 千 1 百多萬筆資料。

當您想要將某個資料庫延展到 Microsoft Azure,只需在 Object Explorer 視窗中的資料庫節點上按滑鼠右鍵,選擇【Task > Enable Database for Stretch】,就可以透過精靈的方式來協助您進行設定。

在 Enable Database to Stretch Tables 視窗,提示您必須擁有可以登入 Microsoft Azure 訂用帳戶的 Microsoft Account 才能完成啟用 Stretch Database 的作業,請直接按 Next 繼續下一步。

接著在 Mircorosft Azure Sign-In 步驟中點選 Sign In。

輸入 Microsoft Azure 訂用帳戶的使用者名稱及密碼,以在下一個步驟可以選擇適當的訂用帳戶。

順利登入 Microsoft Azure 後,會列出該使用者目前可使用的訂用帳戶,請選擇 Stretch Database 要建立在哪個 Microsoft Azure 訂用帳戶,設定完畢後按 Next。

Stretch Database 功能主要是將內部部署的 SQL Server 資料庫延伸到 SQL Database,因此在 Stretch Settings 頁面必須輸入下列資訊:

1. Azure Location:指定要將 SQL Server 延展到哪個地區的 SQL Database 伺服器,建議選擇離您較近的資料中心。

2. Create Azure SQL DB Server Credentials:目前 CTP2 階段不支援使用現有的 SQL Database 伺服器,僅支援建立新的伺服器,因此必須輸入伺服器的系統管理員名稱及密碼。

3. Configure a Firewall Rule to Connect to Azure:預設 SQL Database 伺服器拒絕所有連線,因此在這個步驟必須設訂防火牆規則,來允許內部部署的 SQL Server 連接到 Azure SQL Database 伺服器。您可以指定只加入目前執行個體的 IP 位址到防火牆規則之中,或是設定一段區間的 IP 位址。

在 Summary 頁面顯示前面您透過 Stretch Database 精靈所設定的相關組態,確認無誤後按 Finish,就可以開始進行部署。

順帶一提,除了使用 SSMS 所提供的 GUI 來設定 Stretch Database 外,當然您也可以使用 T-SQL 來做相同的設定。

由下圖可見,SQL Server 依照您所輸入的資訊,幫您在 Microsoft Azure 上建立 SQL Database 伺服器,並設定相關的防火牆規則,最後開始為您所選擇的資料庫設定 Stretch Database 組態,依照資料量的大小所需等待的時間會有所不同,完成後按 Close 來關閉視窗。

當您啟用 Stretch Database 功能後,SQL Server 會在背景將資料表分成兩個部分,一個部份當然還是存放在內部部署的 SQL Server 裡,另一部分則會封存到 Azure SQL Database。

若想查看目前執行的狀況,可使用 sys.dm_db_rda_migration_status 動態管理檢視來查詢資料移轉到 SQL Database 的進度。

當您啟用 Stretch Database 時,不需要自行選擇要將哪個資料表延展到 SQL Database,若想知道該資料庫中有哪些資料表已經被 SQL Server 延展到 Microsoft Azure,可以查詢 sys.remote_data_archive_tables 系統檢視,藉以得知本地資料表以及所對應的 SQL Database 資料表名稱。

此外,藉由 sp_spaceused 系統預存程序,搭配 @mode=N’LOCAL_ONLY’ 參數,可以看出 TRADE_HISTORY 資料表在本地端的資料筆數以及所佔用的儲存空間。

由下圖可知,啟用 Stretch Database 後本地端的資料筆數減少到 2 千 6 百多萬筆(原本為 4 千 1 百多萬筆,如圖 2),這之間的差額為已經移轉到 SQL Database 的資料筆數。而資料所占用的空間也一樣,由原本的 1,247,248 KB 下降到 794,304 KB。

透過 Stretch Database 可以幫您把比較少使用又必須保留的資料,自動封存到可信賴的 SQL Database 之中,當您需要查詢這些資料時可以很容易的取得,不需要改變任何過去查詢資料的行為,只需使用原有的查詢語法,SQL Server 會自動結合雲端與地端的資料。

當您以執行計畫來查看查詢最佳化工具所選擇的資料擷取方法時,有用到延展到 SQL Database 的資料表時,就會看到 Remote Query 運算子的出現。

Managed Backup

說明

SQL Server 2014 推出可以把資料庫備份到 Microsoft Azure Storage 的功能 - Managed Backup(受管理的備份),讓您可以不須自訂備份策略、管理備份媒體集、管理備份該如何封存,SQL Server 就能依照資料庫的工作負載,自動化的執行完整備份或交易記錄備份,而且備份媒體集則是放在異地的 Microsoft Azure 之中,透過 Storage 服務自動備份三份的機制,確保資料庫備份的可用性,讓您輕易地實現以往可能需要耗費許多建置成本才能做到的異地備份需求。

這項方便的功能在 SQL Server 2016 做了許多改良,讓 Managed Backup 更能夠適用於各種情境,像是:

◆ 支援自訂備份排程(完整和交易記錄備份)

◆ 支援系統資料庫

◆ 支援簡單復原模式

◆ 更豐富的使用者介面

由於 Managed Backup 所有自動化備份到 Azure Storage 的作業依賴 SQL Server Agent 服務,因此在啟用 Managed Backup 前,請確認 SQL Server Agent 服務的啟動類型已設為自動並且目前正在執行。

另外,您還需要一組以 Shared Access Signature 金鑰的 SQL 認證(Credential)。

完成前面的準備工作後,接下來我們將以三個不同的使用情境來介紹 SQL Server 2016 的 Managed Backup 的改變。

情境一、自訂排程

本節示範以 msdb.managed_backup.sp_backup_config_schedule 系統預存程序來自訂 Managed Backup 的排程,相關參數說明如下:

◆ @database_name:啟用 Managed Backup的 資料庫名稱。

◆ @scheduling_option:備份排程選項。

◆ @full_backup_freq_type:完整備份頻率的類型。

◆ @day_of_week:每個星期的哪一天進行備份。

◆ @backup_begin_time:備份起始時間。

◆ @backup_duration:備份持續時間。

◆ @log_backup_freq:交易記錄備份頻率。

接著以 msdb.managed_backup.sp_backup_config_basic 系統預存程序來設定 Managed Backup,相關參數說明如下:

◆ @enable_backup:啟用或停用 Managed Backup。

◆ @database_name:指定資料庫名稱。

◆ @container_url:Azure Storage 容器的 URL。

◆ @retention_days:資料庫備份保留天數。

若要查看 Managed Backup 的組態,可以利用 msdb.manage_backup.fn_backup_db_config 系統函式,由 is_managed_backup_enabled 資料行可以看出目前 Managed Backup 是否啟用,而在 container_url 及 retention_days 資料行則可以看到資料庫備份媒體所存放的容器 URL 以及保留的天數等資訊。

 

情境二、為 Managed Backup 啟用備份加密

本節示範以 msdb.managed_backup.sp_backup_config_advanced 系統預存程序來啟用備份加密,相關參數如下:

@encryption_algorithm:指定備份加密所使用的加密演算法。

@encryptor_type:加密程式類型。

@encryptor_name:加密程式名稱。

接著一樣使用 msdb.managed_backup.sp_backup_config_basic 系統預存程序來啟用或停用 Managed Backup,以及使用 msdb.manage_backup.fn_backup_db_config 系統函式來查詢設定的結果。

情境三、為系統資料庫啟用 Managed Backup

下圖示範以 msdb.managed_backup.sp_backup_config_basic 系統預存程序來為 master 系統資料庫設定 Managed Backup。