資料庫建置與部署概觀

更新:2007 年 11 月

若要從「資料庫專案」(Database Project) 將新的資料庫或現有資料庫的變更部署到資料庫伺服器,您必須先建置此資料庫專案,然後再將它部署到資料庫伺服器。建置步驟會使用您在專案屬性視窗中所設定的屬性,將物件定義指令碼與預先部署或部署後指令碼組合成單一建置指令碼。此部署步驟會組合此指令碼,然後針對您所指定的「目標」(Target) 來執行此建置指令碼。清除建置動作只會刪除所有現有的建置指令碼。如果您要更新開發用伺服器或實際執行伺服器,則可能要建置資料庫專案,然後自行修改此建置指令碼。當您做完調整且對於結果感到滿意之後,便可以手動將修改過的建置指令碼部署到實際執行環境中。

部署指令碼

您可以指定指令碼,使其在建立或更新目標的指令碼之前或之後執行。只能有一個預先部署指令碼及一個部署後指令碼,但是這兩個指令碼中可以包含其他指令碼。如需詳細資訊,請參閱使用資料庫指令碼

您可以針對不同的目標資料庫執行建置指令碼,每一個目標資料庫都可以有不同的組態。因此,此建置指令碼會包含用來設定所有資料庫屬性的陳述式,即使當這些屬性的值已經符合資料庫專案屬性的值時亦然。

部署到現有資料庫的考量

當您將變更部署到現有資料庫時,某些變更可能會造成資料遺失。如果這項變更會造成資料表中的資料遺失,則除非您已經在專案屬性視窗中清除 [如果可能發生資料遺失,則封鎖累加部署] 核取方塊,否則將會取消此部署。如需詳細資訊,請參閱資料庫專案設定概觀。將會造成資料遺失的變更範例如下:如果卸除了資料表之後又重新建立它、變更資料行的大小 (從 char(100) 變更為 char(50) 或是從 nchar(100) 變更為 char(100)),或者變更字元型別資料行的定序。

復原失敗的部署

Team Edition for Database Professionals 會在異動記錄檔中建立儲存點,而部署失敗時可以還原成該儲存點。然而,如果在建立儲存點和還原資料庫之間,資料庫的資料在部署期間有進行修改,就可能發生資料遺失。基於這個原因,如果是在部署共用資料庫,您應該認真考慮在部署前,先讓資料庫進入單一使用者模式。

注意事項:

您必須使用完整復原模式,還原失敗部署的資料庫。因為需要異動記錄檔,所以簡單復原模式不足以進行這項工作。如需復原模式的詳細資訊,請參閱<Overview of the Recovery Models>(英文)。

排除的檔案

如果您要從資料庫專案中排除某些檔案,這些檔案中所定義的「資料庫物件」(Database Object) 將不會包含在您的組建或部署中。如果您仍在處理一或多個物件,但是想要部署已經完成的工作,則可以排除一些檔案,以便只部署那些已經準備好的項目。之後當這些檔案準備好可以部署時,您便可以包含這些檔案,而部署作業將會以新的物件來更新資料庫,而不會修改現有的物件 (如果尚未在專案中變更這些物件)。

命令列建置

除了在可以在 Visual Studio 使用者介面中執行建置 (Build)、部署或清除外,您也可以使用 MSBuild.exe 在命令列建置中執行這些動作。您可以指定 Build、Deploy、Rebuild、Clean、SQLBuild、SQLDeploy 及 CleanProject 目標。根據預設,建置和部署程序會使用資料庫專案中所定義的專案屬性 (在 .dbproj 檔案或 .dbproj.user 檔案中)。但是,您可以在命令列上或是從回應檔來覆寫這些屬性。

重要事項:

在執行命令列建置之前,應該先關閉 Visual Studio。如果您在 Visual Studio 執行中時執行命令列建置,則可能不會攔截到某些錯誤。

命令列語法

