SQL Server打包資料庫的DAC與BAC -- DAC篇

by adonisy 21. 五月 2019 12:06

.DB World國際中文電子雜誌 
作 者:楊先民 
審 稿:張智凱 

前言

自從 SQL Server有了一個東西叫做 Azure之後,學習 SQL Server開始變的有點複雜,因為教材除了要介紹 SQL Server的功能之外,還要介紹 Azure該怎麼做(其實只會更簡單

而本篇會出現,主要是因為如何將 SQL Server資料庫的資料打包到 Azure上,開始有了混亂,因為有兩個東西,分別叫做 DAC以及 BAC的出現,本期就來介紹這兩個東西。

為何需要打包

會有這個問題也並不意外,首先你需要知道 SQL Azure上並沒有辦法自行備份還原資料庫,這些工作 SQL Azure都會幫你完成,換句話說如果你想把 SQL Server的資料庫搬到

SQL Azure的話,傳統的備份 A,然後回復 B的手法是並不可行的。

其實除了這個原因之外,微軟一直也沒有一個好的升級資料庫的方式是主因,我們可以使用 Detach與Attach將舊資料庫升級,或是使用備份 A再還原 B的方式升級,然而這兩種作法都不適用在 SQL Azure

之外,還有一個問題,那就是:他們都不包含系統資訊。

對的,備份還原手法或是 Detach Attach手法都只挶限於使用者資料庫上面,系統資料基本上是存放在系統資料庫的,所以微軟此時又開始變招了。

是的,微軟考慮將資料庫打包起來,方便佈署到 Azure或是升級到更高版本的 SQL Server資料庫。

微軟提供了圖型界面的工具方便各位打包,或是各位想自己使用命令提示字元指令 SqlPackage來做這件事情...

如果是圖型介面的話,就是在資料庫右鍵工作,就可以看到,如下圖所示:

但是初學的你我,一定會對這個 Extract 與 Export這兩個動詞感到非常的疑問...到底為何這兩個長的如此的相像,有什麼不同之處呢?

事實上,這個圖型介面,完全就是對應到命令提示字元指令 SqlPackage,一個是被打包成副檔名 bacpac的檔案,另一個則是被打包成 dacpac

也就是圖型介面看起來是有兩個,但實際上都是使用同一個命令提示字元指令 SqlPackage來達成目的,我們來看一下這個命令提示字元指令的參數,你就會知道為什麼了:

 

以上是從微軟的 help截圖下來的,也就是說, SqlPackage是可以利用 Extract參數與 Export參數,將資料庫打包成 dacpac以及 bacpac這兩種類型的檔案。

那麼,這兩種類型的檔案又有何不同呢?

dacpac是將資料庫裡面的結構產生出來,包含相連結的系統資訊,但是沒有資料。

而 bacpac則是將資料庫裡面的結構與資料產生出來,但是沒有系統資訊。

這個時後大家就悶了,什麼時後會只要結構與系統資訊,但是沒有資料的 dacpac,那又什麼時後需要有結構有資料,但沒有系統資訊的 bacpac呢?

根據微軟的意思是, bacpac可以用來把 SQL Server的資料庫打包完後,佈署到 SQL Azure上,因為在打包的同時,會特別檢查裡面是否有 SQL Azure不支援的指令(例如跨資料庫存取之類的),

但是因為 SQL Azure不能把 SQL Server上的登入帳號合併,所以無需在產生 bacpac的時後打包登入帳號的系統資訊。

打包dacpac則是方便管理者將測試環境的資料庫佈署到正式環境上,因為測試環境會有一些資料但是在正式環境是不需要的,所以會只包結構但是沒有資料,而測試機上的系統資訊也會被打包起來

方便移植到正式機器上。

 

實作 DAC

這裡就來實際測試一下 DAC的功能好了(觀念再多,只要一個練習即可說明其功能)

 

1.首先先將 Adventureworks資料庫用 DAC打包吧:資料庫右鍵-->工作--> Extract

2.將dacpac存起來,版本設定為1.0.0.0

3.建立一個登入帳號,並且設定該帳號可以使用 Adventureworks資料庫

4.再產生一次 dacpac,檔名設定不同,版本設定為 1.0.0.1

5.建立一個新的資料表

6.再產生一次 dacpac,檔名設定不同,版本設定為 1.0.0.2

 

接下來就是見證奇蹟的時後了,我們選擇 Databases右鍵,Deploy Data-tier Application,如下圖:

首先,我們把第一個產生的 DAC加進來,給它一個資料庫名稱,完成精靈結束。

這個時後,你會有一個全裸的資料庫,裡面什麼都有,就是沒資料,也沒有你在上方3.步驟所建立的使用者。

你其實可以試著把 *.dacpac這個檔案按右鍵,直接unpack,乖乖,這是一個可以解壓縮的檔案啊...裡面有 xml 與 sql的檔案,都只是資料庫裡的結構,以及用來

描述資料表之間關連的 xml檔,裡面並沒有資料。

 

此時並沒有使用者資訊。

接下來,選擇新資料庫右鍵-->工作-->upgrade Data-tier Application,在精靈中,把上方步驟4所產生的 dacpac檔案加入進來。

 

 

 

 

這時精靈會說明,這裡和舊資料庫比對,有多一些資訊。

精靈跑完,你會發現使用者以及登入帳號的資訊會幫你產生出來。

 

 

 

 

由上圖可以發現, John出現了,連權限都有了。

接下來就是再 Upgrade一次,選擇上面步驟6.所產生的 dacpac檔案。

 

一樣,被偵測到多了一個資料庫,精靈結束後這個結構改變,多的資料表 Table_1就會被產生出來了。

所以, DAC被視為將資料庫從測試環境,佈署到正式環境的一個設定。

我們下期再來介紹 BACDAC。

Tags:

SQL Server資料庫 | 楊先民Adonis Young

不允許評論

NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List