SQL Azure 簡介(中)

by adonis 19. 三月 2018 23:58

作 者:胡百敬

審 稿:楊先民

前言

在上一篇專欄中,已經針對 SQL Azure 的使用情境、初始建置與設定稍作介紹。在本篇專欄中,筆者將繼續介紹SQL Azure平台與我們一般使用之資料庫管理工具的異同。

透過工具程式存取SQL Azure

就微軟自家的工具而言,支援 SQL Azure 的 SQL Server 前端程式還蠻多的,諸如以下數個不同類型的程式。

管理工具

l SQL Server Management Studio

一般常用的 SQL Server 管理工具,可用來建置與維護各種資料物件,其使用方式請參照上期專欄。

l Windows Azure管理網頁與Database Manager for SQL Azure

Web 版的管理介面,初始與基礎的建置和設定需要靠此介面,建立完 SQL Server 並賦予「firewall rule」後,一般關於 SQL Server 的管理多可以透過我們現今所熟悉的管理工具。這些管理網頁的使用方式也請參照上期專欄。

l Sqlcmd 工具程式:

在命令提示列執行 T-SQL 指令,或是批次執行 T-SQL 語法檔案。執行 Sqlcmd.exe 工具程式遠端登入 SQL Azure 時,其基本的參數設定如下:

參數

說明

-S

指定 SQL Azure 伺服器名稱,可用xxxxxxxxxx.database.windows.net 格式。

-U

指定 SQL Azure 登入帳號,要採用 <登入帳號>@xxxxxxxx 格式,其中 xxxxxxxx 代表前述的 SQL Azure 伺服器名稱。

-P

賦予登入帳號的密碼。

-d

指定資料庫名稱,因為目前 SQL Azure 尚不支援透過 USE <資料庫名稱> 的方式換 context 資料庫,只好在建立連接時就指明清楚登入後要使用的資料庫。

表1:透過 Sqlcmd.exe 工具程式遠端登入 SQL Azure 時所使用的參數

執行範例如圖 1 所示:

透過 SQLCmd.exe 工具程式登入 SQL Azure 執行 T-SQL 指令

圖 1:透過 SQLCmd.exe 工具程式登入 SQL Azure 執行 T-SQL 指令

圖 1 中遠端登入 SQL Azure 的完整指令如下,其指令僅是簡單查詢資料庫內的記錄:

sqlcmd -S y7ym6x5exj.database.windows.net -U ByronSQL@y7ym6x5exj -P P@ssw0rd -d Northwind

其 U 參數指定登入帳號之方式與我們一般在企業內使用的格式稍有不同,須加上 @ 符號,其後接伺服器名稱。由於 SQL Azure 目前尚未支援轉換 Context 資料庫的語法:

USE <資料庫名稱>

無法在 Sqlcmd.exe 登入並連接到資料庫後,再轉換不同的 context 資料庫,也不支援存取資料庫物件時,使用包含資料庫名稱的三節命名方式:

資料庫.Schema.物件名稱

只支援到兩節名稱:

Schema.物件名稱

故必須在建立連接的時候,直接透過 –d 參數指定連接後欲使用的資料庫。

資料轉換工具

當你需要將資料從本地資料庫輸出,並載入到 SQL Azure,或是從 SQL Azure 輸出資料並下載到本地,可以用以下的工具程式:

l SQL Server Integration Services

SSIS 是 SQL Server 所提供的資料整合工具,可滿足多樣化的提取、轉換和載入等資料移轉工作。而用在存取 SQL Azure 時,僅要以 .NET 連接搭配對應的 ADO.NET 資料來源,或 ADO.NET 資料目的地即可[1],其在資料流程內的設定如圖 2 所示:

透過「ADO.NET 目的地」將資料載入到 SQL Azure

圖 2:透過「ADO.NET 目的地」將資料載入到 SQL Azure

筆者簡單上傳本地電腦內 Northwind 範例資料庫的 Customers、Products 資料表記錄到 SQL Azure,其封裝執行畫面如圖 3 所示:

透過 SSIS 封裝將本地資料載入到 SQL Azure 資料內

圖 3:透過 SSIS 封裝將本地資料載入到 SQL Azure 資料內

