[Azure]Azure SQL Database 升級處理

Azure SQL Database 的服務可已隨著服務的更新,讓你很方便的就能升級到新的版本,使用相關的新功能和新語法,但要怎麼來做呢 ?

前一陣子獲邀參加一個應用開發合作夥伴層峰會議,介紹 Azure SQL Database 的使用經驗,但時間有限沒有機會把一些東西給說明清楚,因此就把部份給整理到部落格上面來,這樣以後要用也比較容易找到資料。

 

話說 Azure SQL Database 算是一個蠻不錯的服務,當然其他平台或資料庫也許會有類似的功能,但因為接觸較少,因此我個人都還是比較偏好使用 Azure SQL Database。在這幾年之間,Azure SQL Database 也有不小的改變和升級,對我個人來說這真的是一個不錯的服務,不用煩惱主機目前 SQL Server 所使用的版本,而要升級的時候也不用太花時間去預備新環境,然後做相關的測試、備份和搬移,可以很快的就直接升級上去,採用新的版本所提供的功能了。雖然如此,我的意思並不是說不需要做任何處理,而是只要做一點簡單的設定,就可以輕易地升級了。

 

接下來我們就模擬一下舊版本的升級方式,首先我們先在 Azure 上建立一個 V2 版本的資料庫,當我們建立好這樣的資料庫的時候,這個時候如果使用 SSMS 來查看的話,會看到他的相容性層級在 100,這個時候表示他只能使用 SQL Server 2008 的相關語法和功能了。

所以如果這個時候我們使用 SQL Server 2012 的語法來做個簡單的測試

SELECT TRY_CONVERT(INT, 100) AS try1, TRY_CONVERT(INT, 'abc') AS try2;

 

就會發現會有不支援的問題發生了

因此針對比較早期所建立的資料庫,當我們要升級的時候,就要分為兩個部分,首先我們要把資料庫伺服器先從 V2 版本升級到 V12 的版本,這個部分我們需要連接到 Azure 的 Portal 上面來做設定,你必須先選擇到你的資料庫服務上,在「設定」裡面會有個「最新版 SQL Database Update」→「升級這部伺服器

接著輸入你要升級的資料庫伺服器的名稱,就可以按下按鈕來升級了,整個升級的過程大約 10mins 就可以完成了,在這裡你可以想像其實就是把舊的設定保留起來,然後重新建立一個新的資料庫伺服器,再把相關設定給自動套入,因此這個步驟要花的時間會比較長一點。

升級完畢之後,這個時候如果你使用「select  @@version」的時候,伺服器的版本會從 11.0 升級到了 12.0.2000.8 ,也就是換到 SQL Server 2014 的版本。雖然如此,你如果使用上述的測試語法的時候,會發現依然會有問題,因為前面升級的過程我們只有針對伺服器

因此在這裡我們查看資料庫版本,會發現仍然是相同的相容性層級。於是我們使用以下的語法:

ALTER DATABASE Demo SET COMPATIBILITY_LEVEL = 120

 

完成之後我們再使用 SSMS 查看資料庫內容,就會發現原本的相容性層級已經改變了

而且也可以搭配一些原本在 SQL Server Instance 層級的設定,都可以直接在資料庫層級來進行設定了

因此我們再使用之前的測試指令,就會發現這個部分已經可以順利執行了


 

而伴隨著 SQL Server 2016 在 2016/6/1 日的正式上市,目前在 Azure SQL Database 上也已經可以支援 SQL Server 2016 的語法了,但目前因為資料庫建立的時候還是預設採用 SQL Server 2014 的相容性層級,因此就算是你建立新的,也是要使用以下的語法來升級,但應該到六月底,就可以直接建立是相容性層級是 SQL Server 2016 的資料庫了。在這裡如果是之前已經先建立好的資料庫,我們會使用以下的語法來提升資料庫層級

ALTER DATABASE Demo SET COMPATIBILITY_LEVEL = 130

 

當作這樣改變之後,如果你是使用 SQL Server 2014 的 SSMS 的話,看起來就會如下的畫面,相容性層級的部分顯示的是空白

但如果您升級使用 SQL Server 2016 的  SSMS ,就可以看到正確的相容性層級的代號

接下來我們就可以來測試一些 SQL Server 2016 針對 T-SQL 部分的功能來測試了,這裡我套用一些百敬老師所做的範例測試 STRING_SPLIT、DATEDIFF_BIG 函數的功能

我自己也寫了一段來測試 JSON 的功能,看起來也都能很順利地執行。

DROP TABLE IF EXISTS myjson 

DECLARE @json nvarchar(max);

select @json='
[   
   { "name": "John" },  
   { "name": "Jane", "surname": "Doe" }  
]  ';
select * into myjson from openjson(@json);


select * from myjson for json auto;


 

以上是一點關於 Azure SQL Database 升級的說明和測試,就我自己這幾年使用起來,他算是一個很不做的資料庫服務,讓你可以很輕鬆地去使用資料庫的功能,而不用花太多時間去管理和操心資料庫伺服器的問題,有興趣的朋友可以考慮使用看看。