初期スナップショットを作成する方法 (レプリケーション Transact-SQL プログラミング)

初期スナップショットは、スナップショット エージェント ジョブを作成、実行するか、スナップショット エージェントの実行可能ファイルをバッチ ファイルから実行することによってプログラムから作成できます。生成された初期スナップショットは、サブスクリプションの初回同期時にサブスクライバに転送されて適用されます。スナップショット エージェントをコマンド プロンプトまたはバッチ ファイルから実行する場合、既存のスナップショットが無効になるたびにエージェントを再実行する必要があります。

パラメータ化されたフィルタを使用するマージ パブリケーションでは、2 つの部分から成るスナップショットが必要です。詳細については、「パラメータ化されたフィルタを使用してマージ レプリケーションのスナップショットを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

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

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

スナップショット エージェント ジョブを作成、実行して初期スナップショットを生成するには

  1. スナップショット パブリケーション、トランザクション パブリケーション、またはマージ パブリケーションを作成します。詳細については、「パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  2. sp_addpublication_snapshot (Transact-SQL) を実行します。このとき、@publication パラメータを指定したうえで、次のパラメータを指定します。

    • ディストリビュータで実行するスナップショット エージェントが使用するための Windows 認証の資格情報を @job_login に指定します。

    • Windows 資格情報に対応するパスワードを @job_password に指定します。

    • (省略可) エージェントからパブリッシャへの接続に SQL Server 認証を使用する場合は、@publisher_security_mode の値に 0 を指定します。この場合は、さらに、@publisher_login および @publisher_password に対して、SQL Server 認証のログイン情報を指定する必要があります。

    • (省略可) スナップショット エージェント ジョブの同期スケジュールを指定します。詳細については、「同期スケジュールを指定する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

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

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

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

  4. パブリッシャのパブリケーション データベースで sp_startpublication_snapshot (Transact-SQL) を実行します。このとき、手順 1. の @publication を指定します。

スナップショット エージェントを実行して初期スナップショットを生成するには

  1. スナップショット パブリケーション、トランザクション パブリケーション、またはマージ パブリケーションを作成します。詳細については、「パブリケーションを作成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

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

  3. コマンド プロンプトまたはバッチ ファイルから、次のコマンド ライン引数を指定して snapshot.exe を実行し、レプリケーション スナップショット エージェントを起動します。

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

    SQL Server 認証を使用する場合は、次の引数も指定する必要があります。

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

使用例

次の例では、トランザクション パブリケーションを作成し、sqlcmd スクリプト変数を使用して、新しいパブリケーション用にスナップショット エージェント ジョブを追加します。ジョブを開始するコードも含まれています。

-- 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'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);

USE [AdventureWorks2008R2]

-- Enable transactional and 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 security mode used when connecting to the Publisher.
  @publisher_security_mode = 1;

-- Create new transactional publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addpublication 
  @publication = @publication, 
  @description = N'transactional publication';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

次の例では、マージ パブリケーションを作成し、sqlcmd 変数を使用して、そのパブリケーション用のスナップショット エージェント ジョブを追加します。ジョブを開始するコードも含まれています。

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

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.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname=N'merge publish',
  @value = N'true';

-- Create new merge publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication.';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

次のコマンド ライン引数は、スナップショット エージェントを起動して、マージ パブリケーション用のスナップショットを生成します。

注意

読みやすくするために、改行が追加されています。バッチ ファイルの場合、コマンドは 1 行で入力する必要があります。

REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks2008R2 
SET Publication=AdvWorksSalesOrdersMerge 

REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE" -Publication %Publication% 
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB% 
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1