雲端計算之路-試用Azure:一次失敗的SQL Server向SQL Azure的遷移嘗試

部落格園團隊發表於2013-09-10

如果資料庫用的是SQL Server,那SQL Azure無疑是最吸引人的地方之一。在測試了虛擬機器磁碟IO之後,我們迫不急待地進行了SQL Azure的測試。

(一)

首先進入manage.windowsazure.cn -> SQL DATABASES,建立一個資料庫(如下圖)。

輸入資料庫名稱,選擇BUSINESS版本,選擇資料庫空間大小,最後還要選擇一下“New SQL  database server”(明明是第1次建立資料庫,預設卻顯示Choose a server,讓使用者多了2次滑鼠操作,這個地方需要改進)。

然後設定資料庫使用者帳戶(SQL Server Management Studio遠端連線時用的就是這個帳戶),見下圖:

資料庫建立後成功後會顯示如下圖的資訊,注意最後一列顯示的伺服器名稱是隨機字母序列,很不友好、很難區分(建議讓使用者可以指定伺服器名稱)。

然後點選資料庫名稱,進入DASHBOARD,點選右側的Show connection strings,從連線字串中得到伺服器連線地址。

(二)

將SQL Server 2008資料庫壓縮備份檔案上傳至Azure虛擬機器,在虛擬機器中安裝SQL Server 2012並恢復資料庫備份檔案。

在Management Studio中右鍵選擇要遷移至SQL Azure的資料庫,然後選擇Tasks,就會看到Deploy Database to SQL Azure(見下圖,SQL Server 2012的Management Studio才有這個功能)。當時想強大啊、方便啊,Management Studio直接內建SQL Azure的遷移功能,遷移過程會不會如“輕舟已過萬重山”般輕鬆?

接著摁一下Deploy Database to SQL Azure,進入遷移介面點選Next,進入Deployment Settings介面,點選Connect,用之前建立的帳戶與得到的伺服器地址連線SQL Azure,然後選擇Edition of SQL Azure與Maximum database size,得到如下的介面:

然後點選Next -> Finish,就開始Exporting database...

在美好的憧憬與期待中,心想不會這麼輕鬆吧?。。。果然,沒這麼輕鬆,等來的是錯誤介面:

點開Validating schema model一看,暈掉了,一大堆錯誤。

統計了一下,一共有750個錯誤。大多數錯誤是這樣的:

Procedure: [儲存過程] has an unresolved reference to object [另一個資料庫].[dbo].[表]

所有涉及跨資料庫訪問的儲存過程全部出錯。

既然是儲存過程引起的,那我們把所有儲存過程幹掉,再遷移試試。

還是出錯,但錯誤少多了,只剩下13個錯誤,錯誤出在兩個地方:1,資料庫中已有的使用者帳戶;2,檢視中的跨資料庫訪問。

於是,繼續幹掉使用者帳戶與所有檢視,繼續進行遷移,心想這下應該成功了。

結果讓人大失所望,出現了74個錯誤!

讓我們來具體看看這74個錯誤與哪些因素有關:

1. The element Extended Property: [dbo].[表名].[欄位名].[MS_Description] is not supported when used as part of a data package (bacpac).

給欄位新增了Description定義。

2. Element Index: [dbo].[表名].[索引名稱] has an unsupported property FillFactor set and is not supported when used as part of a data package.

索引\主鍵\約束中定義了FillFactor。

3. Table Table: [dbo].[表名] does not have a clustered index.  Clustered indexes are required for inserting data in this version of SQL Server.

資料庫表沒有定義聚集索引。

4. Element Primary Key: [dbo].[表名] has an unsupported property DataCompressionOptions set and is not supported when used as part of a data package.

表啟用了Data Compression。

難道還要幹掉所有的索引(除了聚集索引),所有的Data Compression,所有的Description,才可以遷入SQL Azure!

(三)

試用感言

這讓人想到了一部電影《絕代豔后》,瑪麗·安託瓦內特在嫁入法國從奧地利進入法國邊境時,除了自己的身體,什麼都不能帶入法國,包括衣服、心愛的寵物。難道從SQL Server遷移到SQL Azure也要這麼幹淨嗎?但這不是從奧地利到法國,這是從微軟的一個“坑”到微軟的另一個“坑”。

不考慮自家產品的相容性,真是讓人大失所望的糟糕設計。

相關文章