パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)

パブリケーションは、レプリケーションのストアド プロシージャを使用してプログラムから作成できます。どのストアド プロシージャを使用するかは、作成するパブリケーションの種類によって異なります。

セキュリティに関する注意セキュリティに関する注意

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

スナップショット パブリケーションまたはトランザクション パブリケーションを作成するには

  1. パブリッシャのパブリケーション データベースで sp_replicationdboption (Transact-SQL) を実行し、スナップショット レプリケーションまたはトランザクション レプリケーションを使用して現在のデータベースのパブリケーションを有効にします。

  2. トランザクション パブリケーションの場合は、パブリケーション データベースのログ リーダー エージェント ジョブが存在するかどうかを確認します。スナップショット パブリケーションの場合、この手順は不要です。

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

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

    • 結果セットが空の場合は、ログ リーダー エージェント ジョブを作成します。パブリッシャで、sp_addlogreader_agent (Transact-SQL) を実行します。エージェントの実行に使用される Microsoft Windows 資格情報を @job_name@password に指定します。エージェントがパブリッシャに接続する際に SQL Server 認証を使用する場合、さらに @publisher_security_mode0 を指定し、@publisher_login@publisher_password に MicrosoftSQL Server ログイン情報を指定する必要があります。手順 3. に進みます。

  3. パブリッシャで、sp_addpublication (Transact-SQL) を実行します。@publication にパブリケーション名を指定し、@repl_freq パラメータに snapshot (スナップショット パブリケーションの場合) または continuous (トランザクション パブリケーションの場合) を指定します。必要に応じて、その他のパブリケーション オプションを指定してください。これにより、パブリケーションが定義されます。

    注意注意

    パブリケーション名に、次の文字を含めることはできません。

    % * [ ] | : " ? \ / < >

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

    セキュリティに関する注意セキュリティに関する注意

    リモート ディストリビュータを使用してパブリッシャを構成する場合、job_login および job_password を含め、すべてのパラメータの値がディストリビュータにプレーン テキストとして送信されます。このストアド プロシージャを実行する前に、パブリッシャとそのリモート ディストリビュータ間の接続を暗号化する必要があります。詳細については、「SQL Server への接続の暗号化」を参照してください。

  5. パブリケーションにアーティクルを追加します。詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  6. スナップショット エージェント ジョブを起動して、このパブリケーションの初期スナップショットを生成します。詳細については、「初期スナップショットを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

マージ パブリケーションを作成するには

  1. パブリッシャで sp_replicationdboption (Transact-SQL) を実行し、マージ レプリケーションを使用して現在のデータベースのパブリケーションを有効にします。

  2. パブリッシャ側のパブリケーション データベースに対して、sp_addmergepublication (Transact-SQL) を実行します。@publication にパブリケーションの名前を指定し、必要に応じて他のパブリケーション オプションを指定します。これにより、パブリケーションが定義されます。

    注意注意

    パブリケーション名に、次の文字を含めることはできません。

    % * [ ] | : " ? \ / < >

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

    セキュリティに関する注意セキュリティに関する注意

    リモート ディストリビュータを使用してパブリッシャを構成する場合、job_login および job_password を含め、すべてのパラメータの値がディストリビュータにプレーン テキストとして送信されます。このストアド プロシージャを実行する前に、パブリッシャとそのリモート ディストリビュータ間の接続を暗号化する必要があります。詳細については、「SQL Server への接続の暗号化」を参照してください。

  4. パブリケーションにアーティクルを追加します。詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  5. スナップショット エージェント ジョブを起動して、このパブリケーションの初期スナップショットを生成します。詳細については、「初期スナップショットを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

使用例

次の例では、トランザクション パブリケーションを作成します。スナップショット エージェント ジョブおよびログ リーダー エージェント ジョブの作成に必要な Windows 資格情報は、スクリプト変数を使用して渡しています。

-- 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".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot 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 new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- 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

次の例では、マージ パブリケーションを作成します。スナップショット エージェント ジョブの作成に必要な Windows 資格情報は、スクリプト変数を使用して渡しています。

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. 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 merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks.',
  @publication_compatibility_level  = N'90RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO