web-dev-qa-db-ja.com

SQLスナップショットレプリケーションを使用して、PRODUCTIONからTESTデータベースを更新します。何故なの?

欠点と欠点は何ですか?

PRODUCTIONサーバーからTESTサーバーへの20のデータベース(それぞれ約1GB)の自動夜間更新をスケジュールする必要があります。 SQL Serverスナップショットレプリケーションを設定して、スナップショットの更新をPRODUCTIONデータベースからTESTに発行します。知っておくべき落とし穴はありますか?

6

あなたのシナリオは興味深いです:

  • サイズが約1GBの小さなデータベース。
  • データベースの数= 20
  • データの更新は毎晩行われるため、データは1日で古くなる可能性があります。

最初の考えでは、スナップショットレプリケーションは思ったとおりに問題ないことがわかりましたが、(強くお勧めしますbackup/restoreメソッドを使用すること-安全で信頼性が高く、保守のオーバーヘッドが少なくなります。

スナップショットレプリケーションが悪い選択であると言っているわけではありませんが、実績のある信頼できる方法であるバックアップの復元を使用しないのはなぜですか。 PowershellまたはT-SQLまたはSSISを使用してautomate it(バックアップ/復元)することができます/すべきです。

スナップショットレプリケーションの欠点:

  • レプリケーション対象としてマークされているテーブル、sp、関数を削除/作成することはできません。また、テーブルを直接変更することはできません。システムストアドプロシージャsp_repldropcolumnおよびsp_repladdcolumnを使用する必要があります。
  • 標準のスナップショットでは、BCPステップ中にテーブルをロックして、有効なコピーを確実に取得します。
  • スキーマを変更する場合は、新しいスナップショットを生成する必要があります。これは、パブリッシャー側でリソースを大量に消費する静かなものです。
  • ローカルディストリビュータがある場合、サーバーで追加のオーバーヘッドが発生します。
  • サーバーで実行されている複数のサービスを監視することになります。
  • SQL Serverエージェントへの依存関係。
  • スナップショットフォルダーに対するWindows NTのアクセス許可。
  • ネットワーク帯域幅。
6
Kin Shah

利点:

  • 運用とテストが異なるSQL Serverバージョンである場合に使用できます
  • プロセスはSSMSおよびSQLエージェント内でのみ管理できます
  • テスト内の一部のテーブルを更新する必要がない場合に役立ちます。何を公開するかを選択できます
  • テストデータベースには、本番コピーへの異なるログイン/ユーザーを含めることができます。バックアップ/復元方法を使用すると、テストでログインをセットアップして本番と同じSIDを設定し、個別のパスワードを維持できますが、復元後に別のユーザーを再度追加する必要があります。

短所:

  • 本番環境でディストリビューションデータベースをセットアップする必要があります。理想的には、スナップショットを生成することによるパフォーマンスへの影響を最小限に抑えるために、別のサーバー上にあります。スナップショットの生成は負荷の高いプロセスです。24時間年中無休でオンラインで利用できる必要があるサーバーがある場合、配布データベースが本番データベースサーバーでセットアップされていなくても、これは良いことではありません。
  • 複製するには、新しいデータベースオブジェクトをパブリッシャーに追加する必要があります。列の追加/削除が機能するはずです。ただし、正確なコピーが必要な場合は、本番環境でパブリケーションを調整する必要があるため、メンテナンスのオーバーヘッドがあります。

私のアドバイスは、バックアップ/復元方法に行くことです。スナップショットの更新とバックアップでは、ネットワークを介して同じデータを取得していることに気付くでしょう。はい、スナップショットファイルを圧縮できますが、バックアップを圧縮することもできます。テストでユーザーを追加/削除する頻度があまり高くなく、同じアプリケーションログインがテストで使用されている場合は、本番環境からログインをスクリプト化してテストし、同じSIDを維持することで、孤立したユーザーの問題を回避できます。テストに追加のユーザーがいる場合は、復元後にこれらを追加できます。

2
Nick Kavadias

バックアップと復元は、データベースの新しいコピーをPRODUCTIONからTESTに取得する最速の方法だと思います。これは簡単に自動化できます。

私の意見では、レプリケーションはここで使用するのに最適な機能ではないと思います。データのサブセットの複製のみを計画している場合を除きます。その場合、スナップショットレプリケーションが適しています。

1