手動によるサブスクリプションの初期化

適用対象: SQL Server Azure SQL Managed Instance

このトピックでは、SQL Server で、SQL Server Management Studio または Transact-SQL を使用して、サブスクリプションを手動で初期化する方法について説明します。 サブスクリプションを初期化する場合、一般には、初期スナップショットが使用されます。ただし、スキーマおよび初期データがサブスクライバー側に既に存在していれば、パブリケーションのサブスクリプションをスナップショットを使用せずに初期化できます。

始める前に

制限事項と制約事項

  • データとスキーマをサブスクライバーにコピーしてからサブスクリプションが手動で初期化されるまでの間に、トランザクション レプリケーションを使ってパブリッシュされたデータベース上で処理が実行されると、この処理による変更がサブスクライバーにレプリケートされない場合があります。

SQL Server Management Studio を使用する

スキーマ (通常はデータも含まれます) をサブスクリプション データベースにコピーすることによって、パブリケーションに対するサブスクリプションを手動で初期化します。 スキーマとデータは、パブリケーション データベースと一致している必要があります。 その後、サブスクリプションの新規作成ウィザードの [サブスクリプションの初期化] ページで、サブスクリプションにスキーマとデータが必要ないことを指定します。 このウィザードへのアクセスの詳細については、「 スナップショットを使用しないトランザクション サブスクリプションの初期化 」および「 プル サブスクリプションの作成を使用して、サブスクリプションを手動で初期化する方法について説明します。

初めてサブスクリプションを同期させたときに、レプリケーションに必要なオブジェクトとメタデータがサブスクリプション データベースにコピーされます。

パブリケーションに対するサブスクリプションを手動で初期化するには

  1. スキーマとデータがサブスクリプション データベースにコピーされていることを確認します。

  2. サブスクリプションの新規作成ウィザードの [サブスクリプションの初期化] ページで、 [初期化] チェック ボックスをオフにします。 この操作を、レプリケーション オブジェクトとメタデータのみをコピーする必要がある各サブスクリプションに対して行います。

Transact-SQL の使用

サブスクリプションは、レプリケーションのストアド プロシージャを使用して手動で初期化できます。

トランザクション パブリケーションのプル サブスクリプションを手動で初期化するには

  1. スキーマとデータがサブスクリプション データベースに存在することを確認します。 詳細については、「 スナップショットを使用しないトランザクション サブスクリプションの初期化を使用して、サブスクリプションを手動で初期化する方法について説明します。

  2. パブリッシャー側のパブリケーション データベースに対して、 sp_addsubscriptionを実行します。 @publication@subscriberを指定し、 @destination_db@subscription_type@sync_typeに、それぞれ、パブリッシュされたデータを格納するサブスクライバー側データベースの名前、 pullreplication support onlyを指定します。 詳細については、「 プル サブスクリプションの作成」をご覧ください。

  3. サブスクライバーで、 sp_addpullsubscriptionを実行します。 サブスクリプションの更新については、「 Create an Updatable Subscription to a Transactional Publication」を参照してください。

  4. サブスクライバーで、 sp_addpullsubscription_agentを実行します。 詳細については、「 プル サブスクリプションの作成」をご覧ください。

  5. ディストリビューション エージェントを起動して、パブリッシャーからレプリケーション オブジェクトを転送し、最新の変更をダウンロードします。 詳細については、「 Synchronize a Pull Subscription」をご覧ください。

トランザクション パブリケーションのプッシュ サブスクリプションを手動で初期化するには

  1. スキーマとデータがサブスクリプション データベースに存在することを確認します。 詳細については、「 スナップショットを使用しないトランザクション サブスクリプションの初期化を使用して、サブスクリプションを手動で初期化する方法について説明します。

  2. パブリッシャー側のパブリケーション データベースに対して、 sp_addsubscriptionを実行します。 @destination_db@subscription_type@sync_typeに、それぞれ、パブリッシュされたデータを格納するサブスクライバー側データベースの名前、 pushreplication support onlyを指定します。 サブスクリプションの更新については、「 Create an Updatable Subscription to a Transactional Publication」を参照してください。

  3. パブリッシャー側のパブリケーション データベースに対して、 sp_addpushsubscription_agentを実行します。 詳細については、「 プッシュ サブスクリプションの作成」をご覧ください。

  4. ディストリビューション エージェントを起動して、パブリッシャーからレプリケーション オブジェクトを転送し、最新の変更をダウンロードします。 詳細については、「 プッシュ サブスクリプションの同期」をご覧ください。

マージ パブリケーションのプル サブスクリプションを手動で初期化するには

  1. スキーマとデータがサブスクリプション データベースに存在することを確認します。 これは、サブスクライバーでパブリケーション データベースのバックアップを復元することによって行います。

  2. パブリッシャーで sp_addmergesubscriptionを実行します。 @publication@subscriber@subscriber_dbを指定し、 @subscription_typepullを指定します。 これにより、プル サブスクリプションが登録されます。

  3. パブリッシュされたデータを格納するサブスクライバーのデータベースで sp_addmergepullsubscriptionを実行します。 @sync_type には、 noneを指定します。

  4. サブスクライバーで、 sp_addmergepullsubscription_agentを実行します。 詳細については、「 プル サブスクリプションの作成」をご覧ください。

  5. マージ エージェントを起動して、パブリッシャーからレプリケーション オブジェクトを転送し、最新の変更をダウンロードします。 詳細については、「 Synchronize a Pull Subscription」をご覧ください。

マージ パブリケーションのプッシュ サブスクリプションを手動で初期化するには

  1. スキーマとデータがサブスクリプション データベースに存在することを確認します。 これは、サブスクライバーでパブリケーション データベースのバックアップを復元することによって行います。

  2. パブリッシャー側のパブリケーション データベースに対し、 sp_addmergesubscriptionを実行します。 @subscriber_db@subscription_type@sync_typeに、それぞれ、パブリッシュされたデータを格納するサブスクライバー側データベースの名前、 pushnoneを指定します。

  3. パブリッシャー側のパブリケーション データベースに対して、 sp_addmergepushsubscription_agentを実行します。 詳細については、「 プッシュ サブスクリプションの作成」をご覧ください。

  4. マージ エージェントを起動して、パブリッシャーからレプリケーション オブジェクトを転送し、最新の変更をダウンロードします。 詳細については、「 プッシュ サブスクリプションの同期」をご覧ください。