レプリケーション エージェント プロファイルを操作する

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL Managed Instance

このトピックでは、 SQL Server で SQL Server Management Studio、 Transact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用して、レプリケーション エージェント プロファイルを操作する方法について説明します。 各レプリケーション エージェントの動作は、エージェント プロファイルで設定できる一連のパラメーターによって制御されます。 各エージェントには既定のプロファイルがあり、その一部には事前に定義された追加のプロファイルがあります。1 つのエージェントに対しては、1 つのプロファイルのみがアクティブになります。

このトピックの内容

SQL Server Management Studio の使用

SQL Server Management Studio から [エージェント プロファイル] ダイアログ ボックスにアクセスするには

  1. [ディストリビューターのプロパティ - <Distributor>] ダイアログ ボックスの [全般] ページで、 [プロファイルの既定値] をクリックします。

レプリケーション モニターから [エージェント プロファイル] ダイアログ ボックスにアクセスするには

  • すべてのエージェントに対するダイアログ ボックスを開くには、パブリッシャーを右クリックし、 [エージェント プロファイル] をクリックします。

  • 単一のエージェントに対するダイアログ ボックスを開くには

    1. レプリケーション モニターの左ペインのパブリッシャー グループを展開し、パブリッシャーを展開して、パブリケーションをクリックします。

    2. ディストリビューション エージェントとマージ エージェントのプロファイルの場合は、 [すべてのサブスクリプション] タブでサブスクリプションを右クリックし、 [エージェント プロファイル] をクリックします。 その他のエージェントの場合は、 [エージェント] タブでエージェントを右クリックし、 [エージェント プロファイル] をクリックします。

エージェントのプロファイルを指定するには

  1. [エージェント プロファイル] ダイアログ ボックスにエージェントのプロファイルが複数表示されている場合は、エージェントを 1 つ選択します。

  2. [エージェント プロファイル] グリッドの [新規の既定] 列でプロファイルを選択します。 既定では、プロファイルは、新しいパブリケーションとサブスクリプションに対するエージェントにのみ適用されます。

  3. 既存のパブリケーションまたはサブスクリプションに対して選択された種類のすべてのエージェントがこのプロファイルを使用するように指定するには、 [既存のエージェントの変更] をクリックします。

プロファイルに関連付けられたパラメーターを表示および編集するには

  1. [エージェント プロファイル] ダイアログ ボックスにエージェントのプロファイルが複数表示されている場合は、エージェントを 1 つ選択します。

  2. プロファイルの横にあるプロパティ ボタン [...] をクリックします。

  3. [<ProfileName> プロファイルのプロパティ] ダイアログ ボックスにパラメーターと値が表示されます。

    • ユーザー定義プロファイルのパラメーターは編集できます。事前に定義されているシステム プロファイルのパラメーターは編集できません。

    • 1 つのエージェントに対するすべてのパラメーターを表示するには、 [このプロファイルに使用されているパラメーターのみ表示する] チェック ボックスをオフにします。 エージェント パラメーターの詳細については、このトピックの末尾のリンクを参照してください。

  4. [閉じる] をクリックします。

ユーザー定義プロファイルを作成するには

  1. [エージェント プロファイル] ダイアログ ボックスにエージェントのプロファイルが複数表示されている場合は、エージェントを 1 つ選択します。

  2. [新規作成] をクリックします。

  3. [新しいエージェント プロファイル] 初期化ダイアログ ボックスで、新しいプロファイルの基となる既存のプロファイルを選択します。

  4. [新しいエージェント プロファイル] ダイアログ ボックスで、 [名前][説明] ボックスに値を入力します。

  5. パラメーターを変更してプロファイルを調整します。 1 つのエージェントに対するすべてのパラメーターを表示するには、 [このプロファイルに使用されているパラメーターのみ表示する] チェック ボックスをオフにします。 エージェント パラメーターの詳細については、このトピックの末尾のリンクを参照してください。

  6. [OK] をクリックします。

ユーザー定義プロファイルを削除するには

  1. [エージェント プロファイル] ダイアログ ボックスにエージェントのプロファイルが複数表示されている場合は、エージェントを 1 つ選択します。

  2. 1 つのプロファイルが 1 つ以上のエージェントに関連付けられている場合は、これらのエージェントに対するプロファイルを変更します。

    1. [エージェント プロファイル] グリッドで別のプロファイルを選択します。

    2. [既存のエージェントの変更] をクリックします。

      注意

      これによって、削除したいプロファイルを使用しているエージェントだけではなく、既存のパブリケーションまたはサブスクリプションに対して選択された種類のすべてのエージェントに対するプロファイルが変更されます。

  3. 削除するプロファイルを選択し、 [削除] をクリックします。

  4. [OK] をクリックします。

Transact-SQL の使用

