[研究] SQL Azure 資料庫匯入 SQL Server 2012
來源資料庫:雲端 Windows Azure SQL Database (舊稱 SQL Azure) 上的資料庫
目的資料庫:本機 SQL Server 2012
為了方便開發作測試,嘗試把雲端上 Windows Azure SQL Database 上資料庫匯入本機 SQL Server 2012 上
(下圖) 在 SQL Server 2012 上新增一個資料庫,請在 Microsoft SQL Server Management Studio 左邊的「資料庫」上按下右鍵,選「新增資料庫」
(下圖) 輸入資料庫名稱
(下圖) 點選左邊的「選項」,「定序」輸入 SQL_Latin1_General_CP1_CI_AS,這是 Windows Azure SQL Database 使用的定序,「復原模式」選「簡單」(因為敝人不需要交易紀錄),按下「確定」按鈕建立資料庫
(下圖) 微軟官方網站上「復原模式」的說明
(下圖)
(下圖) 在剛剛建立的資料庫上按下滑鼠右鍵,選「工作」,選「匯入資料」
(下圖) SQL Server匯入和匯出精靈啟動了
(下圖) 「資料來源」請選「.Net.Framework.Data.Provider for SqlServer」,「ConnectionString」要輸入連線字串
(下圖) 連線字串可以到 Windows Azure 管理網站上找到,請注意 {your_password_here} 要換上自己真實的密碼
(下圖) 選擇目的地,預設值應該可用,或根據自己環境做修改
(下圖) 預設「從一個或多個資料表或檢視表複製資校」
(下圖) 勾選左上角「來源:tcp...」,會幫你把所有資料表都勾選
(下圖) 精靈設定完成
(下圖) 勾選「立即執行」
(下圖) 轉換很慢,最後失敗了
(下圖) 按下 「訊息...」超連結看問題
關鍵訊息如下:
- 正在複製到 [dbo].[T_rssitemnew] (錯誤)
訊息
* 錯誤 0xc020f444: 資料流程工作 2: 處理 "來源 8 - T_rssitemnew.輸出[ADO NET 來源輸出].資料行[說明]" 時發生錯誤 "已超過連接 Timeout 的設定。在作業完成之前超過逾時等待的時間,或者是伺服器未回應。"。
(SQL Server 匯入和匯出精靈)
* 錯誤 0xc0209029: 資料流程工作 2: SSIS 錯誤碼 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。因為發生錯誤碼 0x80131904,且 "來源 8 - T_rssitemnew.輸出[ADO NET 來源輸出].資料行[說明]" 的錯誤資料列配置指定在錯誤時失敗,所以 "來源 8 - T_rssitemnew" 失敗。在指定的元件上,指定的物件發生錯誤。在此之前可能已公佈過錯誤訊息,說明有關此失敗的詳細資訊。
(SQL Server 匯入和匯出精靈)
* 錯誤 0xc02090f5: 資料流程工作 2: 來源 8 - T_rssitemnew 無法處理資料。管線元件從方法呼叫傳回了 HRESULT 錯誤碼 0xC0209029。
(SQL Server 匯入和匯出精靈)
* 錯誤 0xc0047038: 資料流程工作 2: SSIS 錯誤碼 DTS_E_PRIMEOUTPUTFAILED。在 來源 8 - T_rssitemnew 上的 PrimeOutput 方法傳回錯誤碼 0xC02090F5。當管線引擎呼叫 PrimeOutput() 時,元件傳回失敗碼。在此之前可能已公佈過錯誤訊息,說明有關此失敗的詳細資訊。
(SQL Server 匯入和匯出精靈)
(下圖)
把目的資料庫砍掉(否則匯入過的資料表內容會再次匯入,變成重複內容),勾選所需要的部分重新匯入,結果還是在相同的資料表出問題
(下圖) 這次不砍掉目的資料庫,僅勾選所剩下尚未匯入的,資料表匯入完成了
最後檢查在雲端上該資料表應該有 2510筆,只能匯入 1715筆。
後來有嘗試
SQL Server 2012 上資料庫建立的時候用預設的 Traditional_Taiwan,結果該資料表還是只能匯入 1715筆。
除了上述問題,目前還發現原本雲端上某些欄位是 AUTO INCREMENT (自動加1),但是匯入後,這個設定沒有自動添加上去。
(完)
PS:基本上微軟並不希望使用者把資料搬上雲端後又搬下來 (這樣客戶可能就跑掉了),所以沒有提供很直覺和方便的匯入工具,所以在 Windows Azure SQL Database 上的資料庫按下滑鼠右鍵,選擇「工作」後,根本沒有「匯出資料」的選項可以選。所以雖然匯入到本機端了,也不保證100%正常。