共用方式為


處理複寫代理程式設定檔

適用於:SQL Server Azure SQL 受控執行個體

此主題說明如何使用 SQL Server Management Studio、Transact-SQL 或 Replication Management Objects (RMO),在 SQL Server 中處理複寫代理程式設定檔。 每個複寫代理程式的行為由一組可在代理程式設定檔中設定的參數來控制。 各代理程式都有預設的設定檔,某些代理程式還擁有其他預先定義的設定檔;在某一給定時刻,代理程式只使用一個設定檔。

本主題內容

使用 SQL Server Management Studio

若要透過 SQL Server Management Studio 存取代理程式設定檔對話方塊

  1. 在 [散發者屬性 - <散發者>] 對話方塊的 [一般] 頁面上,按一下 [設定檔預設值]。

若要透過複寫監視器存取代理程式設定檔對話方塊

  • 若要開啟所有代理程式的對話方塊,請以滑鼠右鍵按一下「發行者」,然後按一下 [代理程式設定檔]

  • 若要開啟單一代理程式的對話方塊:

    1. 在複寫監視器的左窗格中展開發行者群組,展開發行者,然後按一下發行集。

    2. 對於「散發代理程式」和「合併代理程式」設定檔,請以滑鼠右鍵按一下 [所有訂閱] 索引標籤上的訂閱,然後按一下 [代理程式設定檔] 。 對於其他代理程式,請以滑鼠右鍵按一下 [代理程式] 索引標籤,然後按一下 [代理程式設定檔]

若要為代理程式指定設定檔

  1. 如果 [代理程式設定檔] 對話方塊顯示一個以上的代理程式設定檔,請選取一個代理程式。

  2. [代理程式設定檔] 方格的 [新項目的預設值] 資料行中選取一個設定檔。 依預設,設定檔只會套用至新發行集和訂閱的代理程式。

  3. 若要指定現有發行集或訂閱之選定類型的所有代理程式應使用此設定檔,請按一下 [變更現有的代理程式]

若要檢視和編輯設定檔的相關參數

  1. 如果 [代理程式設定檔] 對話方塊顯示一個以上的代理程式設定檔,請選取一個代理程式。

  2. 按一下設定檔旁邊的屬性按鈕 ([...])。

  3. 檢視 [<設定檔名稱 > 設定檔屬性] 對話方塊中的參數和值。

    • 可以編輯使用者自訂之設定檔中的參數;但無法編輯預先定義之系統設定檔中的參數。

    • 若要檢視代理程式的所有參數,請清除 [只顯示這個設定檔中使用的參數] 核取方塊。 如需有關代理程式參數的資訊,請參閱此主題結尾處的連結。

  4. 按一下 [關閉] 。

若要建立使用者自訂的設定檔

  1. 如果 [代理程式設定檔] 對話方塊顯示一個以上的代理程式設定檔,請選取一個代理程式。

  2. 按一下 [新增]

  3. [新增代理程式設定檔] 初始化對話方塊中,選取新設定檔所依據的現有設定檔。

  4. [新增代理程式設定檔] 對話方塊中,於 [名稱][說明] 文字方塊內輸入值。

  5. 修改參數以使其適用於設定檔。 若要檢視代理程式的所有參數,請清除 [只顯示這個設定檔中使用的參數] 核取方塊。 如需有關代理程式參數的資訊,請參閱此主題結尾處的連結。

  6. 選取 [確定]。

若要刪除使用者自訂的設定檔

  1. 如果 [代理程式設定檔] 對話方塊顯示一個以上的代理程式設定檔,請選取一個代理程式。

  2. 如果設定檔與一個或多個代理程式相關聯,請變更這些代理程式的設定檔:

    1. 請在 [代理程式設定檔] 方格中選取其他設定檔。

    2. 按一下 [變更現有的代理程式]

      注意

      這將變更現有發行集或訂閱之所有選定類型代理程式的設定檔,而不僅僅是使用您要刪除之設定檔的代理程式。

  3. 選取您要刪除的設定檔,然後按一下 [刪除]

  4. 選取 [確定]。

使用 TRANSACT-SQL

若要建立新的代理程式設定檔

  1. 在散發者端,執行 sp_add_agent_profile (Transact-SQL)。 指定 @name、針對 @profile_type 指定 1的值,並針對 @agent_type指定下列其中一個值:

    如果此設定檔將成為其複寫代理程式類型的新預設設定檔,請針對 @default 指定 1的值。 新設定檔的識別碼會使用 @profile_id 輸出參數傳回。 如此會根據給定的代理程式類型,建立具有一組設定檔參數的新設定檔。

  2. 在建立新設定檔之後,可以加入、移除或修改預設的參數來自訂該設定檔。

