プッシュ サブスクリプションの作成Create a push subscription

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

このトピックでは、 SQL ServerSQL ServerSQL Server Management StudioSQL Server Management StudioTransact-SQLTransact-SQL、またはレプリケーション管理オブジェクト (RMO) を使用して、プッシュ サブスクリプションを作成する方法について説明します。This topic describes how to create a push subscription in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). SQL ServerSQL Server 以外のサブスクライバーの詳細については、「SQL Server 以外のサブスクライバーのサブスクリプションの作成」を参照してください。For information about creating a push subscription for a non- SQL ServerSQL Server Subscriber, see Create a subscription for a non-SQL Server Subscriber.

注意

Azure SQL Managed Instance は、スナップショットおよびトランザクション レプリケーションのパブリッシャー、ディストリビューター、およびサブスクライバーの可能性があります。Azure SQL Managed Instance can be a publisher, distributor, and subscriber for snapshot and transactional replication. Azure SQL Database のデータベースは、スナップショットとトランザクション レプリケーションのプッシュ サブスクライバーの可能性しかありません。Databases in Azure SQL Database can only be push subscribers for snapshot and transactional replication. 詳細については、Azure SQL Database および Azure SQL Managed Instance を使用したトランザクションのレプリケーションに関するページを参照してください。For more information, see Transactional replication with Azure SQL Database and Azure SQL Managed Instance.

SQL Server Management Studio の使用Using SQL Server Management Studio

サブスクリプションの新規作成ウィザードを使用して、パブリッシャーまたはサブスクライバーでプッシュ サブスクリプションを作成します。Create a push subscription at the Publisher or the Subscriber by using the New Subscription Wizard. ウィザードのページに従って、次の操作を実行します。Follow the pages in the wizard to:

  • パブリッシャーとパブリケーションを指定します。Specify the Publisher and publication.

  • レプリケーション エージェントが実行される場所を選択します。Select where replication agents will run. プッシュ サブスクリプションでは、パブリケーションの種類に応じて、 [ディストリビューション エージェントの場所] ページまたは [マージ エージェントの場所] ページで [ディストリビューター <Distributor> ですべてのエージェントを実行する (プッシュ サブスクリプション)] を選択します。For a push subscription, select Run all agents at the Distributor (push subscriptions) on the Distribution Agent Location page or Merge Agent Location page, depending on the type of publication.

  • サブスクライバーとサブスクリプション データベースを指定します。Specify Subscribers and subscription databases.

  • レプリケーション エージェントによって作成された接続に対して使用されるログインとパスワードを指定します。Specify the logins and passwords used for connections made by replication agents:

    • スナップショット パブリケーションとトランザクション パブリケーションに対するサブスクリプションでは、 [ディストリビューション エージェント セキュリティ] ページで資格情報を指定します。For subscriptions to snapshot and transactional publications, specify credentials on the Distribution Agent Security page.

    • マージ パブリケーションに対するサブスクリプションでは、 [マージ エージェント セキュリティ] ページで資格情報を指定します。For subscriptions to merge publications, specify credentials on the Merge Agent Security page.

      各エージェントで必要な権限の詳細については、「レプリケーション エージェント セキュリティ モデル」を参照してください。For information about the permissions that each agent requires, see Replication agent security model.

  • 同期スケジュール、およびサブスクライバーをいつ初期化するかを指定します。Specify a synchronization schedule and when the Subscriber should be initialized.

  • マージ パブリケーションの追加オプションとして、サブスクリプションの種類、およびパラメーター化されたフィルターの値を指定します。Specify additional options for merge publications: subscription type and values for parameterized filtering.

  • サブスクリプションの更新を許可するトランザクション パブリケーションの追加オプションを指定します。Specify additional options for transactional publications that allow updating subscriptions. オプションの 1 つは、サブスクライバーがパブリッシャーですぐに変更をコミットするべきか、キューに書き込むべきかを決定することです。One option is to decide whether Subscribers should commit changes at the Publisher immediately or write them to a queue. サブスクライバーからパブリッシャーに接続する際に使用される資格情報を設定するというオプションもあります。Another option is setting up credentials used to connect from the Subscriber to the Publisher.

  • 必要に応じて、サブスクリプションのスクリプトを作成します。Optionally, script the subscription.

