私の会社はインフラストラクチャを新しいデータセンターに移動しています。新しい環境が稼働する準備ができるまで、新しいサーバーのデータベースを現在の運用データベースと同期させる最善の方法を見つけようとしています。私はフルタイムのDBAではなく、いくつかの調査を行いました。私が読んだことから、国境を越えたレプリケーションのセットアップは私たちのニーズに最も適しているようです。
詳細:本番DBのサイズは約90 GBで、Robocopyを使用すると、そのコピーを新しいサーバーの1つに移動するのに約9時間かかりました。現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。これは単純なリカバリであるため、データベースミラーリングは使用できません。
トランザクションレプリケーションは、データベースの同期を維持するための最良の方法ですか?
私の計画:
私の心には2つあります。トランザクションレプリケーションでは、パブリッシュされた各テーブルに主キーがあり、本番データベースのテーブルの多くに主キーが定義されていないことが必要です。私の主な関心事はデータベースを同期させることだけなので、これはそれほど大きな問題になるとは思いません。データベースを使用するさまざまなアプリケーションを後でデータでテストしますが、それが深刻な問題ではないことを確認したいと思います。次に、関連するシステムDBも、マスターなどの元のインスタンスから移動する必要がありますか?新しい環境でActive Directoryセットアップに移行するので、ユーザーなどは気にしませんが、システムDBの必要性についてはわかりません。
そして一般的に、私はこれらの概念を正しく把握していますか?
あなたの現在の状況:
あなたのアプローチには多くの欠点があります:
私の経験に基づいて、以下が私の推奨事項です:
WITH NORECOVERY
にデータベースを復元します。WITH RECOVERY
を使用して宛先でそれを復元します。これにより、宛先データベースがオンラインになります。システムデータベースを移動する必要はありません。ログイン、ジョブ、ssisパッケージなどをスクリプトで書き出し、宛先サーバーでそれらを作成する前に、すべての準備作業を必ず行ってください。
復元後の手順とその他のベストプラクティスについては、 この回答 を参照してください。
注:データベースミラーリング(使用しているsqlサーバーのエディションに応じてSYNCまたはASYNC)を実装することもできますが、ログ配布は実装するのが簡単であり、テストしても失望しません。上記の手法を使用して、テラバイトデータベースをあるデータセンターから別のデータセンターに正常に移動しましたが、完全に正常に機能します。
現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。
常にダウンタイムがあり、それをスケジュールする必要があります。クラスタリングなどのソリューションに多額の費用を投じても、フェイルオーバーするとダウンタイムが発生します。ダウンタイムがゼロに近い場合の投資額と、許容可能なダウンタイムで利用可能な場合のバランスをとる必要があります。
私自身はこれを使用する機会がなく、まだプレビュー段階にあると思いますが、AzureプラットフォームのSQL Data Syncは潜在的なオプションになる可能性があります。
https://Azure.Microsoft.com/en-gb/documentation/articles/sql-database-get-started-sql-data-sync/
オンプレミスおよびAzure SQLデータベースで機能し、データベースの同期を維持するための便利なツールのようです。