藉由 .NET 連接管理員連接到 SQL Azure 後,你也可以透過 SSIS 搭配本地的 SQL Agent 服務完成許多批次管理工作,因為現今的 SQL Azure 上沒有 MSDB 系統資料庫與 SQL Agent 服務。

然而,由於 SQL Azure 僅支援我們一般使用的 T-SQL 語法之部分子集,換句話說,SQL Azure僅支援部分的本地端 SQL Server 功能。所以若想透過 SSIS 完成你欲做的工作,需要先驗證 SQL Azure 是否有支援該功能。

l Bcp.exe

從資料庫大量取出資料存放在磁碟檔案,或是將磁碟檔案載入到資料庫。當SQL Azure是來源或目的時,其用法相同。執行範例如圖 4 所示:

透過 bcp.exe 工具程式將資料載入到 SQL Azure

圖 4:透過 bcp.exe 工具程式將資料載入到 SQL Azure

圖 4 中,透過 bcp.exe 將本地磁碟目錄內;原生類型格式的記錄檔案上載到 SQL Azure 的 Northwind 資料庫 employees 資料表內,登入帳號為 ByronSql,其指令如下:

bcp employees in c:\temp\employees.bin -S y7ym6x5exj.database.windows.net -U ByronSql@y7ym6x5exj -P P@ssw0rd -d Northwind -n

如前所述,SQL Azure 的資料庫內物件名稱不支援三節以上的命名,也就是當要存取某個資料庫內物件時,無法指定資料庫和伺服器。當要以 bcp.exe 透過查詢輸出 SQL Azure 時,須採用 SQL Server 2008 R2 提供的版本,才可以在命令提示列搭配「-d」參數指定資料庫名稱。下載資料如圖 5 所示:

透過 bcp.exe工具程式將資料從 SQL Azure 下載到本地端

圖 5:透過 bcp.exe工具程式將資料從 SQL Azure 下載到本地端

圖 5 中,透過 bcp.exe 搭配 queryout 方式將 SQL Azure 伺服器上;Northwind 資料庫內之 Customers 資料表的前 10 筆記錄取出,以原生類型格式存放到本地端檔案,其指令如下:

bcp "SELECT TOP 10 * FROM Customers" Queryout C:\temp\Cust.bin -S y7ym6x5exj.database.windows.net -U ByronSql@y7ym6x5exj -P P@ssw0rd -d Northwind –n

移轉資料庫工具

若想要將本地端的 SQL Server 資料庫,或是 Access 資料庫,連同資料庫物件與記錄內容一併載入到 SQL Azure,由於並不支援備份/還原資料庫或卸離/附加資料庫等方式移轉,需要藉助移轉資料庫的工具程式。

l SQL Azure Migration Wizard v3.6.1

若要移轉本地端 SQL Server 內的資料庫到 SQL Azure,可以嘗試使用 Codeplex 內提供的「SQL Azure Migration Wizard v3.6.1」,其下載的 URL 如下:

http://sqlazuremw.codeplex.com/

其執行畫面如圖 6 所示,一開始須選擇要進行什麼樣的轉換:

指定要移轉本地 SQL Server 伺服器上的某個資料庫到 SQL Azure

圖 6:指定要移轉本地 SQL Server 伺服器上的某個資料庫到 SQL Azure

而後可以選擇要移轉的物件,令「SQL Azure Migration Wizard」為你建立可用的 T-SQL Script,如圖 7 所示:

選擇物件建立 T-SQL Script

圖 7:選擇物件建立 T-SQL Script

而後可以連結到 SQL Azure,以執行這些建立物件的定義,如圖 8 所示:

連接到 SQL Azure 執行建立物件的 T-SQL 語法

圖 8:連接到 SQL Azure 執行建立物件的 T-SQL 語法

圖 8 中透過「Create Database」按鈕先在 SQL Azure 建立一個名稱為 NorthwindAzure 的使用者資料庫,而後對該資料庫執行建立物件的 T-SQL 指令。雖然「SQL Azure Migration Wizard」會建立 T-SQL 語法,但似乎不盡然與 SQL Azure 相容,因此在執行時依然有錯誤訊息,但不一定是嚴重的錯誤,發生錯誤後,接下來的語法依然可行。你可以觀察執行的報告,以確定所需的資料庫物件是否建置無誤。

