次の方法で共有


スナップショットなしでトランザクション サブスクリプションを初期化する

既定では、トランザクション パブリケーションへのサブスクリプションはスナップショットを使用して初期化されます。スナップショット はスナップショット エージェントによって生成され、ディストリビューション エージェントによって適用されます。 大規模な初期データセットを含むシナリオなど、一部のシナリオでは、別の方法を使用してサブスクリプションを初期化することをお勧めします。 サブスクライバーを初期化するその他の方法は次のとおりです。

  • バックアップの指定。 サブスクライバーでバックアップを復元し、ディストリビューション エージェントが必要なレプリケーション メタデータとシステム プロシージャをコピーします。 バックアップを使用した初期化はサブスクライバーにデータを配信する最も高速な方法であり、最近のバックアップは、バックアップを使用した初期化のためにパブリケーションが有効になった後に作成された場合に使用できるため便利です。

  • データベースのアタッチなど、別のメカニズムを使用して初期データセットをサブスクライバーにコピーする。 正しいデータとスキーマがサブスクライバーにあることを確認し、ディストリビューション エージェントが必要なメタデータとシステム プロシージャをコピーする必要があります。

バックアップ付きのサブスクリプションを開始する

バックアップにはデータベース全体が含まれます。そのため、各サブスクリプション データベースには、初期化時にパブリケーション データベースの完全なコピーが含まれます。

  • バックアップには、パブリケーションのアーティクルとして指定されていないテーブルが含まれています。

  • テーブルに行フィルターまたは列フィルターが指定されている場合でも、バックアップにはすべてのデータが含まれます。

バックアップの復元後に不要なオブジェクトやデータを削除するのは、管理者またはアプリケーションの責任です。 以降の同期では、データ変更がアーティクルとして指定されたテーブルに適用され、変更が指定したフィルター条件を満たしている場合にのみレプリケートされます。

バックアップを復元するときは、サブスクライバーが自動的に同期する場合は、バックアップがパブリッシャーから取得されていることを確認する必要があります。 バックアップのログ シーケンス番号 (LSN) の値 (同期を開始するポイントの設定に使用されます) は、パブリッシャーに固有です。

バックアップを使用してサブスクリプションを初期化するには

バックアップを使用してサブスクリプションを初期化するには、最初にパブリケーションの作成時にオプションを有効にしてから、サブスクリプションを作成するときにいくつかのオプションの値を指定する必要があります。 パブリケーションは、パブリケーションの新規作成ウィザードを使用するか、プログラムで有効にすることができます。 ただし、サブスクリプション オプションに必要な値は、プログラムでのみ指定できます。

スナップショットを使用せずにサブスクリプションを初期化する場合、パブリッシャーで SQL Server サービスを実行するアカウントには、ディストリビューターのスナップショット フォルダーに対する書き込みアクセス許可が必要です。 アクセス許可の詳細については、「 レプリケーション エージェントのセキュリティ モデル」を参照してください。

バックアップの適合性の確認

バックアップは、バックアップの実行後に発生するすべてのトランザクションがディストリビューターに格納されている場合にサブスクライバーを初期化するのに適しています。 バックアップが適切でない場合、レプリケーションにエラー メッセージが表示されます。

バックアップが使用に適していることを確認するには、次のガイドラインに従います。

  • 使用可能な最新のバックアップを使用し、最新のバックアップがディストリビューションの最大保有期間より古い場合は、バックアップを使用してサブスクリプションを初期化する前に、新しいバックアップを作成します。 保有期間の詳細については、「サブスクリプションの 有効期限と非アクティブ化」を参照してください。

  • 既定では、ディストリビューション クリーンアップ ジョブは、ディストリビューション データベースから 72 時間以上前のトランザクションをクリアします。 クリーンアップは、パブリケーションに設定された保持期間に基づいています。 古いバックアップと同期する場合は、復元するバックアップの前にジョブを一時的に無効にし、サブスクリプションが正常に作成された後に再度有効にすることを検討してください。 これにより、バックアップから正常に同期するために必要になる可能性があるトランザクションをディストリビューション データベースから削除できなくなります。 クリーンアップ ジョブの実行については、「 レプリケーション メンテナンス ジョブの実行 (SQL Server Management Studio)」を参照してください。

場合によっては、バックアップで初期化されたサブスクリプションを設定した後、復元されたサブスクライバー データベースで手動でカスタマイズを実行する必要があります。 一般に、サブスクライバー データベースの内容がパブリッシャー データベースの内容と異なることが予想されるようにパブリケーションが定義されている場合は、復元されたサブスクライバー データベースで手動で変更する必要があります。

  • 復元されたデータベースのインデックス付きビューは、ログ ベースの indexed-view-to-table アーティクルとしてパブリッシュされる場合、テーブルに変換する必要があります。

  • 復元されたデータベースのサブスクライブされたタイムスタンプ列は binary(8) 列に変換する必要があります。タイムスタンプ列の代わりに binary(8) 列を含むスキーマが一致する新しいテーブルにタイムスタンプ列を含むテーブルの内容をコピーし、元のテーブルを削除し、元のテーブルと同じ名前で新しいテーブルの名前を変更します。

別の方法を使用してサブスクリプションを初期化する

パブリケーション データベース スキーマとデータを Integration Services などのサブスクライバーにコピーできる任意の方法を使用して、サブスクリプションを初期化できます。 別の方法を使用してサブスクライバーを初期化すると、レプリケーション サポート オブジェクトがサブスクライバーにコピーされます。

バックアップによる初期化とは異なり、ユーザーまたはアプリケーションは、サブスクリプションの追加時にデータとスキーマが正しく同期されていることを確認する必要があります。 たとえば、サブスクライバーにデータとスキーマがコピーされてからサブスクリプションが追加された時刻までの間にパブリッシャー上のアクティビティがある場合、このアクティビティに起因する変更がサブスクライバーにレプリケートされない可能性があります。

別の方法でサブスクリプションを初期化するには、「サブスクリプションを 手動で初期化する」を参照してください。

こちらもご覧ください

サブスクリプションを初期化する