共用方式為


解除封裝 DACPAC 檔案

資料層應用程式 (DAC) 是整個資料庫模型的獨立單位,而且可在稱為 DAC 封裝的成品中移植,或 .dacpac。 在將 .dacpac 部署到生產環境之前,最佳做法是先檢查其內容,並且在升級現有的 DAC 之前驗證升級動作。 部署非貴組織開發的套件時,驗證.dacpac內容特別重要。 本文說明數種從 .dacpac 解開適用於 Windows、macOS 和 Linux 的資料庫模型的方法。

警告

我們建議您不要從未知或不受信任的來源部署 .dacpac 。 這類 DAC 可能包含惡意程式碼,因此可能會執行非預期的程式碼,或是修改結構描述而造成錯誤。 在您使用來源不明或來源不受信任的 DAC 之前,請將它部署到資料庫引擎的隔離測試執行個體、解除封裝 DAC 並檢查程式碼,例如預存程序或其他使用者定義的程式碼。

檢視 .dacpac 內容的選項包括:

  • 在 Visual Studio 中將 .dacpac 匯入至 SQL 專案
  • 使用 SqlPackage 命令行公用程式來擷取 .dacpac
  • 解壓縮檔案以檢視 XML 內容
  • 正在將.dacpac部署到測試實例

在從資料庫擷取物件定義之後立即解除封裝 .dacpac ,即可更有效率地使用 SqlPackage 中的 Extract 搭配 屬性 /p:ExtractTarget=File來完成。 結果會直接建立單 .sql 一檔案,其中包含來自指定源資料庫的物件定義。

將 DACPAC 匯入 Visual Studio 中的 SQL 專案

.dacpac 匯入 Visual Studio 中的 SQL 專案,會導致將 的內容 .dacpac 轉換成 .sql 檔案,並組織成資料夾。 在匯入之後,方案總管中會顯示 來自 .dacpac 的部署後腳本和預先部署腳本。

  1. SQL Server Data Tools 安裝作為 Visual Studio 的一部分,並建立新的 SQL 專案。

  2. 方案總管中滑鼠右鍵按一下空白專案,然後選取 [匯入],再選取 [從資料層應用程式封裝]。

解壓縮 DACPAC 以檢視 XML 內容

解壓縮 .dacpac 檔案會導致原始 XML 內容可供在文字編輯器中檢視。 在 中 .dacpac尋找特定元件時,檢閱 XML 內容可以是存取資訊的快速方法。

  1. 將檔案上的 .dacpac 延伸名變更為 .zip

  2. 使用作業系統所提供的公用程式,將 ZIP 檔案解壓縮。 若要透過命令列解壓縮檔案:

    unzip AdventureWorks.dacpac
    
  3. 產生的內容包含 DacMetadata.xmlOrigin.xmlmodel.xml

將 DACPAC 部署至測試實例

.dacpac 部署到測試實例後,會導致 .dacpac 的內容發佈到資料庫中,讓物件可以從各種連接的資料庫工具中瀏覽。

備註

在本機建立測試執行個體的其中一個選項是使用 Docker 中的 SQL Server

使用 Azure Data Studio 部署 DACPAC

  1. Azure Data Studio 中安裝 SQL Server dacpac 延伸模組

  2. 連線至想要的執行個體。 以滑鼠右鍵按一下伺服器節點,並從功能表選取 [資料層應用程式精靈]。

  3. 從精靈選取 [部署] 選項,並將 [目標資料庫] 選項設定為 [新資料庫]。

  4. 在部署後,請開啟物件總管,連接到伺服器上的資料庫,以便檢視資料庫物件。

使用 SqlPackage 部署 DACPAC

  1. 安裝 SqlPackage

  2. 使用 SqlPackage CLI 將 .dacpac 檔案發佈至所需的實例。 如需將 發行 .dacpac 至資料庫的範例命令,請參閱 SqlPackage 發佈範例

具有 DACPAC 部署功能的其他工具

除了 Azure Data Studio 和 SqlPackage 之外,許多其他工具都可以用來將 部署 .dacpac 至資料庫。 一些範例包括:

  • SQL Server Management Studio
  • Visual Studio:SQL Server Data Tools

叫用 Unpack() 方法

Microsoft.SqlServer.DacFx .NET API 提供將 解壓縮.dacpac至資料夾的方法,可用來以程式設計方式將 解壓縮.dacpac至資料夾。 下列範例 .NET 應用程式會採用兩個自變數:檔案的路徑 .dacpac 和輸出資料夾的路徑,而結果是轉換成3個 XML 檔案的內容 .dacpac ,以及包含所有資料庫物件的單一.sql檔案。

using Microsoft.SqlServer.Dac;

namespace DacUnpack
{
    class Program
    {
        static void Main(string[] args)
        {
            var dacpacPath = args[0];
            var outputPath = args[1];

            if (!Directory.Exists(outputPath))
            {
                Directory.CreateDirectory(outputPath);
            }

            Console.WriteLine("Unpacking {0} to {1}", dacpacPath, outputPath);
            using(DacPackage dacpac = DacPackage.Load(dacpacPath))
            {
                dacpac.Unpack(outputPath);
            }
        }
    }
}