在使用VS.Net開發的Windows或Web應用程式中,我們常常結合SQL Server來進行應用的開發部署。在雲端運算應用開發中,我們可以使用VS 2010來開發應用程式,對於資料存放區,可以使用SQL Azure。對於現有的應用程式和資料庫,也可以部署到雲中去。本文介紹如何遷移現有SQL 資料庫至SQL Azure。
遷移現有SQL 資料庫至SQL Azure有兩種方法,其一是使用SQL資料庫管理工具(SQL Server Management Studio,SSMS)產生指令碼的方法;其二是使用微軟提供的開源工具SQL Azure 遷移嚮導(SQL Azure Migration Wizard,SQLAzureMW),下面我們分別介紹。
使用SSMS進行遷移
微軟雲端運算平台對開發人員的特點之一是開發人員可以充分使用現有的技能和經驗,使用熟悉的開發語言和工具,使用SQL資料庫管理工具進行遷移也證明了這一點。下面來介紹使用SSMS進行遷移的詳細步驟。
應用與案例
在這個案例中,我們將使用SSMS來遷移微軟提供的執行個體資料庫NORTHWND,最終產生能夠在SQL Azure上部署的資料庫指令碼,詳細步驟如下:
第一步:開啟SSMS,找到NORTHWND資料庫,右擊選擇任務(Tasks),在彈出的視窗中選擇產生指令碼(Generate Scripts…),1所示:
圖1 選擇資料庫產生指令碼
第二步:在彈出的SQL指令碼嚮導視窗中,點擊“下一步”,出現選擇資料庫視窗,選擇微軟執行個體資料庫NORTHWND,點擊“下一步“,選擇指令碼選項,在指令碼選項頁面裡,我們要對指令碼選項裡的幾項進行配置,需要配置的幾項已經用紅線標示出來了,2所示:
圖2 設定匯出指令碼選項
(1)表/視圖選項中需要配置
編寫資料的指令碼:設定編寫資料的指令碼為False,因為現在我們不能把資料寫入到產生的指令碼中。
(2)常規中配置
編寫Use Database指令碼:設定為False,因為SQL Azure不支援。
編寫擴充屬性指令碼:設定為False,因為SQL Azure不支援擴充屬性。
將UDDTs轉換為基底類型:設定為True,因為SQL Azure不支援使用者自訂資料類型。能夠使用的資料類型就是門戶網站裡列出來的類型。
第三步:選擇要產生指令碼的對象,在這裡可以選擇表、視圖、預存程序,3所示:
圖3 選擇表
第四步:選擇完表以後,點擊“下一步“,SSMS自動產生指令碼,這對於開發人員或者DBA來說是非常熟悉的,產生成功後的視窗4所示:
圖4 匯出成功
在圖4中,公有37個項目產生成功,這裡包括了NORTHWND所有的表、視圖和預存程序。在接下來的內容介紹中,我們還將使用這個執行個體資料庫,不過遷移的方法換成了SQL Azure遷移嚮導這個工具。
使用SQLAzureMW進行遷移
SQLAzureMW是微軟公司發布在CodePlex上的一個項目,它可以將SQL 2005及SQL 2008資料庫遷移到SQL Azure上。其最新版本是3.3,是:
http://sqlazuremw.codeplex.com/releases/view/32334
SQLAzureMW會檢測並糾正SQL Server 2005/2008與SQL Azure之間的不相容性。嚮導能修複的一些常見問題有:使用varChar(max)替換text列、將使用者自訂類型轉換為基底類型。將text列轉換為varchar(max),將image轉換為varbinary(max),同時它還會取消對XML schema的綁定,因為SQL Azure並不支援它。由於SQL Azure缺乏對hierarchyID的支援,因此需要手工完成。除了在SQL Azure上產生指令碼以部署遷移的schema之外,使用者還可以憑藉該工具通過BCP來遷移表資料。
應用與案例
在這個案例中,我們將使用SQLAzureMW來遷移微軟提供的執行個體資料庫NORTHWND,最終產生能夠在SQL Azure上部署的資料庫指令碼,詳細步驟如下:
第一步:下載SQLAzureMW。下載SQLAzureMW後,解壓縮後包含四個檔案,期中有2個設定檔,一個設定檔是SQL Azure不支援的檔案,一個是SQL Azure資料移轉設定檔,5所示
圖5 開啟SQLAzureMW
第二步:運行SQLAzureMW。雙擊SQLAzureMW.exe,快顯視窗6所示,在圖6的視窗中,我們可以看到:
SQLAzureMW支援資料移轉的類型:
(1) SQL Server到SQL Azure
(2) SQL Azure到SQL Server
(3) SQL Azure到SQL Azure
SQLAzureMW支援資料移轉的功能有:
(1) 只是分析資料庫
(2) 分析和遷移資料庫
(3) 不分析只遷移資料庫
(4) 直接運行T-SQL進行分析
在這裡我們選擇了分析和遷移資料庫|SQL Database,點擊“下一步(Next)“,7所示:
圖7 串連資料庫
第三步:串連資料庫。點擊“串連伺服器Connect to Server“,在彈出的視窗中我們可以輸入要串連的資料庫名稱、使用者名稱、密碼,點擊”串連Connect“,串連成功後的介面8所示:
圖8 選擇資料庫
第四步:選擇資料庫。串連成功後,需要選擇資料庫,這裡我們選擇了樣本資料庫NORTHWND,點擊下一步,9所示:
圖9 選擇資料庫物件指令碼
第五步:選擇產生的腳步對象。在這裡我們選擇了資料庫所有對象來產生指令碼,點擊下一步,10所示:
圖10 匯出結果
第六步:儲存指令檔。在圖10中,我們產生了指令碼的備份檔案,這裡調用了BCP命令,由於語言版本的問題,所以在圖10中出現了一些亂碼。但是我們還是可以看到已經產生完成了。切換到SQL Script這個Tab上來,11所示:
圖11 產生的SQL指令碼
在圖11中,點擊“儲存 Save“,把產生的腳步儲存成檔案,這樣我們就得到了一個能夠在SQL Azure上部署的SQL指令碼。我們的遷移工作可以說已經完成了百分之八十,剩下的工作就是拿這個指令碼在我們雲端的SQL Azure上去執行就可以了。
需要注意的是:SQL Azure構建在SQL Server 2008上,對其的相容性層級達到了100。運行在較低相容性層級如80或90之上的資料庫可能會產生問題。雖然遷移工具可以捕獲到相容性層級問題,但我們強烈建議在使用該工具之前將資料庫的相容性層級提升到100。
不管是使用SSMS或者SQLAzureMW,遷移現有資料庫到SQL Azure中並沒有我們想象的那麼困難,這兩種方式各有其適用情境,SSMS更適合於DBA們來使用,SQLAzureMW對與開發人員和DBA甚至不懂資料庫的人來說,無疑於黑夜中的一盞明燈,而且它還使用BCP匯出了資料庫裡的資料,因此單從資料移轉功能上來說,SQLAzureMW更強大一些。
總結
遷移現有SQL 資料庫至SQL Azure有兩種方法:SSMS和SQL Azure遷移嚮導。本文通過使用者兩種方法對執行個體資料庫NORTHWND進行遷移,最終產生了可以在SQL Azure上執行的SQL指令碼,這樣我們拿著現成的腳步就可以直接在雲端去做部署了。
IT168:http://tech.it168.com/a2010/0629/1071/000001071646_all.shtml