[個人筆記] 利用Blob中bacpac在C#中搭配SQL 2012 DAC服務執行匯入到SQL Azure
這篇筆記算是小繞了點解決之前我寫[個人筆記] SMO 與 Azure 資料庫複製這篇的失敗,但是可以用的方法,這個方法拆成兩個部份去解決,第一個是用C#下載blob中的bacpac,第二個則是透過SQL 2012 DAC Service把bacpac匯入成新的資料庫。
【前面要做的功課】
關於data-tier application component(DAC)、dacpac、bacpac,要更深入瞭解可以參考以下資料:
[MS-DPBACPAC]: Data-Tier Application Schema and Data Data Portability Overview
【透過C#讀取Blob中的資料】
首先你需要先參考前文,製作好自己的bacpac並上傳到Azure Blob上,然後再撰寫程式
Azure Blob連線字串通常如下,重要資料都可以在Manage Access Keys找到
DefaultEndpointsProtocol=http;AccountName=[STORAGE ACCOUNT NAME];AccountKey=[PRIMARY ACCESS KEY/SECONDARY ACCESS KEY]
-參考資料-
Streaming Blobs To and From SQL Azure
Azure Blob Storage – a simple example
Windows Azure: Working with Blob Storage in an ASP.NET Application
【透過SQL 2012 DAC Service匯入bacpac到SQL Azure】
這段就有點曲折了,因為最找找到的DAC資料其實是用DACStore去執行,在SQL 2008 & SQL 2008 R2的dll中找到Microsoft.SqlServer.Management.Dac.dll但是無法處理SQL 2012的bacpac檔,後來找到這篇資料,然後延伸到SQL Server 物件與版本的 DAC 支援,根據Alan Brewer的說明,簡單的來說,就是2012的DACFx 3 API產生的bacpac檔案用DACFx 2的API是沒辦法處理的,所以需要用DACFx 3的API來進行匯入,結合上面讀出bacpac stream的程式碼之後就是:
-SQL 2008R2以前用的參考資料-
Deploying a data-tier application in SQL Azure
-SQL 2012後相關參考資料
Backing up AppHarbor SQL Server databases using BACPACs
【附帶筆記】
需要加入參考的DLL有兩個,如果在.NET頁籤找不到可以試著找以下位置:
Microsoft.WindowsAzure.StorageClient.dll在:磁碟代號:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\ref\Microsoft.WindowsAzure.StorageClient.dll
Microsoft.SqlServer.Dac.dll在: 磁碟代號:\安裝目錄[Program Files (x86)]\Microsoft SQL Server\110\DAC\bin