[Windows Azure][IT鐵人賽系列] Day 25 - SQL Azure Database Management

SQL Azure資料庫的管理,基本上多數功能和在本地的SQL Server是一樣的,但是和伺服器與作業系統調整的功能,就不在SQL Azure的支援範圍以內。

SQL Azure資料庫的管理,基本上多數功能和在本地的SQL Server是一樣的,但是和伺服器與作業系統調整的功能,就不在SQL Azure的支援範圍以內。

首先,剛註冊好時是沒有任何Server的,我們要先建立一個,請進入管理介面後,選擇『資料庫』,再按下工具列中的『建立』:

image

此時會出現建立伺服器的精靈,首先是決定伺服器要放在哪裡,請注意,如果應用程式和伺服器是在不同資料中心的話,跨越資料中心的網路I/O費用是要由使用者支付的,所以要慎選。

image

按『下一步』,接著是要建立管理員帳戶,在SQL Azure中僅支援SQL Server驗證模式,同時帳戶名稱不可以是”sa”,”root”,”admin”,”administrator”,”guest”,”dbmanager”與”loginmanager”等字樣,而密碼必須符合高強度的密碼複雜度原則(請見第三張圖示),否則SQL Azure不會允許帳戶的建立,這個規則同時適用於使用者的帳戶密碼,所以DBA要注意一下這個部份。

image

image

按『下一步』,接下來是設定SQL Azure Server的防火牆,預設是空白,可設定本機電腦或是只允許雲端上的應用程式連線。設定好後再按『完成』,即可完成伺服器的設置。

image

image

每一台SQL Azure Server的名稱都是由系統自動給定且不允許自訂的,連線字串中的伺服器名稱是[servername].database.windows.net,預設每台SQL Azure Server都會有一個master資料庫,所有建立新資料庫以及使用者帳戶的作業都要由此進行。接著我們可以按工具列上,資料庫區的『建立』來進行資料庫的新增:

image

在這裡只要輸入資料庫名稱並選定要用的資料庫大小後,按『確定』即可,但是因為SQL Azure是以空間來計費的,基於『多少空間多少錢』的原則,還是不要亂選的好。另外,我們也可以用SQL指令的方法來建立資料庫,指令不困難,簡單的CREATE DATABASE即可,不過它一定要用管理員帳戶連線,同時也必須要在master資料庫上執行才可以:

CREATE DATABASE [DBName] (MAXSIZE=[DBSize]GB, EDITION='[edition]'

我們也可以用sqlcmd.exe來做這件事:

sqlcmd -S [ServerName].database.windows.net -U [UserName]@[ServerName] -P [Password] -Q "CREATE DATABASE [DBName] (MAXSIZE=[DBSize]GB, EDITION='[edition]')"

有了資料庫以後,我們就可以將現有本地端的資料庫移到SQL Azure資料庫了,我們可以用下列的方法來做:

image

筆者最常在課堂展示的方法是由SQL Server Management Studio產生資料表和資料的指令碼,這就是表中的SSMS Generate Scripts Wizard(指令碼產生器)的作法,簡單又快速,但不適合中大型資料庫,對於像Northwind或Pubs這種小型資料庫倒是不錯的作法,不過因為企業的資料庫都是GB級以上的,所以就會有更多的工具,像是BCP工具、DAC Database Import/Export工具、或是SSIS等,目前都能被SQL Azure所支援,其中的SQL Azure Migration Wizard適用於英文環境,但中文環境可能會有執行上的問題。

另一個管理上的問題,就是資料庫的備份了,我們在SQL Azure Internals一文中有提到SQL Azure無法支援像本地環境的Backup和Restore,這是基於架構設計上的限制,當然微軟不會坐視不管,所以除了像SSIS/BCP或是其他資料匯出入工具外,微軟在今年的SQL Azure改版中加入了一個Database Copy的功能,它可以允許管理人員在SQL Azure上產生該資料庫的新複本,指令一樣是用CREATE DATABASE,但是參數改為AS COPY OF,我們可以利用這個功能做到同伺服器內資料庫的複製,或是跨越不同伺服器的資料庫複製。

CREATE DATABASE destination_database_name
AS COPY OF [source_server_name.]source_database_name

身為DBA,我們有時也需要監看資料庫的執行狀態,在SQL Server中內建的動態管理檢視表(Dynamic Management View, DMV)在SQL Azure中一樣也有,不過有經過調整以符合SQL Azure的環境,像是可監控伺服器本身或是可存取系統資訊的檢視表會移除,並加入一些可以用評核流量以及使用狀態的檢視表(如下列五個),以讓DBA更能追踪使用的成本。

  • sys.bandwidth_usage:查詢使用頻寬。
  • sys.dm_database_copies:查詢資料庫複本的狀態。
  • sys.firewall_rules:查詢防火牆目前的規則。
  • sys.database_usage:查詢資料庫的使用狀態。
  • sys.dm_db_objects_impacted_on_version_change:查詢哪些資料庫物件會在SQL Azure版本變更時受到影響。

 

其他和資料庫有關的檢視表多半可以正常的使用,部份可能會修改成部份支援(Partial Support),可查詢MSDN Library的SQL Azure文件的Transact-SQL Reference以取得詳細的清單。

Reference:

http://msdn.microsoft.com/en-us/library/ee336281.aspx

http://msdn.microsoft.com/en-us/library/ff394116.aspx