如何:驗證 DAC 封裝

您最好先檢閱資料層應用程式 (DAC) 封裝的內容,然後再將它部署到實際執行環境,並在使用 DAC 封裝升級現有的 DAC 之前,先驗證升級動作。當部署的封裝不是在組織中開發時,更需要這樣做。

檢視 DAC 的內容

有兩個機制可檢視 DAC 封裝的內容。您可以在 Microsoft Visual Studio 2010 中建立 DAC 專案,然後將 DAC 封裝匯入專案中。您可以將封裝的內容解除封裝到資料夾中。

安全性注意事項安全性注意事項

建議您不要部署來源不明或來源不受信任的 DAC 封裝。這類 DAC 可能包含惡意程式碼,因此可能會執行非預期的 Transact-SQL 程式碼,或是修改結構描述而造成錯誤。使用來源不明或來源不受信任的 DAC 之前,請先將它部署到 Database Engine 的隔離測試執行個體,並在資料庫上執行 DBCC CHECKDB,然後檢查資料庫中的程式碼,例如預存程序或其他使用者定義的程式碼。

檢視 DAC 封裝內容的一個方法是在 Microsoft Visual Studio 2010 中建立 DAC 專案,並將此封裝匯入專案中。然後您可以使用 [方案總管] 開啟 DAC 中的所有檔案,例如伺服器選取原則及部署前後指令碼。您可以使用 [結構描述檢視] 檢閱結構描述中的所有物件,特別是檢閱類似函數或預存程序等物件中的程式碼。

如果您無法存取 Visual Studio 2010,您可以將 DAC 內容解除封裝到資料夾中。然後,您可以在 SQL Server Management Studio 的 Database Engine 查詢編輯器中開啟 Transact-SQL 指令碼,並在類似 [記事本] 的工具中開啟檔案。如需指示,請參閱<如何:解除封裝 DAC 封裝>。

使用精靈驗證升級

在升級 DAC 之前,最好先檢查初始 DAC 部署之後,已經對資料庫所做的變更,並檢閱升級將變更的指令碼。您可以使用 [升級資料層應用程式] 精靈來檢視此資訊;您可以在 [偵測變更] 頁面上檢視資料庫變更,並在 [摘要] 頁面上檢視升級動作。如果您不想執行升級,請按一下 [摘要] 頁面上的 [取消]。如需詳細資訊,請參閱<如何:升級資料層應用程式>。

使用 PowerShell 檢視資料庫變更

在使用新版的 DAC 封裝升級從舊版 DAC 封裝部署的 DAC 之前,請確認是否已經對資料庫進行可能會影響升級的變更。

[!附註]

本主題中的 PowerShell 範例使用 DAC Framework 1.1 Feature Pack 中所導入的方法。您可以從此網頁下載 Feature Pack。

建立包含下列程式碼的 PowerShell 指令碼 (.ps1) 檔案:

  1. 加入程式碼以建立 SMO Server 物件,並將它設定為包含要升級之 DAC 的執行個體。此範例會將 Server 物件設定為本機電腦上的預設執行個體:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. 加入程式碼以開啟 ServerConnection 物件並連接至相同的執行個體。

    ## 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)
    
  3. 加入程式碼以指定先前部署的 DAC,然後建立 ChangeResults 物件,並將其以管道連接至文字檔以產生新的、已刪除的以及已變更的物件的簡易報表。

    ## 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
    

從您已載入 SQL Server PowerShell 嵌入式管理單元的 PowerShell 工作階段,或使用 sqlps 命令提示字元公用程式執行 .ps1 檔案。

使用 PowerShell 產生升級指令碼

在使用新版的 DAC 封裝升級從舊版 DAC 封裝部署的 DAC 之前,您可以產生一個指令碼檔案,其中包含將在升級期間執行的 Transact-SQL 陳述式,然後檢閱該指令碼。建立包含下列程式碼的 PowerShell 指令碼 (.ps1) 檔案:

  1. 加入程式碼以建立 SMO Server 物件,並將它設定為包含要升級之 DAC 的執行個體。此範例會將 Server 物件設定為本機電腦上的預設執行個體:

    ## Set a SMO Server object to the default instance on the local computer.
    CD SQLSERVER:\SQL\localhost\DEFAULT
    $srv = get-item .
    
  2. 加入程式碼以開啟 ServerConnection 物件並連接至相同的執行個體。

    ## 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)
    
  3. 加入程式碼以載入 DAC 封裝檔案。此範例會載入 MyApplication.dacpac 檔案。

    ## Load the DAC package file.
    $dacpacPath = "C:\MyDACs\MyApplication.dacpac"
    $fileStream = [System.IO.File]::Open($dacpacPath,[System.IO.FileMode]::OpenOrCreate)
    $dacType = [Microsoft.SqlServer.Management.Dac.DacType]::Load($fileStream)
    
  4. 加入程式碼以指定先前部署的 DAC,然後建立 Transact-SQL 指令碼,並將其以管道連接至 .sql 檔案。關閉用來讀取新 DAC 封裝的檔案資料流。

    ## 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()
    

從您已載入 SQL Server PowerShell 嵌入式管理單元的 PowerShell 工作階段,或使用 sqlps 命令提示字元公用程式執行 .ps1 檔案。

比較 DAC

在升級 DAC 之前,您也可以先檢閱目前 DAC 與新 DAC 之間的資料庫和執行個體層級物件的差異。如果您沒有目前 DAC 封裝的複本,您可以從目前的資料庫擷取封裝。

如果您在 Visual Studio 2010 中將這兩個 DAC 封裝匯入 DAC 專案,您可以使用結構描述比較工具來分析兩個 DAC 之間的差異。

如果您無法存取 Visual Studio 2010,請將 DAC 解除封裝到個別的資料夾中。然後您可以使用差異工具 (如 WinDiff 公用程式) 來分析差異。