新しいエージェント プロファイルを作成するには

  1. ディストリビューターで、sp_add_agent_profile (Transact-SQL) を実行します。 @name を指定し、 @profile_type1 を、 @agent_type に次のいずれかの値を指定します。

    このプロファイルがこの種類のレプリケーション エージェントの新しい既定のプロファイルになる場合、 @default1 を指定します。 新しいプロファイルの ID は、 @profile_id 出力パラメーターにより返されます。 これにより、特定の種類のエージェントの既定のプロファイルに基づいたプロファイル パラメーターのセットを備えた、新しいプロファイルが作成されます。

  2. 新しいプロファイルを作成したら、既定のパラメーターを追加、削除、変更してプロファイルをカスタマイズします。

既存のエージェント プロファイルを変更するには

  1. ディストリビューターで、sp_help_agent_profile (Transact-SQL) を実行します。 次のいずれかの値を @agent_type に指定します。

    これにより、指定された種類のエージェントのプロファイルがすべて返されます。 変更するプロファイルの結果セットで profile_id の値を確認します。

  2. ディストリビューターで、sp_help_agent_parameter (Transact-SQL) を実行します。 手順 1 で確認したプロファイル ID を @profile_id に指定します。 これにより、プロファイルのすべてのパラメーターが返されます。 変更するパラメーター、またはプロファイルから削除するパラメーターの名前を確認します。

  3. プロファイル内のパラメーターの値を変更するには、sp_change_agent_parameter (Transact-SQL) を実行します。 手順 1 で確認したプロファイル ID を @profile_id に指定し、変更するパラメーターの名前を @parameter_name に、パラメーターの新しい値を @parameter_value に指定します。

    注意

    既存のエージェント プロファイルを変更して、エージェントの既定のプロファイルにすることはできません。 代わりに、前の手順に示すように、新しいプロファイルを既定のプロファイルとして作成する必要があります。

  4. プロファイルからパラメーターを削除するには、sp_drop_agent_parameter (Transact-SQL) を実行します。 手順 1 で確認したプロファイル ID を @profile_id に指定し、削除するパラメーターの名前を @parameter_name に指定します。

  5. プロファイルに新しいパラメーターを追加するには、次の手順を実行する必要があります。

    • ディストリビューターで MSagentparameterlist (Transact-SQL) テーブルに対してクエリを実行して、各種類のエージェントに設定できるプロファイル パラメーターを確認します。

    • ディストリビューターで、sp_add_agent_parameter (Transact-SQL) を実行します。 手順 1 で確認したプロファイル ID を @profile_id に指定し、追加する有効なパラメーターの名前を @parameter_name に、パラメーターの値を @parameter_value に指定します。

エージェント プロファイルを削除するには

  1. ディストリビューターで、sp_help_agent_profile (Transact-SQL) を実行します。 次のいずれかの値を @agent_type に指定します。

    これにより、指定された種類のエージェントのプロファイルがすべて返されます。 削除するプロファイルの結果セットで profile_id の値を確認します。

  2. ディストリビューターで、sp_drop_agent_profile (Transact-SQL) を実行します。 手順 1 で確認したプロファイル ID を @profile_id に指定します。

同期の際にエージェント プロファイルを使用するには

  1. ディストリビューターで、sp_help_agent_profile (Transact-SQL) を実行します。 次のいずれかの値を @agent_type に指定します。

    これにより、指定された種類のエージェントのプロファイルがすべて返されます。 使用するプロファイルの結果セットで profile_name の値を確認します。

  2. エージェントがエージェント ジョブから起動される場合、エージェントを起動するジョブ ステップを編集して、手順 1. で得た profile_name の値を -ProfileName コマンド ライン パラメーターの後に指定します。 詳細については、「View and Modify Replication Agent Command Prompt Parameters (SQL Server Management Studio)」(レプリケーション エージェント コマンド プロンプト パラメーターを表示および変更する (SQL Server Management Studio)) を参照してください。

  3. コマンド プロンプトからエージェントを起動する場合、手順 1. で得た profile_name の値を -ProfileName コマンド ライン パラメーターの後に指定します。

例 (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 に渡し、ジョブの ID を agentID に渡します。

既存のエージェント プロファイルを変更するには

  1. ServerConnection クラスのインスタンスを使用して、ディストリビューターへの接続を作成します。

  2. ReplicationServer クラスのインスタンスを作成します。 手順 1. で作成した ServerConnection オブジェクトを渡します。

  3. LoadProperties メソッドを呼び出します。 このメソッドが false を返す場合、ディストリビューターが存在するかどうかを確認してください。

  4. EnumAgentProfiles メソッドを呼び出します。 特定の種類のレプリケーション エージェントのプロファイルが返されるように、 AgentType 値を渡します。

  5. 返された AgentProfile から目的の ArrayListオブジェクトを取得します。オブジェクトの Name プロパティはプロファイル名と同じです。

  6. AgentProfile の次のメソッドの 1 つを呼び出して、プロファイルを変更します。

    • 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 以降では、エージェントを再起動しなくても、一部のエージェント パラメーターの変更が有効になります。

参照

レプリケーション エージェント プロファイル
Replication Snapshot Agent
Replication Log Reader Agent
Replication Distribution Agent
Replication Merge Agent
レプリケーション キュー リーダー エージェント