注
この機能は、今後のバージョンの Microsoft SQL Server で削除される予定です。 新しい開発作業ではこの機能を使用しないでください。現在この機能を使用しているアプリケーションを変更することを計画してください。
トランザクション レプリケーションを使用すると、サブスクライバーで行われた変更を、即時更新サブスクリプションまたはキュー更新サブスクリプションを使用してパブリッシャーに反映させることができます。 更新サブスクリプションは、レプリケーション ストアド プロシージャを使用してプログラムで作成できます。
新しいサブスクリプション ウィザードの[更新可能なサブスクリプション]ページで、更新可能なサブスクリプションを構成します。 このページは、更新可能なサブスクリプションに対してトランザクション パブリケーションを有効にしている場合にのみ使用できます。 更新可能なサブスクリプションの有効化の詳細については、「 トランザクション パブリケーションのサブスクリプションの更新を有効にする」を参照してください。
パブリッシャーから更新可能なサブスクリプションを構成する
Microsoft SQL Server Management Studio でパブリッシャーに接続し、サーバー ノードを展開します。
[レプリケーション] フォルダーを展開し、[ローカル パブリケーション] フォルダーを展開します。
サブスクリプションの更新が有効になっているトランザクション パブリケーションを右クリックし、[ 新しいサブスクリプション] をクリックします。
ウィザードのページに従って、ディストリビューション エージェントを実行する場所など、サブスクリプションのオプションを指定します。
新しいサブスクリプション ウィザードの [更新可能なサブスクリプション] ページで、[レプリケート] が選択されていることを確認します。
[ Commit at Publisher]\(パブリッシャーでのコミット\) ドロップダウン リストからオプションを選択します。
- 即時更新サブスクリプションを使用するには、[変更を 同時にコミットする] を選択します。 このオプションを選択し、パブリケーションでキュー更新サブスクリプション (パブリケーションの新規作成ウィザードで作成されたパブリケーションの既定値) を許可する場合、サブスクリプション プロパティ update_mode はフェールオーバーに設定 されます。 このモードでは、必要に応じて後でキュー更新に切り替えることができます。
- キュー更新サブスクリプションを使用するには、 可能な場合は [キューの変更とコミット] を選択します。 このオプションを選択し、パブリケーションで即時更新サブスクリプション (パブリケーションの新規作成ウィザードで作成されたパブリケーションの既定値) を許可し、サブスクライバーが SQL Server 2005 以降のバージョンを実行している場合、 サブスクリプション プロパティ update_mode はキューフェールオーバーに設定されます。 このモードでは、必要に応じて、後で即時更新に切り替えることができます。
更新モードの切り替えについては、「 更新可能なトランザクション サブスクリプションの更新モードを切り替える」を参照してください。
[更新可能なサブスクリプションのログイン] ページは、即時更新を使用するサブスクリプション、またはupdate_modeがキューに登録されたフェールオーバーに設定されているサブスクリプションの場合に表示されます。 [ 更新可能なサブスクリプションのログイン ] ページで、即時更新サブスクリプションに対してパブリッシャーへの接続を行うリンク サーバーを指定します。 接続は、サブスクライバーで発動してパブリッシャーに変更を伝達するトリガーによって使用されます。 次のいずれかのオプションを選択します。
- SQL Server 認証を使用して接続するリンク サーバーを作成します。 サブスクライバーとパブリッシャーの間にリモート サーバーまたはリンク サーバーを定義していない場合は、このオプションを選択します。 レプリケーションによってリンク サーバーが自動的に作成されます。 指定するアカウントは、パブリッシャーに既に存在している必要があります。
- 既に定義したリンク サーバーまたはリモート サーバーを使用します。 sp_addserver (Transact-SQL)、sp_addlinkedserver (Transact-SQL)、SQL Server Management Studio、またはその他の方法を使用してサブスクライバーとパブリッシャーの間でリモート サーバーまたはリンク サーバーを定義している場合は、このオプションを選択します。
リンク サーバー アカウントに必要なアクセス許可についての情報は、キュー更新サブスクリプションの[リンクの説明をここに記入]を参照してください。
ウィザードを完了させてください。
サブスクライバーから更新可能なサブスクリプションを構成する
SQL Server Management Studio でサブスクライバーに接続し、サーバー ノードを展開します。
[レプリケーション] フォルダーを展開します。
[ローカル サブスクリプション] フォルダーを右クリックし、[新しいサブスクリプション] をクリックします。
新しいサブスクリプション ウィザードの [パブリケーション] ページで、[パブリッシャー] ドロップダウン リストから [SQL Server パブリッシャーの検索] を選択します。
[サーバーへの接続] ダイアログ ボックスでパブリッシャー に接続 します。
[パブリケーション] ページで、サブスクリプションの更新が有効になっているトランザクション パブリケーション を選択します。
ウィザードのページに従って、ディストリビューション エージェントを実行する場所など、サブスクリプションのオプションを指定します。
新しいサブスクリプション ウィザードの [ 更新可能なサブスクリプション ] ページで、[ レプリケート ] が選択されていることを確認します。
[ Commit at Publisher]\(パブリッシャーでのコミット\) ドロップダウン リストからオプションを選択します。
- 即時更新サブスクリプションを使用するには、[変更を 同時にコミットする] を選択します。 このオプションを選択し、パブリケーションでキュー更新サブスクリプション (パブリケーションの新規作成ウィザードで作成されたパブリケーションの既定値) を許可する場合、サブスクリプション プロパティ update_mode はフェールオーバーに設定 されます。 このモードでは、必要に応じて後でキュー更新に切り替えることができます。
- キュー更新サブスクリプションを使用するには、 可能な場合は [キューの変更とコミット] を選択します。 このオプションを選択し、パブリケーションで即時更新サブスクリプション (パブリケーションの新規作成ウィザードで作成されたパブリケーションの既定値) を許可し、サブスクライバーが SQL Server 2005 以降のバージョンを実行している場合、サブスクリプション プロパティ update_mode は キューフェールオーバーに設定されます。 このモードでは、必要に応じて、後で即時更新に切り替えることができます。
更新モードの切り替えについては、「 更新可能なトランザクション サブスクリプションの更新モードを切り替える」を参照してください。
[ 更新可能なサブスクリプションのログイン ] ページは、即時更新を使用するサブスクリプション、またはキューに登録されたフェールオーバー にupdate_mode 設定されている サブスクリプションに対して表示されます。 [ 更新可能なサブスクリプションのログイン ] ページで、即時更新サブスクリプションに対してパブリッシャーへの接続を行うリンク サーバーを指定します。 接続は、サブスクライバーで起動し、変更をパブリッシャーに伝達するトリガーによって使用されます。 次のいずれかのオプションを選択します。
- SQL Server 認証を使用して接続するリンク サーバーを作成します。 サブスクライバーとパブリッシャーの間にリモート サーバーまたはリンク サーバーを定義していない場合は、このオプションを選択します。 レプリケーションによってリンク サーバーが自動的に作成されます。 指定するアカウントは、パブリッシャーに既に存在している必要があります。
- 既に定義したリンク サーバーまたはリモート サーバーを使用します。 sp_addserver (Transact-SQL)、sp_addlinkedserver (Transact-SQL)、SQL Server Management Studio、またはその他の方法を使用してサブスクライバーとパブリッシャーの間でリモート サーバーまたはリンク サーバーを定義している場合は、このオプションを選択します。
リンク サーバー アカウントに必要な権限の詳細については、キュー更新サブスクリプションのここにリンク説明を入力してくださいを参照してください。
ウィザードを完了させてください。
即時更新プル サブスクリプションを作成する
パブリッシャーで、sp_helppublicationを実行して、パブリケーションが即時更新 サブスクリプションをサポートしていることを確認します。
- 結果セット内の
allow_sync_tran
の値が1
場合、パブリケーションは即時更新サブスクリプションをサポートします。 - 結果セット内の
allow_sync_tran
の値が0
されている場合は、即時更新サブスクリプションを有効にしてパブリケーションを再作成する必要があります。
- 結果セット内の
パブリッシャーで、sp_helppublicationを実行して、パブリケーションがプル サブスクリプションをサポートしていることを確認します。
- 結果セット内の
allow_pull
の値が1
場合、パブリケーションはプル サブスクリプションをサポートします。 -
allow_pull
の値が0
の場合は、sp_changepublicationを実行し、@property
のallow_pull
と@value
のtrue
を指定します。
- 結果セット内の
サブスクライバーで、 sp_addpullsubscriptionを実行します。
@publisher
と@publication
を指定し、@update_mode
に次のいずれかの値を指定します。-
sync tran
- サブスクリプションを即時更新できるようにします。 -
failover
- フェールオーバー オプションとしてキュー更新を使用してサブスクリプションを即時更新できるようにします。
注
-
failover
では、キュー処理更新用サブスクリプションに対しても、発行を有効にする必要があります。
サブスクライバーで、 sp_addpullsubscription_agentを実行します。 次を指定します。
-
@publisher
、@publisher_db
、および@publication
パラメーター。 - サブスクライバーのディストリビューション エージェントが
@job_login
および@job_password
に対して実行される、Microsoft Windows 資格情報。
注
-
Windows 統合認証を使用して行われる接続は、常に、
@job_login
と@job_password
で指定された Windows 資格情報を使用して行われます。 ディストリビューション エージェントは、常に Windows 統合認証を使用してサブスクライバーにローカル接続を行います。 既定では、エージェントは Windows 統合認証を使用してディストリビューターに接続します。
* (Optional) A value of `0` for `@distributor_security_mode` and the Microsoft SQL Server login information for `@distributor_login` and `@distributor_password`, if you need to use SQL Server Authentication when connecting to the Distributor.
* A schedule for the Distribution Agent job for this subscription.
サブスクリプション データベースのサブスクライバーで、 sp_link_publicationを実行します。
@publisher
、@publication
、@publisher_db
のパブリケーション データベースの名前、および@security_mode
に次のいずれかの値を指定します。-
0
- パブリッシャーで更新を行うときは、SQL Server 認証を使用します。 このオプションでは、@login
と@password
のパブリッシャーで有効なログインを指定する必要があります。 -
1
- パブリッシャーに接続するときにサブスクライバーで変更を加えるユーザーのセキュリティ コンテキストを使用します。 このセキュリティ モードに関連する制限については、 sp_link_publication を参照してください。 -
2
- sp_addlinkedserverを使用して作成された既存のユーザー定義のリンク サーバー ログインを使用します。
-
パブリッシャーで、sp_addsubscription を実行し、
@publication
、@subscriber
、@destination_db
、@subscription_type
には pull の値を指定し、@update_mode
には手順 3 で指定されたのと同じ値を指定します。
これにより、プル サブスクリプションがパブリッシャーに登録されます。
即時更新プッシュ サブスクリプションを作成する
パブリッシャーで、sp_helppublicationを実行して、パブリケーションが即時更新 サブスクリプションをサポートしていることを確認します。
- 結果セット内の
allow_sync_tran
の値が1
場合、パブリケーションは即時更新サブスクリプションをサポートします。 - 結果セット内の
allow_sync_tran
の値が0
されている場合は、即時更新サブスクリプションを有効にしてパブリケーションを再作成する必要があります。
- 結果セット内の
パブリッシャーで、sp_helppublicationを実行して、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。
- 結果セット内の
allow_push
の値が1
場合、パブリケーションはプッシュ サブスクリプションをサポートします。 -
allow_push
の値が0
の場合は、sp_changepublicationを実行し、@property
のallow_push
と@value
のtrue
を指定します。
- 結果セット内の
パブリッシャーで、 sp_addsubscriptionを実行します。
@update_mode
には、@publication
、@subscriber
、@destination_db
、および次のいずれかの値を指定します。-
sync tran
- 即時更新のサポートを有効にします。 -
failover
- フェールオーバー オプションとしてキュー更新を使用した即時更新のサポートを有効にします。
注
-
failover
では、キュー処理可能な更新サブスクリプションに対しても、パブリケーションが可能であることが必要です。
パブリッシャーで、 sp_addpushsubscription_agentを実行します。 次のパラメーターを指定します。
-
@subscriber
、@subscriber_db
、および@publication
。 - ディストリビューターのディストリビューション エージェントが
@job_login
と@job_password
に対して実行される Windows 資格情報。
注
-
Windows 統合認証を使用して行われる接続は、常に、
@job_login
と@job_password
で指定された Windows 資格情報を使用して行われます。 ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビューターにローカル接続します。 既定では、エージェントは Windows 統合認証を使用してサブスクライバーに接続します。
* (Optional) A value of `0` for `@subscriber_security_mode` and the SQL Server login information for `@subscriber_login` and `@subscriber_password`, if you need to use SQL Server Authentication when connecting to the Subscriber.
* A schedule for the Distribution Agent job for this subscription.
サブスクリプション データベースのサブスクライバーで、 sp_link_publicationを実行します。
@publisher
、@publication
、@publisher_db
のパブリケーション データベースの名前、および@security_mode
に次のいずれかの値を指定します。-
0
- パブリッシャーで更新を行うときは、SQL Server 認証を使用します。 このオプションでは、@login
と@password
のパブリッシャーで有効なログインを指定する必要があります。 -
1
- パブリッシャーに接続するときにサブスクライバーで変更を加えるユーザーのセキュリティ コンテキストを使用します。 このセキュリティ モードに関連する制限については、 sp_link_publication を参照してください。 -
2
- sp_addlinkedserverを使用して作成された既存のユーザー定義のリンク サーバー ログインを使用します。
-
キューされた更新のプル サブスクリプションを作成する
パブリッシャーで、sp_helppublicationを実行して、パブリケーションがキュー更新 サブスクリプションをサポートしていることを確認します。
- 結果セット内の
allow_queued_tran
の値が1
場合、パブリケーションは即時更新サブスクリプションをサポートします。 - 結果セット内の
allow_queued_tran
の値が0
されている場合は、キュー更新サブスクリプションを有効にしてパブリケーションを再作成する必要があります。
- 結果セット内の
パブリッシャーで、sp_helppublicationを実行して、パブリケーションがプル サブスクリプションをサポートしていることを確認します。
- 結果セット内の
allow_pull
の値が1
場合、パブリケーションはプル サブスクリプションをサポートします。 -
allow_pull
の値が0
の場合は、sp_changepublicationを実行し、@property
のallow_pull
と@value
のtrue
を指定します。
- 結果セット内の
サブスクライバーで、 sp_addpullsubscriptionを実行します。
@publisher
と@publication
を指定し、@update_mode
に次のいずれかの値を指定します。-
queued tran
- キュー更新のサブスクリプションを有効にします。 -
queued failover
- フェールオーバー オプションとして即時更新によるキュー更新のサポートを有効にします。
注
-
queued failover
では、パブリケーションでサブスクリプションの即時更新を有効にしておく必要があります。 即時更新にフェールオーバーするには、 sp_link_publication を使用して、サブスクライバーでの変更がパブリッシャーにレプリケートされる資格情報を定義する必要があります。
サブスクライバーで、 sp_addpullsubscription_agentを実行します。 次のパラメーターを指定します。
-
@publisher、
@publisher_db
、および@publication
。 - サブスクライバーのディストリビューション エージェントが
@job_login
および@job_password
に対して実行される Windows 資格情報。
注
-
@publisher、
Windows 統合認証を使用して行われる接続は、常に、
@job_login
と@job_password
で指定された Windows 資格情報を使用して行われます。 ディストリビューション エージェントは、常に Windows 統合認証を使用してサブスクライバーにローカル接続を行います。 既定では、エージェントは Windows 統合認証を使用してディストリビューターに接続します。
* (Optional) A value of `0` for `@distributor_security_mode` and the SQL Server login information for `@distributor_login` and `@distributor_password`, if you need to use SQL Server Authentication when connecting to the Distributor.
* A schedule for the Distribution Agent job for this subscription.
- パブリッシャーで 、sp_addsubscriber を実行してパブリッシャーにサブスクライバーを登録し、
@publication
、@subscriber
、@destination_db
、@subscription_type
の pull の値、および手順 3 で@update_mode
に指定した値と同じ値を指定します。
これにより、プル サブスクリプションがパブリッシャーに登録されます。
キューに入れた更新のプッシュ サブスクリプションを作成するには
パブリッシャーで、sp_helppublicationを実行して、パブリケーションがキュー更新 サブスクリプションをサポートしていることを確認します。
- 結果セットのallow_queued_tranの値が 1 の場合、パブリケーションは即時更新サブスクリプションをサポートします。
- 結果セットのallow_queued_tranの値が 0 の場合は、キュー更新サブスクリプションを有効にしてパブリケーションを再作成する必要があります。 詳細については、「方法: トランザクション パブリケーションのサブスクリプションの更新を有効にする (レプリケーション Transact-SQL プログラミング)」を参照してください。
パブリッシャーで、sp_helppublicationを実行して、パブリケーションがプッシュ サブスクリプションをサポートしていることを確認します。
- 結果セット内の
allow_push
の値が1
場合、パブリケーションはプッシュ サブスクリプションをサポートします。 -
allow_push
の値が0
の場合、sp_changepublicationを実行し、@property
とtrue
についてallow_pushを指定します。
- 結果セット内の
パブリッシャーで、 sp_addsubscriptionを実行します。
@update_mode
には、@publication
、@subscriber
、@destination_db
、および次のいずれかの値を指定します。-
queued tran
- キュー更新のサブスクリプションを有効にします。 -
queued failover
- フェールオーバー オプションとして即時更新によるキュー更新のサポートを有効にします。
注
-
キューに登録されたフェールオーバー オプションでは、サブスクリプションを即時更新するためにパブリケーションも有効になっている必要があります。 即時更新にフェールオーバーするには、 sp_link_publication を使用して、サブスクライバーでの変更がパブリッシャーにレプリケートされる資格情報を定義する必要があります。
パブリッシャーで、 sp_addpushsubscription_agentを実行します。 次のパラメーターを指定します。
-
@subscriber
、@subscriber_db
、および@publication
。 - ディストリビューターのディストリビューション エージェントが
@job_login
と@job_password
に対して実行される Windows 資格情報。
注
-
Windows 統合認証を使用して行われる接続は、常に、
@job_login
と@job_password
で指定された Windows 資格情報を使用して行われます。 ディストリビューション エージェントは、常に Windows 統合認証を使用してディストリビューターにローカル接続します。 既定では、エージェントは Windows 統合認証を使用してサブスクライバーに接続します。
* (Optional) A value of `0` for `@subscriber_security_mode` and the SQL Server login information for `@subscriber_login` and `@subscriber_password`, if you need to use SQL Server Authentication when connecting to the Subscriber.
* A schedule for the Distribution Agent job for this subscription.
例
この例では、即時更新サブスクリプションをサポートするパブリケーションへの即時更新プル サブスクリプションを作成します。 ログインとパスワードの値は、sqlcmd スクリプト変数を使用して実行時に指定されます。
注
このスクリプトでは、sqlcmd スクリプト変数を使用します。 これらは $(MyVariable)
の形式です。 コマンド ラインと SQL Server Management Studio でスクリプト変数を使用する方法については、「レプリケーション システム ストアド プロシージャの概念」トピックの「レプリケーション スクリプトの実行」セクションを参照してください。
-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks2008R2';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);
-- At the subscription database, create a pull subscription to a transactional
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB,
@update_mode = N'failover',
@subscription_type = N'pull';
-- Add an agent job to synchronize the pull subscription,
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@job_login = @login,
@job_password = @password;
-- Add a Windows Authentication-based linked server that enables the
-- Subscriber-side triggers to make updates at the Publisher.
EXEC sp_link_publication
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB,
@security_mode = 0,
@login = @login,
@password = @password;
GO
USE AdventureWorks2008R2;
GO
-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriptionDB = N'AdventureWorks2008R2Replica';
SET @subscriber = $(SubServer);
-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'pull',
@update_mode = N'failover';
GO
キュー更新の競合解決オプションの設定 (SQL Server Management Studio)
[パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [サブスクリプション オプション] ページで、キュー更新サブスクリプションをサポートするパブリケーションの競合解決オプションを設定します。 このダイアログ ボックスへのアクセスの詳細については、「 パブリケーションのプロパティの表示と変更」を参照してください。
キュー更新の競合解決オプションを設定するには
- [パブリケーションのプロパティ - <Publication>] ダイアログ ボックスの [サブスクリプション オプション] ページで、[競合解決ポリシー] オプションに次のいずれかの値を選択します。
- パブリッシャーの変更を保持する
- サブスクライバーの変更を保持する
- サブスクリプションを再初期化する
- OK をクリックします。
こちらもご覧ください
パブリケーションを作成する
トランザクション レプリケーションの更新可能なサブスクリプション
sqlcmd でのスクリプト変数の使用