SQL Server 2016的延展資料庫

by adonis 2. 二月 2017 14:16

作    者:楊先民
審    稿:張智凱


1    前言


有人問我SQL Server 2016有什麼新功能,一般的關連式資料庫功能沒什麼太大的變化,但是和雲端的整合卻是愈來愈緊密了,以前還有可能省略到這一段不提,但是隨著微軟的重視,讓我們非得正視 SQL Azure的一些應用問題了,本期就介紹 SQL Server 2016的新功能:延展資料庫(Stretch Database)。

2    延展資料庫(Stretch Database)是什麼?


這個是管理資料庫的朋友都會遇到的問題:歷史資料愈來愈大,這些冷資料還要花資源存放它們不說,如何讓公司不需要一直擴充或是再購買新的硬體配備是個很大的課題。
延展資料庫,可以讓企業把不常用的資料,例如歷史資料、log記錄,自動的非同步傳送到微軟的 Azure雲端,利用雲端平台的彈性擴展特性,省下存放不常用的資料和維護成本。

當然,如果應用程式需要存取這些延展資料庫,也是可以的,只是它畢竟是在網際網路上取得資料,相對的速度會比區域網路來的慢。


3    延展資料庫如何設定


若要啟用延展資料庫,將資料存放到 Azure SQL的資料庫中,你要先有 Azure的帳戶(請自行申請),還需要在 SQL Server中開通這個功能方能執行。

EXEC sp_configure 'remote data archive',1
reconfigure

接下來,需按下所要延展的資料庫右鍵, tasks  stretch enable,如下圖:

image

不過目前延展資料庫是有限制的,詳細的限制如下網站:
https://msdn.microsoft.com/zh-tw/library/mt605114.aspx

其實老實說,限制還很多的,我們隨便舉一個例子,就知道這個限制其實是很嚴格的:

參考資料表的外部索引鍵條件約束。 在父子式關聯性 (例如,Order 和 Order_Detail) 中,您可以啟用子資料表 (Order_Detail) 而非父資料表 (Order) 的 Stretch。

連外部索引鍵條件約束都不能用,要選也只能選明細而非訂單的資料表,不過因為它是一個新功能,這個就和記憶體內資料表,在 SQL Server 2014也是新功能,但是同樣也是限制多多,當時我就在想,限制這麼多到底哪個資料表可以放在記憶體中?後來在 SQL Server 2016之後,這些限制都沒有了(這樣才對嘛)

所以,你開啟延展資料庫功能時,它會有一個精靈,你一看就發現:靠!幾乎什麼資料表都不能延展嘛,那還玩什麼?

image

好吧,我們只好先將資料先 select into 到一個乾淨,沒有條件約束的資料表吧!

use AdventureWorks2016
go
select * into Details from Sales.SalesOrderDetail

image

點選之後,到下一步…

image

這時就必需登錄你的 Azure帳號了… 幸好微軟給 MCT講師一個一個月100美金的帳號(只能拿來 demo,要小心的使用)。

image

因為我沒有伺服器,所以我使用新的SQL Azure伺服器,並且選擇距離台灣最近的,位於香港的 East Asia。
但是其怪的是,竟然沒有辦法按下一步,看來只好先把 SQL Azure伺服器先建立了(這是不是一個 bug啊,這…)

image

成功的到了下一步,設定資料庫用來保護登入到 Azure帳密資訊的主要金鑰,再設定資料庫伺服器允許的防火牆規則…

image

image

接下來就是計價的方式了,看一下就好,直接結束精靈。

image

基本上並不能選擇要放在哪個資料庫中,系統會自行指定,所以我們透過遠端登入時,會看到如下的畫面:

image

原本我是想要延展到自己設定的資料庫 AdventureWorksAzure,但是看起來似乎是不行的。

附帶一提,在精靈設定的過程中,你可以選擇是否要將部分資料放在雲端,部份資料放在本機,這個你就需要去設定篩選條件了,如下圖:

image

不過如果你是直接用 SSMS去查詢資料表的內容是,會先出現這個錯誤訊息:

image

但是事實上還是可以看啦,直接連線到雲端看上面的資料內容。

若要停止資料庫的延展,記得要把資料表延展disable掉,才能把資料庫的延展關閉,你也可以選擇是否要把 Azure上的資料傳回來原來的本機端資料庫中。


4   延展資料的存取


那麼,設定好延展資料庫之後,該如何存取呢?

其實就是直接使用就好,你不需要管這個資料到底是存在雲端還是存在本機,像如果沒做延展之前,查詢資料表看執行計劃會顯示 table scan

image

但是如果延展好,還是下同樣的 SQL 指令,就會得到 Remote Query,如下圖:

image

如果要取消延展,記得務必將資料匯回來,不然你的資料表在本機就會被清空了,雲端那個變成了一個獨立的資料表了。

image

5    結語


SQL Server 2016的新功能延展資料庫,目前看起來朝著和雲端整合的方向前進,雖然目前現階段尚有蠻多限制的,不過我想這個功能還算蠻實用的,期待它會在下個版本把這些限制拿掉。

LAST

Tags:

新增評論




  Country flag
biuquote
  • 評論
  • 線上預覽
Loading






NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List