[個人筆記] 利用Blob中bacpac在C#中搭配SQL 2012 DAC服務執行匯入到SQL Azure

[個人筆記] 利用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

Drawing of the export and import data portability

 

【透過C#讀取Blob中的資料】

首先你需要先參考前文,製作好自己的bacpac並上傳到Azure Blob上,然後再撰寫程式

image

Azure Blob連線字串通常如下,重要資料都可以在Manage Access Keys找到

DefaultEndpointsProtocol=http;AccountName=[STORAGE ACCOUNT NAME];AccountKey=[PRIMARY ACCESS KEY/SECONDARY ACCESS KEY]

 

-參考資料-

Sample Code

Everything you need to know about Windows Azure Blob Storage including permissions, signatures, concurrency, …

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的程式碼之後就是:

image

 

-SQL 2008R2以前用的參考資料-

Deploying a data-tier application in SQL Azure

-SQL 2012後相關參考資料

Backing up AppHarbor SQL Server databases using BACPACs

Microsoft.SqlServer.Dac 命名空間

BacPackage 類別

BacPackage 方法

 

【附帶筆記】

需要加入參考的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