トランザクション パブリケーションの更新可能なサブスクリプションの有効化

このトピックでは、SQL Server Management Studioまたは Transact-SQL を使用して、SQL Server 2014 でトランザクション パブリケーションのサブスクリプションの更新を有効にする方法について説明します。

注意

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

はじめに

セキュリティ

可能であれば、実行時、ユーザーに対してセキュリティ資格情報の入力を要求します。 スクリプト ファイルに資格情報を格納する必要がある場合は、不正アクセスを防ぐために、ファイルを保護します。

SQL Server Management Studio を使用する

パブリケーションの新規作成ウィザードの [パブリケーションの種類] ページで、トランザクション パブリケーションの更新サブスクリプションを有効にします。 このウィザードの使用の詳細については、「パブリケーションの作成」を参照してください。 パブリケーションの作成後は、更新サブスクリプションを有効にすることはできません。

更新サブスクリプションを使用するには、サブスクリプションの新規作成ウィザードでオプションも構成する必要があります。 詳しくは、「 トランザクション パブリケーションの更新可能なサブスクリプションの作成」をご覧ください。

更新サブスクリプションを有効にするには

  1. パブリケーションの新規作成ウィザードの [パブリケーションの種類] ページで、 [更新可能なサブスクリプションを含むトランザクション パブリケーション]を選択します。

  2. [エージェント セキュリティ] ページで、スナップショット エージェントおよびログ リーダー エージェントの他に、キュー リーダー エージェントのセキュリティ設定を指定します。 キュー リーダー エージェントが実行されるアカウントに必要な権限の詳細については、「 Replication Agent Security Model」を参照してください。

    注意

    即時更新サブスクリプションのみを使用する場合でも、キュー リーダー エージェントは構成されます。

Transact-SQL の使用

レプリケーション ストアド プロシージャを使用してプログラムからトランザクション パブリケーションを作成するときに、即時更新サブスクリプションまたはキュー更新サブスクリプションを有効にできます。

即時更新サブスクリプションをサポートするパブリケーションを作成するには

  1. 必要に応じて、パブリケーション データベース用のログ リーダー エージェント ジョブを作成します。

    • パブリケーション データベース用のログ リーダー エージェント ジョブが既に存在する場合、手順 2. に進みます。

    • パブリッシュされたデータベースに対してログ リーダー エージェント ジョブが存在するかどうかわからない場合は、パブリケーション データベースのパブリッシャーで sp_helplogreader_agent (Transact-SQL) を実行します。 結果セットが空の場合、ログ リーダー エージェント ジョブを作成する必要があります。

    • パブリッシャーで、 sp_addlogreader_agent (Transact-SQL) を実行します。 @job_nameと @password に対してエージェントを実行する Microsoft Windows 資格情報 指定します。 エージェントがパブリッシャーに接続するときにSQL Server認証を使用する場合は、@publisher_security_modeに値 0 を指定し、@publisher_loginと@publisher_passwordの Microsoft SQL Server ログイン情報も指定する必要があります。

  2. パラメーター @allow_sync_tranに true の値を指定して、sp_addpublication実行 (Transact-SQL) します。

  3. パブリッシャーで sp_addpublication_snapshot (Transact-SQL) を実行します。 @publicationの手順 2 で使用するパブリケーション名と、@job_nameと@passwordに対してスナップショット エージェントを実行する Windows 資格情報を指定します。 エージェントがパブリッシャーに接続するときにSQL Server認証を使用する場合は、@publisher_security_modeに値 0 を指定し、@publisher_loginと@publisher_passwordのSQL Serverログイン情報も指定する必要があります。 これにより、パブリケーション用のスナップショット エージェント ジョブが作成されます。

  4. パブリケーションにアーティクルを追加します。 詳しくは、「 アーティクルを定義」をご覧ください。

  5. サブスクライバーで、このパブリケーションに対する更新サブスクリプションを作成します。 詳しくは、「 トランザクション パブリケーションの更新可能なサブスクリプションの作成」をご覧ください。