另外,「SQL Azure Migration Wizard」執行到最後,會利用類似下述指令將各資料表內的資料以 bcp.exe 工具程式輸出成檔案:

bcp.exe "[Northwind].[dbo].[Customers]" out "c:\SQLAzureMW\BCPData\dbo.Customers.dat" -E -n -T -S localhost

在c:\SQLAzureMW\BCPData 目錄下存在著許多資料檔,但並未針對 SQL Azure 載入這些資料,似乎要靠我們自己下 BCP 指令了。

l Microsoft SQL Server Migration Assistant 2008 for Access v4.2

微軟提供各種不同的資料庫平台,例如 Oracle、Sybase、MySQl 和 Access 等,提供移轉的精靈,方便你將原資料庫移轉到 SQL Server,若想要將原來使用的小型資料庫,如 Access 轉到 SQL Azure,就可以使用Microsoft SQL Server Migration Assistant 2008 for Access v4.2(以下簡稱「SSMS 2008 for Access」),其下載網址為:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=5abe098d-c7e1-46c6-994a-09a2856eef0b&displaylang=en

下載並安裝完畢後開啟「SSMS 2008 for Access」,會自動出現「Migration Wizard」詢問移轉資料庫所需的資訊,並自動幫忙移轉物件與資料內容,其步驟畫面如圖 9 所示:

圖 9:透過 SSMA 2008 for Access 將 Access 資料庫內容轉換到 SQL Azure

由於「SSMA 2008 for Access」 同時支援將 Access 內容移轉到 SQL Server 2008 或 SQL Azure,所以在Migration Wizard的「Create New Project」步驟中,可於「Migration To」下拉選單中選擇「SQL Azure」,指定移轉的資料庫為 SQL Azure。

而後需要指定所欲連接的 SQL Azure 資料庫,如圖 10 所示:

指定移轉的 SQL Azure 資料庫並在原 Access 資料庫內保留遠端資料表的連結

圖 10:指定移轉的 SQL Azure 資料庫並在原 Access 資料庫內保留遠端資料表的連結

圖 10 中的「Link Tables」步驟可以點選下方的「Link Tables」選項,讓「SSMA 2008 for Access」將 Access 內的資料表移轉到 SQL Azure 後,同時在 Access 檔案內建立連結資料表,透過原有的使用者介面存取 SQL Azure。若有勾選「Link Tables」選項,在移轉的最後一步會建立對 SQL Azure 資料庫的連結資料表,需要設定連接字串。其對話窗如圖 11 所示:

設定留在原 Access 連結資料表的連結字串

圖 11:設定留在原 Access 連結資料表的連結字串

由於是透過 ODBC 連結,必須在設定「User Name」時,賦予資料庫伺服器的名稱。一旦轉換完畢後,可以直接以原來的 Access 存取介面操作 SQL Azure 內的資料,讓本地的 Access 資料庫操作可以方便地轉成使用 SQL Azure。

除了上述工具程式外,本地端的 Analysis Services、Reporting Services 也都可以存取 SQL Azure 資料源,另外,還有直接執行在 Azure 平台的 SQL Azure Reporting,可以存取 SQL Azure 內的資料。

本期專欄針對支援 SQL Azure 的工具程式稍作介紹,希望對於你管理 SQL Azure,或是混用本地端與雲端資料時有所幫助。在下期專欄中,筆者將繼續介紹 T-SQL 與程式存取。

參考資料

微軟MSDN(Microsoft Developer Network)上提供關於支援 SQL Azure 工具程式之文件:http://msdn.microsoft.com/en-us/library/ee621784.aspx

 

[1] 由於微軟的線上說明建議要用 ADO.NET 和 ODBC 等下層連接機制,並不支援 OLE DB(參閱http://msdn.microsoft.com/en-us/library/ee336245.aspx),但筆者實際用 SSIS 的 OLE DB 連接管理員連接,在 SQL 登入帳號後賦予「@伺服器名稱」,一樣可以下載資料,且 SqlCmd 工具程式也是採用 OLE DB 存取 SQL Azure,線上說明一樣列入支援 SQL Azure 的工具程式。不過保險起見,還是請你參照微軟的建議。

Tags:

SQL Server資料庫 | 楊先民Adonis Young

不允許評論

NET Magazine國際中文電子雜誌

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

月分類Month List