若要修改現有的代理程式設定檔

  1. 在散發者端,執行 sp_help_agent_profile (Transact-SQL)。 針對 @agent_type指定下列其中一個值:

    這會傳回指定的代理程式類型的所有設定檔。 請注意結果集中要變更之設定檔的 profile_id 值。

  2. 在散發者端,執行 sp_help_agent_parameter (Transact-SQL)。 針對 @profile_id指定步驟 1 的設定檔識別碼。 這會傳回設定檔的所有參數。 請注意要在設定檔中修改或移除的任何參數的名稱。

  3. 若要變更設定檔中的參數值,請執行 sp_change_agent_parameter (Transact-SQL)。 為 @profile_id 指定步驟 1 中的設定檔識別碼、為 @parameter_name 指定要變更的參數名稱,並為 @parameter_value 指定參數的新值。

    注意

    您無法變更現有的代理程式設定檔,使其成為代理程式的預設設定檔, 而必須建立新的預設檔當做預設設定檔,如前述程序所示。

  4. 若要從設定檔移除參數,請執行 sp_drop_agent_parameter (Transact-SQL)。 針對 @profile_id 指定步驟 1 中的設定檔識別碼,並針對 @parameter_name指定要移除之參數的名稱。

  5. 若要在設定檔中加入新參數,您必須執行下列動作:

    • 查詢「散發者」端的 MSagentparameterlist (Transact-SQL) 資料表,以判斷可針對每個代理程式類型所設定的設定檔參數。

    • 在散發者端,執行 sp_add_agent_parameter (Transact-SQL)。 針對 @profile_id指定步驟 1 中的設定檔識別碼、針對 @parameter_name指定要加入的有效參數的名稱,並針對 @parameter_value指定參數的值。

若要刪除代理程式設定檔

  1. 在散發者端,執行 sp_help_agent_profile (Transact-SQL)。 針對 @agent_type指定下列其中一個值:

    這會傳回指定的代理程式類型的所有設定檔。 請注意結果集中要移除之設定檔的 profile_id 值。

  2. 在散發者端,執行 sp_drop_agent_profile (Transact-SQL)。 針對 @profile_id指定步驟 1 的設定檔識別碼。

若要在同步處理期間使用代理程式設定檔

  1. 在散發者端,執行 sp_help_agent_profile (Transact-SQL)。 針對 @agent_type指定下列其中一個值:

    這會傳回指定的代理程式類型的所有設定檔。 請注意結果集中要使用之設定檔的 profile_name 值。

  2. 如果代理程式是從代理程式作業啟動的,請編輯啟動代理程式的作業步驟,在 -ProfileName 命令列參數之後指定在步驟 1 中取得的 profile_name 值。 如需詳細資訊,請參閱檢視並修改複寫代理程式命令提示字元參數 (SQL Server Management Studio)

  3. 從命令提示字元啟動代理程式時,在 -ProfileName 命令列參數之後指定在步驟 1 中取得的 profile_name 值。

範例 (Transact-SQL)

此範例會針對名為 custom_merge的合併代理程式建立自訂的設定檔、變更 -UploadReadChangesPerBatch 參數的值、加入新的 -ExchangeType 參數,並傳回所建立之設定檔的相關資訊。

DECLARE @profilename AS sysname;
DECLARE @profileid AS int;
SET @profilename = N'custom_merge';

-- Create a temporary table to hold the returned 
-- Merge Agent profiles.
CREATE TABLE #profiles (
    profile_id int, 
    profile_name sysname,
    agent_type int,
    [type] int,
    description varchar(3000),
    def_profile bit)

INSERT INTO #profiles (profile_id, profile_name, 
    agent_type, [type],description, def_profile)
    EXEC sp_help_agent_profile @agent_type = 4;

SET @profileid = (SELECT profile_id FROM #profiles 
    WHERE profile_name = @profilename);

IF (@profileid IS NOT NULL)
BEGIN
    EXEC sp_drop_agent_profile @profileid;
END
DROP TABLE #profiles

-- Add a new merge agent profile. 
EXEC sp_add_agent_profile @profile_id = @profileid OUTPUT, 
@profile_name = @profilename, @agent_type = 4, 
@description = N'custom merge profile';