您可以在命令列上,透過直接的語法來建置資料庫專案,如以下範例所示:

  • MSBuild /target:Build MySolutionName.sln
    這個範例會在名為 MySolutionName.sln 的方案上執行建置動作 (使用此方案所含之專案檔案內指定的專案屬性)。如果此方案包含一或多個資料庫專案,這些專案將會與方案內的所有其他東西一起建置。建置動作將會產生建立或更新目標資料庫所需的指令碼,但是將不會部署此指令碼。您也可以建置特定的資料庫專案。Build 目標會在產生的建置指令碼中包含預先部署和部署後指令碼。

  • MSBuild /target:SQLBuild MyProjectName.dbproj
    這個範例也會執行僅限建置的動作,而且只會建置名為 MyProjectName.dbproj 的單一資料庫專案。.dbproj 檔案中的專案屬性是用來組合建置指令碼,但不會部署此指令碼。SQLBuild 目標不會在產生的建置指令碼中包含預先部署或部署後指令碼。

  • MSBuild /target:Build /p:BuildScriptName=MyScriptName.sql MyProjectName.dbproj
    這個範例也會執行僅限建置的動作,而且只會建置名為 MyProjectName.dbproj 的單一資料庫專案。.dbproj 檔案中的專案屬性是用來組合建置指令碼,此命令列會覆寫 BuildScriptName 屬性並指定輸出指令碼的新名稱。如果您想要將建置指令碼部署至多部伺服器,可以使用這個方法。但不會部署此指令碼。

  • MSBuild /target:Deploy /property:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=(local)\SQLEXPRESS;Integrated Security=True;Pooling=False" MyProjectName.dbproj
    這個範例會示範如何部署資料庫專案,並覆寫目標資料庫名稱和連接字串。

  • MSBuild /target:rebuild /p:Configuration="Default" /p:DefaultDataPath="Drive:Path\\" MyProjectName.dbproj
    這個範例會示範如何重建資料庫專案、指定組態 (預設),以及覆寫 DefaultDataPath 變數。

重要事項:

您必須為 DefaultDataPath 指定額外的後置反斜線 ("\")。否則,當您建置時將會出現警告,而且資料庫專案將無法正確建置。

  • MSBuild /target:Deploy /property:BuildScriptName= MyScriptName.sql /property:outdir=BuildScriptPath /property:TargetDatabase=UpdatedTargetDatabase;TargetConnectionString="Data Source=InstanceName\DatabaseName;Integrated Security=True;Pooling=False" ProjectPath\MyProjectName.dbproj
    本範例說明如何部署電腦上的資料庫,而該電腦與進行建置的電腦是不同的。例如,如果您是以中央建置電腦於每晚建立建置指令碼,則可能會使用這個命令列。您必須指定建置指令碼名稱、建置指令碼所在的路徑 (outdir)、目標資料庫,以及資料庫專案檔的路徑和名稱。

  • MSBuild @dbbuild.arf MyProjectName.dbproj
    這個範例會示範如何使用回應檔來提供命令列引數。dbbuild.arf 檔可包含任何有效的 MSBuild 命令列參數,包括會覆寫專案屬性的那些參數。如需回應檔的詳細資訊,請參閱 MSBuild 回應檔

  • MSBuild /target:Rebuild MyProjectName.dbproj
    這個範例會重新建置指定的專案或方案,甚至在該專案或方案於上次建置之後尚未變更時,也會重新建置。

  • MSBuild /target:Clean MyProjectName.dbproj
    這個範例會示範如何刪除任何現有的建置指令碼。較常見的作法是搭配另一個建置或部署動作來使用這個動作。

注意事項:

您可以將 /target: 縮寫為 /t: 並將 /property: 縮寫為 /p:。

如需 MSBuild 命令列選項的詳細資訊,請參閱 MSBuild 命令列參考

如需回應檔的詳細資訊,請參閱 MSBuild 回應檔

注意事項:

若要執行 MSBuild.exe,您必須使用 Visual Studio 2005 命令提示字元或是執行 %VS80COMNTOOLS% 環境變數指定之資料夾內所找到的 vsvars32.bat 批次檔。

資料庫專案屬性

某些資料庫專案屬性會影響將要建置及部署資料庫專案的方式,這些屬性會儲存在資料庫專案檔案和 .user 檔案中,而且您可以使用命令列或回應檔來覆寫這些屬性。如需資料庫專案屬性的詳細資訊,請參閱資料庫專案設定概觀

安全性考量

如果其他使用者可以修改您的設計階段驗證資料庫執行個體,他們也可以新增或變更最後會出現在建置指令碼中的物件。建置輸出將會產生這些物件 (如 DDL 觸發程序),而且這些物件將會在部署資料庫之人員的內容中執行。這些物件不一定會出現在 [方案總管] 或 [結構描述檢視] 中。當您將資料庫專案與部署的資料庫比較時,[結構描述比較] 將不會偵測到任何內容,因為設計階段驗證資料庫也會包含這些物件。

若要將資料庫的風險減至最小:

  • 不要將設計階段驗證資料庫的執行個體與其他使用者共用。

  • 部署建置指令碼之前務必要先進行檢閱。

請參閱

工作

HOW TO:準備資料庫建置指令碼

HOW TO:將變更部署到新的或現有的資料庫

逐步解說:建立及部署新版本控制的資料庫

逐步解說:將變更部署到現有的版本控制資料庫

概念

Database Edition 的用語概觀