本文將介紹利用 SQL Database Migration Wizard 移轉 SQL Server 2005-2012 到 Windows Azure SQL Database 以及資料庫維護作業。
【情境說明】
筆者在之前的文章中介紹使用 SQL Server Data Tools(SSDT)以及 SQL Server Management Studio(SSMS)來將 SQL Server 部署至 Windows Azure SQL Database(SQL Database),本文將介紹另外一個部署 SQL Database 的工具 SQL Database Migration Wizard (SQLAzureMW),由於 SQL Database 上有一些和 SQL Server 不同的規範和限制,透過這套工具可以幫助您分析您要部署的 SQL Server,是否符合 SQL Database 的一般方針和限制,舉例來說 SQL Database 不支援沒有叢集索引的資料表,換言之必須在資料表上建立叢集索引才可以執行插入作業 。除了從 SQL Server 部署到 SQL Database,您可以移轉 SQL Database 到 SQL Server,甚至 SQL Database 之間互轉都可以經由 SQLAzureMW 來完成。
【前置作業】
SQL Database Migration Wizard 是一套用來幫助您將 SQL Server 2005-2012 移轉到 SQL Database 的工具,您可以依照您的 SQL Server 版本安裝相對應的 SQLAzureMW,在 SQL Server 2008 R2 SP1 上使用的是 v3x,SQL Server 2012 則是v4x。您必須到 CodePlex 上下載適合您的 SQL Server 版本的安裝程式,若您點選下圖的【download】,預設會下載 for SQL Server 2008 R2 SP1 的版本。
由於筆者使用的是 SQL Server 2012,因此下載 SQLAzureMW v4.0.10 Release Binary for SQL Server 2012(如下圖)。
下載完成並解壓縮您將看到如下圖的目錄內容:
點擊【SQLAzureMW.exe】就可以開啟 SQL Database Migration Wizard。
【修改 SQLAzureMW.exe.config】
[SQL Database] 讓 SQL Database Migration Wizard 支援繁體中文系統】一文)。(特別強調若您使用的是 SQLAzureMW v3.9.8 / v4.0.11,則可以忽略此節)
由於 v4.0.11 以前的版本並不支援繁體中文,而且錯誤訊息會都是亂碼,若您要讓舊版的 SQLAzureMW 的錯誤訊息可以繁體中文呈現,必須手工去修改 SQLAzureMW.exe.config(詳情請參考小朱大的【首先必須在 configSections 區段中加入 zh-TW 的 section:
<section name="zh-TW" type="System.Configuration.NameValueSectionHandler"/>
接著在 zh-CN 區段下新增繁體中文的區段:
<zh-TW> <add key="BCPRowsCopied" value="已複製\s[0-9]+\s個資料列。"/> <!-- Regex Search --> <add key="BCPError" value="Error ="/> <!-- Regex Search --> <add key="BCPSQLState" value="SQLState ="/> <!-- Regex Search --> <add key="BCPTotalSent" value="網路封包大小 (位元組): [0-9]+\W+SQLState ="/> <!-- Regex Search --> <add key="BCPNumber" value="[0-9]+"/> <!-- Regex Search --> <add key="BCPSummary" value="時間 (毫秒) 總計[\w\W]+。)"/> <!-- Regex Search --> <add key="BCPCodePage" value="Big5"/> </zh-TW>
儲存後重新開啟 SQLAzureMW,之後您就可以看到繁體中文的 Result Summary。
【利用 SQLAzureMW 移轉 SQL Server 2012 到 SQL Database】
接下來筆者示範如何將 SQL Server 2012 中的資料庫透過 SQLAzureMW 來移轉到 SQL Database。於【選擇流程】步驟中選擇【分析並移轉 > 資料庫】然後按下一步。
於【連接到資料庫】視窗中輸入您要連接的 SQL Server 伺服器名稱,在伺服器類型的部分預設是 SQL Server,您也可以選擇 SQL Azure 或 SQL Azure Federation,在此使用預設值 SQL Server 即可,接著依照你的安全性選項選擇適當的驗證方式,在 Database 部分,您可以使用預設值【MasterDB】,該選項會從 Master 資料庫中撈出所有使用者資料庫,您也可以選擇【指定資料庫】並直接輸入您要連接的資料庫名稱,接著按連線。
下圖示範的是選擇【MasterDB】後,指令碼精靈會列出該 SQL Server 中所有的使用者資料庫,挑選您要連接的資料庫名稱(依照慣例筆者還是使用 Northwind 來示範),接著按下一步。
於選擇物件步驟中選擇您要產生指令碼的資料庫物件,然後按下一步。
預設 SQLAzureMW 針對資料表物件會產生【資料庫結構描述和資料】的指令碼,您可以點選【進階設定】來依照需求自行調整成只有資料表結構描述或只有資料(如下圖),這個部分和 SSMS 裡面產生指令碼的功能類似。在此筆者就使用預設值【資料庫結構描述和資料】來做示範。
您就可以在【指令碼精靈概要】步驟中確認您選擇了那些物件要產生 Script,接著按下一步然後於產生指令碼視窗再按是來開始將您選擇的資料庫物件以及資料產生相對應的指令碼。
您可以勾選【自動捲動】來使得產生指命碼的結果可以自動向下捲動,進而查看產生所有產生指令碼的的經過。
產生的資料預設會放在【C:\SQLAzureMW\BCPData】位置,
在【SQL 指令碼】頁籤中可以看到 SQLAzureMW 幫您產生的指令碼,若您如下圖中看到紅色文字部分,是這個工具提醒您目標伺服器類型(本文為 SQL Database) 所不支援的項目,而且 SQLAzureMW 嘗試幫您修正的提示訊息,以下圖為例是因為資料表沒有叢集索引,SQLAzureMW 幫您在建立資料表時加上建立叢集索引。
接下來選擇你要連接的 SQL Database 伺服器以及輸入相關驗證資訊,連接方式跟上述選擇來源伺服器時相同,筆者就不再贅述,輸入完畢之後按連線。
您可以選擇要將 SQLAzureMW 產生的指令碼匯入到 SQL Database 現存的資料庫,或是如筆者一樣選擇【建立資料庫】來將指令碼匯入到下面步驟所建立的新資料庫之中。
輸入新資料庫的名稱後根據你的需求選擇定序(Collation)、版本及資料庫最大容量。
資料庫建立完畢之後回到【設定目標伺服器連線】步驟,預設就會選取您剛剛所建立的資料庫,按下一步在按是就可以在目標 SQL Database 執行產生好的指令碼。
最後就會開始執行 SQL Server 移轉到 SQL Database 的作業,當顯示完成時直接按取消來關閉視窗即可。
接著您可以到 SQL Database 管理入口網站來查看資料庫移轉的情況,經過確認資料庫物件及資料確實已經移轉成功(如下圖)。
【使用 SQLAzureMW 進行伺服器維護】
您也可以利用 SQLAzureMW 來刪除或建立 SQL Database / SQL Server 上的資料庫,請於下圖【選擇流程】步驟中選擇【伺服器維護 > 維護】,接著按下一步。
於【連接到資料庫】視窗中輸入您要連接的 SQL Server 伺服器名稱,在伺服器類型的部分預設是 SQL Server,您也可以選擇 SQL Azure 或 SQL Azure Federation,在此使用預設值 SQL Server 即可,接著依照你的安全性選項選擇適當的驗證方式,在 Database 部分,您可以使用預設值【MasterDB】,該選項會從 Master 資料庫中撈出所有使用者資料庫,您也可以選擇【指定資料庫】並直接輸入您要連接的資料庫名稱,接著按連線。
若您要刪除目標伺服器上的資料庫,請先選取該資料庫後點選【刪除資料庫】,接著按是即可。
至於建立資料庫請參考上述的【利用 SQLAzureMW 移轉 SQL Server 2012 到 SQL Database】一節。
【參考資料】
【延伸閱讀】
- [SQL Database] 讓 SQL Database Migration Wizard 支援繁體中文系統,小朱的技術隨手寫
- SQL Azure - 使用SQL Azure Migration Wizard將本地的資料庫搬移到SQL Azure,天空的垃圾場