[SQL][Azure]調整 Azure SQL VM 的資料庫定序

在 Azure 上我們可以很容易得申請一個 VM,搭配不同的版本的 SQL Server 或作業系統,但預設安裝的定序要是不是我們所想要的話,那麼該怎麼來調整呢 ?

因為工作的關係,這幾天有不少機會在自己公司或者是客戶的環境上,使用 SQL Server & Windows 的 VM 環境,雖然 SQL Server 可以允許每個資料庫跟 Instance 有不同的定序,但這樣當我們有使用到 tempdb 的時候,如果沒有注意的話,有可能因為是不同的定序而造成錯誤,因此通常我們會調整資料庫 Instance 的定序。

在早期的 SQL Server 中,如果要調整 Instance 的定序,會使用 rebuildm.exe 的工具程式 ( SQL Server 2000 之前 )。而從 SQL Server 2005 開始,則停止使用這個工具程式,而是透過安裝程式內的 setup.exe,下參數來做重建 master 調整 Instance 的定序。而在 Azure 上面,當我們新申請一個 SQL VM 的時候,預設的定序是「SQL_Latin1_General_CP1_CI_AS

 

而在 Azure SQL VM 的環境內,其預設會將整個安裝程式給放在 C 磁碟機下面,以這個測試環境為例,就可以看到一個 SQLServer_11.0_Full 的目錄,在這個目錄下就有完整的安裝程式。

因此如果我們需要更改定序成為「Chinese_Taiwan_Stroke_BIN2」,則我們可以透過下面的指令來做更改定序,這裡要注意一下,定序的名稱要注意大小寫

seup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLADMINACCOUNT=BUILTIN\Administrators /SQLCOLLATION=Chinese_Taiwan_Stroke_BIN2

這裡有幾個常用的參數,稍微說明一下

  • QUIET : 安靜安裝模式,不顯示相關的 GUI 畫面
  • ACTION : 這裡要指定為 REBUILDDATABASE,表示要重建 master 的資料庫
  • SQLADMINACCOUNT : 指定系統管理者的帳號
  • SQLCOLLATION : 指定所要使用的定序名稱

如果順利的話,應該沒有幾分鐘就可以搞定了

接著我們開啟 SSMS 來查看,果然定序按照我們所想要的變更了。


 

在上述的方式是標準的作法,但那樣的方式有點小麻煩,如果環境上沒有預備好安裝程式,而且要記的指令還不少,因此還有另外一個變通的方式。

首先我們先開啟 CMD 的命令環境並且切換到 SQL Server,先透過 「net stop MSSQLSERVER」的指令先將 SQL Server 給關閉,然後在手動執行 SQL Server 的服務,並且在執行的時候,加入參數來做啟動

sqlservr -m -T4022 -T3659 -q"Chinese_Taiwan_Stroke_BIN"

這裡有幾個常用的參數,稍微說明一下

  • m : 指定 SQL Server 啟動的時候為 single user 的模式
  • T4022 : 指定 SQL Server 啟動的時候停用啟動程序 ( startup stored procedures )
  • T3659 : 將所有的錯誤訊息都記錄到 error log 內
  • q : 按照所指定的定序去重建所有的系統資料庫和物件

 

當按照上述的步驟去執行之後,就會看到 SQL Server 被手動執行起來,在畫面上就會有相關執行的訊息。當看到有出現「The default collation was successfully changed.」就表示已經重建完成,這個時候我們可以按下 CTRL+C 中斷 SQL Server 的執行,接著再透過指令「net start MSSQLSERVER」將 SQL Server 的服務給重新啟動,那就大功告成了。

因此當我們再度使用 SSMS 來連線查看的時候,就可以發現定序要再度被改變了。


以上兩種方式在 SQL Server 2008 R2 ~ SQL Server 2016 都可以使用 ( SQL 2008 我沒有自己測試過,其他版本我都有測試過,我想應該也是可以才對 ),建議如果要變更定序,最好在一開始正式使用 SQL 前就做調整,而不要裡面都已經再使用了再來做調整,這樣可能有先已經建立好的資料庫,那就還需要自己手動去調整定序了,那可能就會比較麻煩了。