パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)
パブリケーションは、レプリケーションのストアド プロシージャを使用してプログラムから作成できます。どのストアド プロシージャを使用するかは、作成するパブリケーションの種類によって異なります。
セキュリティに関する注意 |
---|
可能な場合は、Windows 認証を使用します。可能であれば、セキュリティ資格情報の入力を、ユーザーに対して実行時に求めるようにしてください。スクリプト ファイルに資格情報を格納する必要がある場合、不正なアクセスを防ぐために、ファイルをセキュリティ保護する必要があります。 |
スナップショット パブリケーションまたはトランザクション パブリケーションを作成するには
パブリッシャのパブリケーション データベースで sp_replicationdboption (Transact-SQL) を実行し、スナップショット レプリケーションまたはトランザクション レプリケーションを使用して現在のデータベースのパブリケーションを有効にします。
トランザクション パブリケーションの場合は、パブリケーション データベースのログ リーダー エージェント ジョブが存在するかどうかを確認します。スナップショット パブリケーションの場合、この手順は不要です。
パブリケーション データベースのログ リーダー エージェント ジョブが存在する場合は、手順 3. に進みます。
パブリッシュされたデータベース用のログ リーダー エージェント ジョブが存在するかどうかわからない場合は、パブリッシャ側のパブリケーション データベースに対して sp_helplogreader_agent (Transact-SQL) を実行します。
結果セットが空の場合は、ログ リーダー エージェント ジョブを作成します。パブリッシャで、sp_addlogreader_agent (Transact-SQL) を実行します。エージェントの実行に使用される Microsoft Windows 資格情報を @job_name と @password に指定します。エージェントがパブリッシャに接続する際に SQL Server 認証を使用する場合、さらに @publisher_security_mode に 0 を指定し、@publisher_login と @publisher_password に Microsoft SQL Server ログイン情報を指定する必要があります。手順 3. に進みます。
パブリッシャで、sp_addpublication (Transact-SQL) を実行します。@publication にパブリケーション名を指定し、@repl_freq パラメータに snapshot (スナップショット パブリケーションの場合) または continuous (トランザクション パブリケーションの場合) を指定します。必要に応じて、その他のパブリケーション オプションを指定してください。これにより、パブリケーションが定義されます。
注 パブリケーション名に、次の文字を含めることはできません。
% * [ ] | : " ? \ / < >
パブリッシャで、sp_addpublication_snapshot (Transact-SQL) を実行します。手順 3. で使用したパブリケーション名を @publication に指定し、スナップショット エージェントを実行するときに使用される Windows 資格情報を @snapshot_job_name と @password に指定します。エージェントがパブリッシャに接続する際に SQL Server 認証を使用する場合、さらに @publisher_security_mode に 0 を指定し、@publisher_login と @publisher_password に SQL Server ログイン情報を指定する必要があります。これにより、パブリケーション用のスナップショット エージェント ジョブが作成されます。
セキュリティに関する注意 リモート ディストリビュータを使用してパブリッシャを構成する場合、job_login および job_password を含め、すべてのパラメータの値がディストリビュータにプレーン テキストとして送信されます。このストアド プロシージャを実行する前に、パブリッシャとそのリモート ディストリビュータ間の接続を暗号化する必要があります。詳細については、「SQL Server への接続の暗号化」を参照してください。
パブリケーションにアーティクルを追加します。詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
スナップショット エージェント ジョブを起動して、このパブリケーションの初期スナップショットを生成します。詳細については、「初期スナップショットを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
マージ パブリケーションを作成するには
パブリッシャで sp_replicationdboption (Transact-SQL) を実行し、マージ レプリケーションを使用して現在のデータベースのパブリケーションを有効にします。
パブリッシャ側のパブリケーション データベースに対して、sp_addmergepublication (Transact-SQL) を実行します。@publication にパブリケーションの名前を指定し、必要に応じて他のパブリケーション オプションを指定します。これにより、パブリケーションが定義されます。
注 パブリケーション名に、次の文字を含めることはできません。
% * [ ] | : " ? \ / < >
パブリッシャで、sp_addpublication_snapshot (Transact-SQL) を実行します。手順 2. で使用したパブリケーション名を @publication に指定し、スナップショット エージェントを実行するときに使用される Windows 資格情報を @snapshot_job_name と @password に指定します。エージェントがパブリッシャに接続する際に SQL Server 認証を使用する場合、さらに @publisher_security_mode に 0 を指定し、@publisher_login と @publisher_password に SQL Server ログイン情報を指定する必要があります。これにより、パブリケーション用のスナップショット エージェント ジョブが作成されます。
セキュリティに関する注意 リモート ディストリビュータを使用してパブリッシャを構成する場合、job_login および job_password を含め、すべてのパラメータの値がディストリビュータにプレーン テキストとして送信されます。このストアド プロシージャを実行する前に、パブリッシャとそのリモート ディストリビュータ間の接続を暗号化する必要があります。詳細については、「SQL Server への接続の暗号化」を参照してください。
パブリケーションにアーティクルを追加します。詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
スナップショット エージェント ジョブを起動して、このパブリケーションの初期スナップショットを生成します。詳細については、「初期スナップショットを作成する方法 (レプリケーション 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'AdventureWorks2008R2';
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'AdventureWorks2008R2';
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 [AdventureWorks2008R2]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks2008R2.',
@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