パブリッシャーからプッシュ サブスクリプションを作成するにはTo create a push subscription from the Publisher

  1. MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio でパブリッシャーに接続し、サーバー ノードを展開します。Connect to the Publisher in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. [レプリケーション] フォルダーを展開し、 [ローカル パブリケーション] フォルダーを展開します。Expand the Replication folder, and then expand the Local Publications folder.

  3. 1 つ以上のサブスクリプションを作成するパブリケーションを右クリックし、 [新しいサブスクリプション] を選択します。Right-click the publication for which you want to create one or more subscriptions, and then select New Subscriptions.

  4. サブスクリプションの新規作成ウィザードのページに従って操作を実行します。Complete the pages in the New Subscription Wizard.

サブスクライバーからプッシュ サブスクリプションを作成するにはTo create a push subscription from the Subscriber

  1. SQL Server Management StudioSQL Server Management Studioでサブスクライバーに接続して、サーバー ノードを展開します。Connect to the Subscriber in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. [レプリケーション] フォルダーを展開します。Expand the Replication folder.

  3. [ローカル サブスクリプション] フォルダーを右クリックし、 [新しいサブスクリプション] を選択します。Right-click the Local Subscriptions folder, and then select New Subscriptions.

  4. サブスクリプションの新規作成ウィザードの [パブリケーション] ページで、 [パブリッシャー] ドロップダウン リストから [<Find SQL Server Publisher>] または [<Find Oracle Publisher>] を選択します。On the Publication page of the New Subscription Wizard, select <Find SQL Server Publisher> or <Find Oracle Publisher> from the Publisher drop-down list.

  5. [サーバーへの接続] ダイアログ ボックスでパブリッシャーに接続します。Connect to the Publisher in the Connect to Server dialog box.

  6. [パブリケーション] ページでパブリケーションを選択します。Select a publication on the Publication page.

  7. サブスクリプションの新規作成ウィザードのページに従って操作を実行します。Complete the pages in the New Subscription Wizard.

Transact-SQL の使用Using Transact-SQL

レプリケーション ストアド プロシージャを使用することで、プログラムによってプッシュ サブスクリプションを作成できます。You can create push subscriptions programmatically by using replication stored procedures. 使用するストアド プロシージャは、サブスクリプションが属するパブリケーションの種類によって変わります。The stored procedures used will depend on the type of publication to which the subscription belongs.

重要

可能であれば、実行時、ユーザーに対してセキュリティ資格情報の入力を要求します。When possible, prompt users to enter security credentials at runtime. スクリプト ファイルに資格情報を格納する必要がある場合は、不正アクセスを防ぐために、ファイルを保護します。If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

スナップショット パブリケーションまたはトランザクション パブリケーションに対するプッシュ サブスクリプションを作成するにはTo create a push subscription to a snapshot or transactional publication

  1. パブリッシャー側のパブリケーション データベースに対して、sp_helppublication を実行して、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。At the Publisher on the publication database, verify that the publication supports push subscriptions by running sp_helppublication.

    • allow_push の値が 1 の場合、プッシュ サブスクリプションがサポートされます。If the value of allow_push is 1, push subscriptions are supported.

    • allow_push の値が 0 の場合、sp_changepublication を実行します。If the value of allow_push is 0, run sp_changepublication. allow_push@property に、true@value に指定します。Specify allow_push for @property and true for @value.

  2. パブリッシャー側のパブリケーション データベースに対して、sp_addsubscription を実行します。At the Publisher on the publication database, run sp_addsubscription. @publication@subscriber、および @destination_db を指定します。Specify @publication, @subscriber, and @destination_db. @subscription_type には push を指定します。Specify a value of push for @subscription_type. サブスクリプションの更新方法の詳細については、「トランザクション パブリケーションの更新可能なサブスクリプションの作成」を参照してください。For information about how to update subscriptions, see Create an updatable subscription to a transactional publication.

  3. パブリッシャー側のパブリケーション データベースに対して、sp_addpushsubscription_agent を実行します。At the Publisher on the publication database, run sp_addpushsubscription_agent. 次の指定を行います。Specify the following:

    • @subscriber パラメーター、 @subscriber_db パラメーター、および @publication パラメーター。The @subscriber, @subscriber_db, and @publication parameters.

    • ディストリビューターで実行されるディストリビューション エージェントが使用する MicrosoftMicrosoft Windows 資格情報。 @job_login および @job_password に指定します。The MicrosoftMicrosoft Windows credentials under which the Distribution Agent at the Distributor runs for @job_login and @job_password.

      注意

      Windows 統合認証を使用して行われる接続では、常に @job_login および @job_password で指定された Windows 資格情報が使用されます。Connections made through Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビューターにローカル接続します。The Distribution Agent always makes the local connection to the Distributor by using Windows Integrated Authentication. 既定では、エージェントは Windows 統合認証を使用してサブスクライバーに接続します。By default, the agent will connect to the Subscriber by using Windows Integrated Authentication.

    • (省略可) @subscriber_security_mode0 を指定し、 @subscriber_login および @subscriber_passwordMicrosoftMicrosoft SQL ServerSQL Serverログイン情報を指定します。(Optional) A value of 0 for @subscriber_security_mode and the MicrosoftMicrosoft SQL ServerSQL Server login information for @subscriber_login and @subscriber_password. サブスクライバーに接続するときに SQL Server 認証を使用する必要がある場合、これらのパラメーターを指定します。Specify these parameters if you need to use SQL Server Authentication when connecting to the Subscriber.

    • このサブスクリプションでのディストリビューション エージェント ジョブのスケジュール。A schedule for the Distribution Agent job for this subscription. 詳細については、「同期スケジュールの指定」を参照してください。For more information, see Specify synchronization schedules.

重要

リモート ディストリビューターを使用するパブリッシャー側でプッシュ サブスクリプションを作成する場合は、job_login および job_password を含むすべてのパラメーターに指定された値がディストリビューターにプレーン テキストとして送信されます。When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. このストアド プロシージャを実行する前に、パブリッシャーとリモート ディストリビューターの間の接続を暗号化する必要があります。You should encrypt the connection between the Publisher and its remote Distributor before running this stored procedure. 詳細については、「データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)」を参照してください。For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

マージ パブリケーションに対するプッシュ サブスクリプションを作成するにはTo create a push subscription to a merge publication

  1. パブリッシャー側のパブリケーション データベースに対して、sp_helpmergepublication を実行して、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。At the Publisher on the publication database, verify that the publication supports push subscriptions by running sp_helpmergepublication.

    • allow_push の値が 1 の場合、パブリケーションでプッシュ サブスクリプションがサポートされます。If the value of allow_push is 1, the publication supports push subscriptions.

    • allow_push の値が 1 ではない場合、sp_changemergepublication を実行します。If the value of allow_push is not 1, run sp_changemergepublication. allow_push@property に、true@value に指定します。Specify allow_push for @property and true for @value.

  2. パブリッシャー側のパブリケーション データベースに対し、sp_addmergesubscription を実行します。At the Publisher on the publication database, run sp_addmergesubscription. 次のパラメーターを指定します。Specify the following parameters:

    • @publication@publication. これはパブリケーションの名前です。This is the name of the publication.

    • @subscriber_type@subscriber_type. クライアント サブスクリプションの場合は、local を指定します。For a client subscription, specify local. サーバー サブスクリプションの場合は、global を指定します。For a server subscription, specify global.

    • @subscription_priority@subscription_priority. サーバー サブスクリプションの場合、サブスクリプションの優先度 (0.0099.99) を指定します。For a server subscription, specify a priority for the subscription (0.00 to 99.99).

    詳細については、「マージ レプリケーションの競合検出および解決の詳細」を参照してください。For more information, see Advanced merge replication conflict detection and resolution.

  3. パブリッシャー側のパブリケーション データベースに対して、sp_addmergepushsubscription_agent を実行します。At the Publisher on the publication database, run sp_addmergepushsubscription_agent. 次の指定を行います。Specify the following:

    • @subscriber パラメーター、 @subscriber_db パラメーター、および @publication パラメーター。The @subscriber, @subscriber_db, and @publication parameters.

    • ディストリビューターで実行されるマージ エージェントが使用する Windows 資格情報。 @job_login および @job_password に指定します。The Windows credentials under which the Merge Agent at the Distributor runs for @job_login and @job_password.

      注意

      Windows 統合認証を使用して行われる接続では、常に @job_login および @job_password で指定された Windows 資格情報が使用されます。Connections made through Windows Integrated Authentication always use the Windows credentials specified by @job_login and @job_password. マージ エージェントは、常に Windows 統合認証を使用してディストリビューターにローカル接続します。The Merge Agent always makes the local connection to the Distributor by using Windows Integrated Authentication. 既定では、エージェントは Windows 統合認証を使用してサブスクライバーに接続します。By default, the agent will connect to the Subscriber by using Windows Integrated Authentication.

    • (省略可) @subscriber_security_mode0 を指定し、 @subscriber_login および @subscriber_passwordSQL ServerSQL Server ログイン情報を指定します。(Optional) A value of 0 for @subscriber_security_mode and the SQL ServerSQL Server login information for @subscriber_login and @subscriber_password. サブスクライバーに接続するときに SQL Server 認証を使用する必要がある場合、これらのパラメーターを指定します。Specify these parameters if you need to use SQL Server Authentication when connecting to the Subscriber.

    • (省略可) @publisher_security_mode0 を指定し、 @publisher_login および @publisher_passwordSQL ServerSQL Server ログイン情報を指定します。(Optional) A value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. パブリッシャーに接続するときに SQL Server 認証を使用する必要がある場合、これらの値を指定します。Specify these values if you need to use SQL Server Authentication when connecting to the Publisher.

    • このサブスクリプションでのマージ エージェント ジョブのスケジュール。A schedule for the Merge Agent job for this subscription. 詳細については、「同期スケジュールの指定」を参照してください。For more information, see Specify synchronization schedules.

重要

リモート ディストリビューターを使用するパブリッシャー側でプッシュ サブスクリプションを作成する場合は、job_login および job_password を含むすべてのパラメーターに指定された値がディストリビューターにプレーン テキストとして送信されます。When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. このストアド プロシージャを実行する前に、パブリッシャーとリモート ディストリビューターの間の接続を暗号化する必要があります。You should encrypt the connection between the Publisher and its remote Distributor before running this stored procedure. 詳細については、「データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)」を参照してください。For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

例 (Transact-SQL)Examples (Transact-SQL)

次の例では、トランザクション パブリケーションに対するプッシュ サブスクリプションを作成します。The following example creates a push subscription to a transactional publication. ログインとパスワードの値は、実行時に sqlcmd スクリプト変数を使用して入力されます。Login and password values are supplied at runtime through sqlcmd scripting variables.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

次の例では、マージ パブリケーションに対するプッシュ サブスクリプションを作成します。The following example creates a push subscription to a merge publication. ログインとパスワードの値は、実行時に sqlcmd スクリプト変数を使用して入力されます。Login and password values are supplied at runtime through sqlcmd scripting variables.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks2012];
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

レプリケーション管理オブジェクトの使用Using Replication Management Objects

レプリケーション管理オブジェクト (RMO) を使用することで、プログラムによってプッシュ サブスクリプションを作成できます。You can create push subscriptions programmatically by using Replication Management Objects (RMO). プッシュ サブスクリプションを作成する際に使用する RMO クラスは、作成するサブスクリプションの対象となるパブリケーションの種類によって異なります。The RMO classes that you use to create a push subscription depend on the type of publication to which the subscription is created.

重要

可能であれば、実行時、ユーザーに対してセキュリティ資格情報の入力を要求します。When possible, prompt users to enter security credentials at runtime. 資格情報を保存する必要がある場合は、MicrosoftMicrosoft Windows .NET Framework に用意されている暗号化サービスを使用します。If you must store credentials, use the cryptographic services that the MicrosoftMicrosoft Windows .NET Framework provides.

スナップショット パブリケーションまたはトランザクション パブリケーションに対するプッシュ サブスクリプションを作成するにはTo create a push subscription to a snapshot or transactional publication

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。Create a connection to the Publisher by using the ServerConnection class.

  2. 手順 1. のパブリッシャー接続を使用して、 TransPublication クラスのインスタンスを作成します。Create an instance of the TransPublication class by using the Publisher connection from step 1. NameDatabaseName、および ConnectionContextを指定します。Specify Name, DatabaseName, and ConnectionContext.

  3. LoadProperties メソッドを呼び出します。Call the LoadProperties method. このメソッドが false を返す場合、手順 2. で指定したプロパティが誤っているか、サーバーにパブリケーションが存在していません。If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exist on the server.

  4. Attributes プロパティと AllowPush のビットごとの論理 AND 演算 (Visual C# では & 、Visual Basic では And) を実行します。Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and AllowPush. 結果が Noneの場合、 Attributes| プロパティと Or 、Visual Basic では AttributesAllowPush」を参照してください。If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPush. 次に、 CommitPropertyChanges を呼び出してプッシュ サブスクリプションを有効にします。Then, call CommitPropertyChanges to enable push subscriptions.

  5. サブスクリプション データベースが存在しない場合は、 Database クラスを使用して作成します。If the subscription database does not exist, create it by using the Database class. 詳細については、「データベースの作成、変更、および削除」を参照してください。For more information, see Creating, altering, and removing databases.

  6. TransSubscription クラスのインスタンスを作成します。Create an instance of the TransSubscription class.

  7. 次のサブスクリプション プロパティを設定します。Set the following subscription properties:

  8. Create メソッドを呼び出します。Call the Create method.

重要

リモート ディストリビューターを使用するパブリッシャー側でプッシュ サブスクリプションを作成する場合は、SynchronizationAgentProcessSecurity を含むすべてのプロパティに指定された値がディストリビューターにプレーン テキストとして送信されます。When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all properties, including SynchronizationAgentProcessSecurity, are sent to the Distributor as plain text. Create メソッドを呼び出す前に、パブリッシャーとリモート ディストリビューター間の接続を暗号化する必要があります。You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. 詳細については、「データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)」を参照してください。For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