キュー更新サブスクリプションをサポートするパブリケーションを作成するには

  1. 必要に応じて、パブリケーション データベース用のログ リーダー エージェント ジョブを作成します。

    • パブリケーション データベース用のログ リーダー エージェント ジョブが既に存在する場合、手順 2. に進みます。

    • パブリッシュされたデータベースに対してログ リーダー エージェント ジョブが存在するかどうかわからない場合は、パブリケーション データベースのパブリッシャーで sp_helplogreader_agent (Transact-SQL) を実行します。 結果セットが空の場合、ログ リーダー エージェント ジョブを作成する必要があります。

    • パブリッシャーで、 sp_addlogreader_agent (Transact-SQL) を実行します。 エージェントが@job_nameおよび@passwordに対して実行される Windows 資格情報を指定します。 エージェントがパブリッシャーに接続するときにSQL Server認証を使用する場合は、@publisher_security_modeに値 0 を指定し、@publisher_loginと@publisher_passwordのSQL Serverログイン情報も指定する必要があります。

  2. 必要に応じて、ディストリビューター用のキュー リーダー エージェント ジョブを作成します。

    • ディストリビューション データベース用のキュー リーダー エージェント ジョブが既に存在する場合、手順 3. に進みます。

    • ディストリビューション データベースにキュー リーダー エージェント ジョブが存在するかどうかわからない場合は、ディストリビューション データベースのディストリビューターで sp_helpqreader_agent (Transact-SQL) を実行します。 結果セットが空の場合、キュー リーダー エージェント ジョブを作成する必要があります。

    • ディストリビューターで、 sp_addqreader_agent (Transact-SQL) を実行します。 エージェントが@job_nameおよび@passwordに対して実行される Windows 資格情報を指定します。 これらの資格情報は、キュー リーダー エージェントがパブリッシャーとサブスクライバーに接続するときに使用されます。 詳細については、「 レプリケーション エージェント セキュリティ モデル」を参照してください。

  3. sp_addpublication実行 (Transact-SQL)、パラメーター @allow_queued_tranに true@conflict_policypub winssub reinit、または sub winsの値を指定します。

  4. パブリッシャーで sp_addpublication_snapshot (Transact-SQL) を実行します。 @publicationの手順 3 で使用するパブリケーション名と、@snapshot_job_nameと@passwordに対してスナップショット エージェントを実行する Windows 資格情報を指定します。 エージェントがパブリッシャーに接続するときにSQL Server認証を使用する場合は、@publisher_security_modeに値 0 を指定し、@publisher_loginと@publisher_passwordのSQL Serverログイン情報も指定する必要があります。 これにより、パブリケーション用のスナップショット エージェント ジョブが作成されます。

  5. パブリケーションにアーティクルを追加します。 詳しくは、「 アーティクルを定義」をご覧ください。

  6. サブスクライバーで、このパブリケーションに対する更新サブスクリプションを作成します。 詳しくは、「 トランザクション パブリケーションの更新可能なサブスクリプションの作成」をご覧ください。

キュー更新サブスクリプションが可能なパブリケーションの競合ポリシーを変更するには

  1. パブリッシャー側のパブリケーション データベースで、 sp_changepublication (Transact-SQL) を実行します。 @propertyに conflict_policy の値を指定し、@valuepub winssub reinit、または sub wins の競合ポリシー モードを指定します。

例 (Transact-SQL)

この例では、即時更新プル サブスクリプションとキュー更新プル サブスクリプションの両方がサポートされるパブリケーションを作成します。

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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".

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2012'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks]
-- Enable transactional replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
  -- Explicitly declare the related default properties 
    @conflict_policy = N'pub wins';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2012]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO

参照

キュー更新の競合解決オプションの設定 (SQL Server Management Studio)
トランザクション レプリケーションで使用するパブリケーションの種類
Updatable Subscriptions for Transactional Replication
パブリケーションを作成する
トランザクション パブリケーションの更新可能なサブスクリプションの作成
Updatable Subscriptions for Transactional Replication
sqlcmd でのスクリプト変数の使用