-- Change the value of uploadreadchangesperbatch in the profile.
EXEC sp_change_agent_parameter @profile_id = @profileid, 
    @parameter_name = N'-UploadReadChangesPerBatch', @parameter_value = 50;

-- Add a new parameter ExchangeType the profile. 
EXEC sp_add_agent_parameter @profile_id = @profileid, 
    @parameter_name = N'-ExchangeType', @parameter_value = 1;

-- Verify the new profile. 
EXEC sp_help_agent_parameter @profileid;
GO

使用 RMO

若要建立新的代理程式設定檔

  1. 使用 ServerConnection 類別的執行個體建立與「散發者」的連接。

  2. 建立 AgentProfile 類別的執行個體。

  3. 設定物件的下列屬性:

    • Name - 設定檔的名稱。

    • AgentType - AgentType 值,指定為其建立設定檔的複寫代理程式類型。

    • ConnectionContext - 在步驟 1 中建立的 ServerConnection

    • (選擇性) Description - 設定檔的描述。

    • (選擇性) Default - 如果依預設這個 T:Microsoft.SqlServer.Replication.AgentType 的所有新代理程式作業都會使用這個設定檔,請將此屬性設定為 AgentType

  4. 呼叫 Create 方法,以在伺服器上建立設定檔。

  5. 在伺服器上建立設定檔之後,就可以藉由加入、移除或變更複寫代理程式參數的值來加以自訂。

  6. 若要將設定檔指派給現有的複寫代理程式作業,請呼叫 AssignToAgent 方法。 請針對 distributionDBName 傳遞散發資料庫的名稱,而針對 agentID傳遞作業識別碼。

若要修改現有的代理程式設定檔

  1. 使用 ServerConnection 類別的執行個體建立與「散發者」的連接。

  2. 建立 ReplicationServer 類別的執行個體。 傳遞在步驟 1 中建立的 ServerConnection 物件。

  3. 呼叫 LoadProperties 方法。 如果此方法傳回 false,請確認「散發者」存在。

  4. 呼叫 EnumAgentProfiles 方法。 傳遞 AgentType 值,將傳回的設定檔縮減為特定的複寫代理程式類型。

  5. 從傳回的 AgentProfile 取得想要的 ArrayList物件,其中物件的 Name 屬性符合設定檔的名稱。

  6. 呼叫 AgentProfile 的下列其中一個方法來變更設定檔:

    • AddParameter - 將支援的參數加入至設定檔,其中 name 是複寫代理程式參數的名稱, value 則是指定的值。 若要列舉給定代理程式類型的所有受支援的代理程式參數,請呼叫 EnumParameterInfo 方法。 這個方法會傳回 ArrayList 物件的 AgentProfileParameterInfo ,代表所有受支援的參數。

    • RemoveParameter - 從設定檔移除現有的參數,其中 name 是複寫代理程式參數的名稱。 若要列舉所有目前為設定檔所定義的代理程式參數,請呼叫 EnumParameters 方法。 這個方法會傳回 ArrayList 物件的 AgentProfileParameter ,代表此設定檔的現有參數。

    • ChangeParameter - 變更設定檔中現有參數的設定,其中 name 是代理程式參數的名稱,而 newValue 則是參數要變更成的值。 若要列舉所有目前為設定檔所定義的代理程式參數,請呼叫 EnumParameters 方法。 這個方法會傳回 ArrayList 物件的 AgentProfileParameter ,代表此設定檔的現有參數。 若要列舉所有受支援的代理程式參數設定,請呼叫 EnumParameterInfo 方法。 這個方法會傳回 ArrayList 物件的 AgentProfileParameterInfo ,代表所有受支援的參數值。

若要刪除代理程式設定檔

  1. 使用 ServerConnection 類別的執行個體建立與「散發者」的連接。

  2. 建立 AgentProfile 類別的執行個體。 針對 Name ,設定步驟 1 的 ServerConnectionConnectionContext的設定檔名稱。

  3. 呼叫 LoadProperties 方法。 如果此方法傳回 false,則指定的名稱不正確,或伺服器上不存在該設定檔。

  4. 確認 Type 屬性是設定為 User,這代表客戶的設定檔。 您不該移除 System 的值為 Type的設定檔。

  5. 呼叫 Remove 方法,從伺服器移除此物件代表的使用者自訂設定檔。

後續操作:在變更代理程式參數之後

代理程式參數變更會在代理程式下次啟動時生效。 如果代理程式連續執行,則必須停止代理程式,然後重新啟動它。 從 SQL Server 2017 CU3 開始,有些代理程式參數變更無須重新啟動代理程式,即可生效。