マージ パブリケーションに対するプッシュ サブスクリプションを作成するにはTo create a push subscription to a merge publication

  1. ServerConnection クラスを使用して、パブリッシャーへの接続を作成します。Create a connection to the Publisher by using the ServerConnection class.

  2. 手順 1. のパブリッシャー接続を使用して、 MergePublication クラスのインスタンスを作成します。Create an instance of the MergePublication class by using the Publisher connection from step 1. NameDatabaseName、および ConnectionContextを指定します。Specify Name, DatabaseName, and ConnectionContext.

  3. LoadProperties メソッドを呼び出します。Call the LoadProperties method. このメソッドが false を返す場合、手順 2. で指定したプロパティが誤っているか、サーバーにパブリケーションが存在していません。If this method returns false, either the properties specified in step 2 are incorrect or the publication does not exist on the server.

  4. Attributes プロパティと AllowPush のビットごとの論理 AND 演算 (Visual C# では & 、Visual Basic では And) を実行します。Perform a bitwise logical AND (& in Visual C# and And in Visual Basic) between the Attributes property and AllowPush. 結果が Noneの場合、 Attributes| プロパティと Or 、Visual Basic では AttributesAllowPush」を参照してください。If the result is None, set Attributes to the result of a bitwise logical OR (| in Visual C# and Or in Visual Basic) between Attributes and AllowPush. 次に、 CommitPropertyChanges を呼び出してプッシュ サブスクリプションを有効にします。Then, call CommitPropertyChanges to enable push subscriptions.

  5. サブスクリプション データベースが存在しない場合は、 Database クラスを使用して作成します。If the subscription database does not exist, create it by using the Database class. 詳細については、「データベースの作成、変更、および削除」を参照してください。For more information, see Creating, altering, and removing databases.

  6. MergeSubscription クラスのインスタンスを作成します。Create an instance of the MergeSubscription class.

  7. 次のサブスクリプション プロパティを設定します。Set the following subscription properties:

  8. Create メソッドを呼び出します。Call the Create method.

重要

リモート ディストリビューターを使用するパブリッシャー側でプッシュ サブスクリプションを作成する場合は、SynchronizationAgentProcessSecurity を含むすべてのプロパティに指定された値がディストリビューターにプレーン テキストとして送信されます。When you're creating a push subscription at a Publisher with a remote Distributor, the values supplied for all properties, including SynchronizationAgentProcessSecurity, are sent to the Distributor as plain text. Create メソッドを呼び出す前に、パブリッシャーとリモート ディストリビューター間の接続を暗号化する必要があります。You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. 詳細については、「データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)」を参照してください。For more information, see Enable encrypted connections to the database engine (SQL Server Configuration Manager).

例 (RMO)Examples (RMO)

次の例では、トランザクション パブリケーションに対する新しいプッシュ サブスクリプションを作成します。This example creates a new push subscription to a transactional publication. ディストリビューション エージェント ジョブを実行するために使用される Windows アカウントの資格情報は、実行時に渡されます。The Windows account credentials that you use to run the Distribution Agent job are passed at runtime.

           // Define the Publisher, publication, and databases.
           string publicationName = "AdvWorksProductTran";
           string publisherName = publisherInstance;
           string subscriberName = subscriberInstance;
           string subscriptionDbName = "AdventureWorks2012Replica";
           string publicationDbName = "AdventureWorks2012";

           //Create a connection to the Publisher.
           ServerConnection conn = new ServerConnection(publisherName);

           // Create the objects that we need.
           TransPublication publication;
           TransSubscription subscription;

           try
           {
               // Connect to the Publisher.
               conn.Connect();

               // Ensure that the publication exists and that 
               // it supports push subscriptions.
               publication = new TransPublication();
               publication.Name = publicationName;
               publication.DatabaseName = publicationDbName;
               publication.ConnectionContext = conn;

               if (publication.IsExistingObject)
               {
                   if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
                   {
                       publication.Attributes |= PublicationAttributes.AllowPush;
                   }

                   // Define the push subscription.
                   subscription = new TransSubscription();
                   subscription.ConnectionContext = conn;
                   subscription.SubscriberName = subscriberName;
                   subscription.PublicationName = publicationName;
                   subscription.DatabaseName = publicationDbName;
                   subscription.SubscriptionDBName = subscriptionDbName;

                   // Specify the Windows login credentials for the Distribution Agent job.
                   subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
                   subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

                   // By default, subscriptions to transactional publications are synchronized 
                   // continuously, but in this case we only want to synchronize on demand.
                   subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand;

                   // Create the push subscription.
                   subscription.Create();
               }
               else
               {
                   // Do something here if the publication does not exist.
                   throw new ApplicationException(String.Format(
                       "The publication '{0}' does not exist on {1}.",
                       publicationName, publisherName));
               }
           }
           catch (Exception ex)
           {
               // Implement the appropriate error handling here.
               throw new ApplicationException(String.Format(
                   "The subscription to {0} could not be created.", publicationName), ex);
           }
           finally
           {
               conn.Disconnect();
           }
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksProductTran"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

' Create the objects that we need.
Dim publication As TransPublication
Dim subscription As TransSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New TransPublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New TransSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName

        ' Specify the Windows login credentials for the Distribution Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' By default, subscriptions to transactional publications are synchronized 
        ' continuously, but in this case we only want to synchronize on demand.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.OnDemand

        ' Create the push subscription.
        subscription.Create()
    Else
        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If

Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
        "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

次の例では、マージ パブリケーションに対する新しいプッシュ サブスクリプションを作成します。This example creates a new push subscription to a merge publication. マージ エージェント ジョブを実行するために使用される Windows アカウントの資格情報は、実行時に渡されます。The Windows account credentials that you use to run the Merge Agent job are passed at runtime.

// Define the Publisher, publication, and databases.
string publicationName = "AdvWorksSalesOrdersMerge";
string publisherName = publisherInstance;
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";
string publicationDbName = "AdventureWorks2012";
string hostname = @"adventure-works\garrett1";

//Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

// Create the objects that we need.
MergePublication publication;
MergeSubscription subscription;

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Ensure that the publication exists and that 
    // it supports push subscriptions.
    publication = new MergePublication();
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;
    publication.ConnectionContext = conn;

    if (publication.IsExistingObject)
    {
        if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
        {
            publication.Attributes |= PublicationAttributes.AllowPush;
        }

        // Define the push subscription.
        subscription = new MergeSubscription();
        subscription.ConnectionContext = conn;
        subscription.SubscriberName = subscriberName;
        subscription.PublicationName = publicationName;
        subscription.DatabaseName = publicationDbName;
        subscription.SubscriptionDBName = subscriptionDbName;
        subscription.HostName = hostname;

        // Set a schedule to synchronize the subscription every 2 hours
        // during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly;
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32(0x003E);
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1;
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour;
        subscription.AgentSchedule.FrequencySubDayInterval = 2;
        subscription.AgentSchedule.ActiveStartDate = 20051108;
        subscription.AgentSchedule.ActiveEndDate = 20071231;
        subscription.AgentSchedule.ActiveStartTime = 060000;
        subscription.AgentSchedule.ActiveEndTime = 100000;

        // Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin;
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword;

        // Create the push subscription.
        subscription.Create();
    }
    else
    {
        // Do something here if the publication does not exist.
        throw new ApplicationException(String.Format(
            "The publication '{0}' does not exist on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Implement the appropriate error handling here.
    throw new ApplicationException(String.Format(
        "The subscription to {0} could not be created.", publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the Publisher, publication, and databases.
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publisherName As String = publisherInstance
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"
Dim publicationDbName As String = "AdventureWorks2012"
Dim hostname As String = "adventure-works\garrett1"

'Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

' Create the objects that we need.
Dim publication As MergePublication
Dim subscription As MergeSubscription

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Ensure that the publication exists and that 
    ' it supports push subscriptions.
    publication = New MergePublication()
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName
    publication.ConnectionContext = conn

    If publication.IsExistingObject Then
        If (publication.Attributes And PublicationAttributes.AllowPush) = 0 Then
            publication.Attributes = publication.Attributes _
            Or PublicationAttributes.AllowPush
        End If

        ' Define the push subscription.
        subscription = New MergeSubscription()
        subscription.ConnectionContext = conn
        subscription.SubscriberName = subscriberName
        subscription.PublicationName = publicationName
        subscription.DatabaseName = publicationDbName
        subscription.SubscriptionDBName = subscriptionDbName
        subscription.HostName = hostname

        ' Set a schedule to synchronize the subscription every 2 hours
        ' during weekdays from 6am to 10pm.
        subscription.AgentSchedule.FrequencyType = ScheduleFrequencyType.Weekly
        subscription.AgentSchedule.FrequencyInterval = Convert.ToInt32("0x003E", 16)
        subscription.AgentSchedule.FrequencyRecurrenceFactor = 1
        subscription.AgentSchedule.FrequencySubDay = ScheduleFrequencySubDay.Hour
        subscription.AgentSchedule.FrequencySubDayInterval = 2
        subscription.AgentSchedule.ActiveStartDate = 20051108
        subscription.AgentSchedule.ActiveEndDate = 20071231
        subscription.AgentSchedule.ActiveStartTime = 60000
        subscription.AgentSchedule.ActiveEndTime = 100000

        ' Specify the Windows login credentials for the Merge Agent job.
        subscription.SynchronizationAgentProcessSecurity.Login = winLogin
        subscription.SynchronizationAgentProcessSecurity.Password = winPassword

        ' Create the push subscription.
        subscription.Create()
    Else

        ' Do something here if the publication does not exist.
        Throw New ApplicationException(String.Format( _
         "The publication '{0}' does not exist on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Implement the appropriate error handling here.
    Throw New ApplicationException(String.Format( _
    "The subscription to {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

関連項目See also

プッシュ サブスクリプションのプロパティの表示または変更 View and modify push subscription properties
レプリケーション セキュリティの推奨事項 Replication security best practices
パブリケーションの作成 Create a publication
レプリケーション管理オブジェクトの概念 Replication management objects concepts
プッシュ サブスクリプションの同期 Synchronize a push subscription
パブリケーションのサブスクライブ Subscribe to publications
sqlcmd でのスクリプト変数の使用Use sqlcmd with scripting variables