驗證 DAC 套件
適用於:Microsoft Fabric 中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 SQL 資料庫
最好先檢閱 DAC 封裝的內容,再將它部署至實際執行環境,以及先驗證升級動作,再升級現有 DAC。 當您部署的封裝之前不是在組織內開發時,特別會是這個情況。
升級 DAC 封裝的方法包括:
不受信任的 DAC 封裝
建議您不要部署來源不明或來源不受信任的 DAC 封裝。 這類檔案可能包含惡意程式碼,因此可能會執行非預期的 Transact-SQL 程式碼,或是修改結構描述而造成錯誤。 使用來源不明或來源不受信任的 DAC 之前,請先將其部署至資料庫引擎的隔離測試執行個體,並在資料庫上執行 DBCC CHECKDB (Transact-SQL),然後檢查資料庫中的程式碼,例如預存程序或其他使用者定義的程式碼。
檢視 DAC 內容
有兩個機制可檢視資料層應用程式 (DAC) 封裝的內容:
- 在 SQL Server Developer Tools 中將 DAC 封裝匯入 SQL 專案
- 將 DAC 封裝發佈至測試執行個體
在 SQL Server Developer Tools 中匯入 DAC
開啟 [檔案] 功能表,選取 [開新檔案],然後選取 [專案...]。
選取 [SQL Server] 專案範本,並指定 [名稱]、 [位置]及 [方案名稱]。
在 [方案總管]中,以滑鼠右鍵按一下專案節點並選取 [屬性...]。
在 [專案設定] 索引標籤的 [輸出類型] 區段中,選取 [資料層應用程式 (.dacpac 檔案)] 核取方塊,然後關閉屬性對話方塊。
在 [方案總管]中,以滑鼠右鍵按一下專案節點並選取 [匯入資料層應用程式...]。
使用方案總管開啟 DAC 中的所有檔案,例如伺服器選取原則和部署前後指令碼。
使用 [結構描述檢視] 檢閱結構描述中的所有物件,特別是檢閱函數或預存程序這類物件中的程式碼時。
將 DAC 封裝發佈至測試執行個體
有多個工具可用來將 DAC 封裝發佈至測試執行個體。 適用於 Azure Data Studio 的 SQL Server Dacpac 擴充功能包含資料層應用程式精靈。 我們將逐步解說如何將 DAC 封裝發佈至測試執行個體。
如有需要,請使用部署精靈來部署測試執行個體。
連線至 Azure Data Studio 中的測試執行個體,然後在伺服器節點上按一下滑鼠右鍵。 從捷徑功能表選取 [資料層應用程式精靈]。
在精靈的步驟 1 中,請選取 [將資料層應用程式 .dacpac 檔案部署至 SQL Server 的執行個體]
在精靈的步驟 2 中,輸入檔案位置並針對目標資料庫選取 [新增資料庫]。 輸入資料庫名稱。
在精靈的步驟 3 中,請先檢閱摘要,再選取 [部署]。
部署完成後,請在物件總管中檢閱資料庫的內容。
選擇性步驟:以滑鼠右鍵按一下物件總管中的資料庫,然後選取 [從資料庫建立專案] 以從資料庫產生 SQL 專案。
檢視資料庫變更
將 DAC 的目前版本部署至實際執行環境之後,直接對相關聯資料庫進行的變更可能會與新版 DAC 中所定義的結構描述衝突。 升級至新版 DAC 之前,請確認是否已經對資料庫進行這類變更。 在幾種情況中,建議您檢視資料庫與 DAC 封裝之間的差異。 舉例來說,直接對相關聯資料庫進行的變更,可能會與新版 DAC 中定義的結構描述有所衝突。
所有資料庫
使用結構描述比較來檢視資料庫變更
使用 Azure Data Studio 中的結構描述比較延伸模組,可以在 Windows、macOS 和 Linux 上檢視現有的 .dacpac 與資料庫之間或相同兩者間結構描述的差異。
在 Visual Studio 中使用 SQL Server Data Tools,可以在 Windows 上檢視現有的 .dacpac 與資料庫之間或相同兩者間結構描述的差異。
使用 SqlPackage CLI 檢視資料庫變更
SqlPackage CLI 可搭配 DeployReport 動作使用,透過 .dacpac 發佈至資料庫時所採取的動作,來檢視 .dacpac 與資料庫間的差異。
註冊為資料層應用程式的資料庫
使用精靈檢視資料庫變更
執行 [升級資料層應用程式精靈],同時指定目前部署的 DAC 以及含有新版 DAC 的 DAC 封裝。
在 [偵測變更] 頁面上,檢閱已對資料庫進行之變更的報表。
如果您不想要繼續升級,請選取 [取消] 。
如需使用精靈的詳細資訊,請參閱 升級資料層應用程式。
使用 PowerShell 檢視資料庫變更
建立 SMO Server 物件,並將它設定為包含要檢視之 DAC 的執行個體。
開啟 ServerConnection 物件,並連接到相同的執行個體。
指定變數中的 DAC 名稱。
使用 GetDatabaseChanges() 方法擷取 ChangeResults 物件,並將該物件以管道傳送至文字檔以產生新的、已刪除和已變更之物件的簡單報表。
下列範例報告在已部署的 DAC (名稱是 MyApplicaiton) 中所做的任何資料庫變更。
## Set a SMO Server object to the default instance on the local computer.
CD SQLSERVER:\SQL\localhost\DEFAULT
$srv = get-item .
## Open a Common.ServerConnection to the same instance.
$serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
$serverconnection.Connect()
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
## Specify the DAC instance name.
$dacName = "MyApplication"
## Generate the change list and save to file.
$dacChanges = $dacstore.GetDatabaseChanges($dacName) | Out-File -Filepath C:\DACScripts\MyApplicationChanges.txt
使用 SqlPackage CLI 檢視資料庫變更
SqlPackage CLI 可搭配 DriftReport 動作使用,以檢視上次註冊以來對資料庫所做的變更。
檢視升級動作
所有資料庫
使用 SQL 專案發佈來檢視資料庫變更
使用 Azure Data Studio 中的 SQL Database 專案延伸模組,在發佈流程期間選取 [產生指令碼],即可在 Windows、macOS 和 Linux 上檢視 SQL 專案發佈至資料庫所會採取的動作。
使用 Visual Studio 中的 SQL Server Data Tools,即可在 Windows 上以部署指令碼的形式檢視 SQL 專案發佈至資料庫時所會採取的動作。
使用 SqlPackage CLI 來檢視升級動作 SqlPackage CLI 可搭配 DeployReport 動作使用,透過 .dacpac 發佈至資料庫所會採取的動作來檢視 .dacpac 與資料庫間的差異。
註冊為資料層應用程式的資料庫
使用新版 DAC 封裝升級從舊版 DAC 封裝部署的 DAC 之前,您可以產生一份報表,其中包含會在升級期間執行的 Transact-SQL 陳述式,然後檢閱這些陳述式。
使用精靈來報告升級動作
執行 [升級資料層應用程式精靈],同時指定目前部署的 DAC 以及含有新版 DAC 的 DAC 封裝。
在 [摘要] 頁面上,檢閱升級動作的報表。
如果您不想要繼續升級,請選取 [取消] 。
如需使用精靈的詳細資訊,請參閱 升級資料層應用程式。
使用 PowerShell 來報告升級動作
建立 SMO Server 物件,並將它設定為包含已部署之 DAC 的執行個體。
開啟 ServerConnection 物件,並連接到相同的執行個體。
使用 System.IO.File 以載入 DAC 封裝檔案。
指定變數中的 DAC 名稱。
使用 GetIncrementalUpgradeScript() 方法以取得升級要執行的 Transact-SQL 陳述式清單,並將該清單以管道傳送至文字檔。
關閉用來讀取 DAC 封裝檔案的檔案資料流。
下列範例中所報告的 Transact-SQL 陳述式,若要將名為 MyApplicaiton 的 DAC 升級至 MyApplication2017.dacpac 檔案中所定義的結構描述,可執行此陳述式。
## Set a SMO Server object to the default instance on the local computer.
CD SQLSERVER:\SQL\localhost\DEFAULT
$srv = get-item .
## Open a Common.ServerConnection to the same instance.
$serverconnection = New-Object Microsoft.SqlServer.Management.Common.ServerConnection($srv.ConnectionContext.SqlConnectionObject)
$serverconnection.Connect()
$dacstore = New-Object Microsoft.SqlServer.Management.Dac.DacStore($serverconnection)
## Load the DAC package file.
$dacpacPath = "C:\MyDACs\MyApplication2017.dacpac"
$fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
$dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
## Specify the DAC instance name.
$dacName = "MyApplication"
## Generate the upgrade script and save to file.
$dacstore.GetIncrementalUpgradeScript($dacName, $dacType) | Out-File -Filepath C:\DACScripts\MyApplicationUpgrade.sql
## Close the filestream to the new DAC package.
$fileStream.Close()
比較 DAC
在升級 DAC 之前,最好先檢閱目前 DAC 與新 DAC 之間的資料庫和執行個體層級物件的差異。 如果您沒有目前 DAC 封裝的複本,您可以從目前的資料庫擷取封裝。
如果您在 SQL Server Developer Tools 中將這兩個 DAC 封裝匯入至 DAC 專案,則可以使用結構描述比較工具來分析這兩個 DAC 的差異。
您也可以將 DAC 解除封裝至不同的資料夾。 然後您可以使用差異工具 (如 WinDiff 公用程式) 來分析差異。