[Azure][SQL]透過 SSMS 建立 Azure SQL Database
當我們在使用 Azure SQL Database 的時候,可以有不少的方式來建立資料庫,我個人比較偏好使用 T-SQL 來建立,畢竟搞資料庫的用 T-SQL 語法會比較順手一點。
而前天剛好有同事詢問相關的指令,於是就順手把在 Techday 2015 的範例語法給他,但同事使用 SSMS 利用 T-SQL 去建立資料庫的時候,卻得到錯誤的訊息 ?! 因此我決定把相關環境都準備起來測試一下,看是否是因為版本的問題所造成的。
首先我先測試使用 SQL Server 2012 SP2 的環境下
先確認有連上 Azure SQL Database 的 Instance
select @@servername
select @@version
因此我先測試建立資料庫的指令
CREATE DATABASE DEMO2012 Collate Chinese_Taiwan_Stroke_BIN
(
MAXSIZE = 2GB,
EDITION = 'Standard',
SERVICE_OBJECTIVE='S1' -- 選個 DTU 比較小的
)
GO
很不幸的沒有建立成功,只有一個錯誤訊息「訊息 42019,層級 16,狀態 2,行 1 CreateDatabaseAsyncV3 operation failed. Please retry.」
如果改測試複製資料庫的指令
CREATE DATABASE DEMO2012
AS COPY OF jamesdb
一樣是沒有建立成功,得到一個跟建立資料庫類似的錯誤訊息「訊息 42019,層級 16,狀態 2,行 1 CreateDatabaseAsCopyAsync operation failed. Please retry.」
接下來我切換使用 SQL Server 2014 SP1 的版本來測試
一樣先測試是否連上 Azure
select @@servername
select @@version
接著測試建立資料庫的指令
CREATE DATABASE DEMO2014 Collate Chinese_Taiwan_Stroke_BIN
(
MAXSIZE = 2GB,
EDITION = 'Standard',
SERVICE_OBJECTIVE='S1' -- 選個 DTU 比較小的
)
GO
跟 SQL Server 2012 的 SSMS 一樣的錯誤訊息
同樣的複製資料庫,也是得到類似的錯誤訊息
CREATE DATABASE DEMO2014
AS COPY OF jamesdb
最後我們使用 SQL Server 2016 CTP 的版本,來進行測試
一樣先測試連線
select @@servername
select @@version
接著測試建立資料庫
CREATE DATABASE DEMO2016 Collate Chinese_Taiwan_Stroke_BIN
(
MAXSIZE = 2GB,
EDITION = 'Standard',
SERVICE_OBJECTIVE='S1' -- 選個 DTU 比較小的
)
GO
雖然時間稍微長了一點,花了 50s 的時間,但還是很順利的將我們所指定的資料庫給建立起來了
接著測試複製資料庫的方式
CREATE DATABASE DEMO2016C
AS COPY OF jamesdb
看來花了 40s 的時間,也完成了資料庫複製的工作
而最後再查看一下,是否前面的錯誤訊息是否真的沒有建立出來資料庫,而後來顯示成功的訊息,是否也真的有建立成功。從 SSMS 上重新 Refresh 之後,看來真的如同訊息的狀況,在 SSMS 2016 下才有正確的建立成功。
這樣的結果令我有些疑問,因為基本上我們透過 SSMS 只是幫我們連線,透過他來下指令,至於是否支援應該是 Azure SQL Database Instance 來處理才對,不應該是 SSMS 2012 or 2014 不能執行才對,因此我決定另外做個實驗,這次不透過工具,直接來使用 sqlcmd 來下指令。
當我利用 sqlcmd 連上我的資料庫之後,先確認 version 確認是正確連上 azure 之後,接著我用複製資料庫的方式來測試一下,看來都可以很順利的成功。
因此從上述的測試過程中,我想可能是 SSMS 在下指令之後,有跟 Azure 同步甚麼樣的東西,那個部分出了一點問題,正常來說應該跟用甚麼樣的工具去連接是沒有關係的才對。因此在目前的狀況下,在微軟還沒有修正這個問題之前,我想可能還是先搭配 SQL Server 2016 CTP 版本的 SSMS 來使用,會比較順利一點。