新しいデータセンターへのデータベースの移動


8

私の会社はインフラストラクチャを新しいデータセンターに移動しています。新しい環境が稼働する準備ができるまで、新しいサーバーのデータベースを現在の運用データベースと同期させる最善の方法を見つけようとしています。私はフルタイムのDBAではなく、いくつかの調査を行いました。私が読んだことから、国境を越えたレプリケーションのセットアップが私たちのニーズに最適であるように見えます。

詳細:本番DBのサイズは約90 GBで、Robocopyを使用すると、そのコピーを新しいサーバーの1つに移動するのに約9時間かかりました。現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。これは単純なリカバリであるため、データベースミラーリングは使用できません。

トランザクションレプリケーションは、データベースの同期を維持するための最良の方法ですか?

私の計画:

  1. (完了)現在のデータベースとログを新しいサーバーに転送し、SQL Serverの新しいインスタンスにアタッチします
  2. 開発データベースマシンでディストリビューターをセットアップし、本番データベースからそれに発行します。
  3. 毎晩1回、ディストリビューターからプッシュされる更新を受け入れる新しいデータベースマシンでサブスクライバーを作成します。

私の心には2つあります。トランザクションレプリケーションでは、パブリッシュされた各テーブルに主キーがあり、本番データベースのテーブルの多くに主キーが定義されていないことが必要です。私の主な関心事はデータベースを同期させることだけなので、これはそれほど大きな問題になるとは思いません。データベースを使用するさまざまなアプリケーションを後でデータでテストしますが、それが深刻な問題ではないことを確認したいと思います。次に、関連するシステムDBも、マスターなどの元のインスタンスから移動する必要がありますか?新しい環境でActive Directoryのセットアップに移行するので、ユーザーなどは気にしませんが、システムDBの必要性についてはわかりません。

そして一般的に、私はこれらの概念を正しく把握していますか?

回答:


9

あなたの現在の状況:

  • 新しいデータセンターに移動する90 GBのデータベース。
  • データベースは単純復旧中です。
  • T-Repを使用してデータの同期を保つことを考えています。
  • データベースには、主キーを持たない多くのテーブルがあります。これは、テーブルをパブリッシュするための要件です。
  • 宛先のデータセンターにバックアップがすでにコピーされています。

あなたのアプローチには多くの欠点があります:

  • T-Repは、他のテクノロジーに比べてセットアップが簡単ではありません。スキーマの変更がある場合は、新しいスナップショットが必要です。
  • T-REPを使用する場合は、スキーマを変更する必要があります-ないテーブルに主キーを追加します。
  • 既存のデータベースに変更を加える場合は、予期しない動作を回避するためにアプリケーションを完全にテストする必要があります。
  • データベースに多数のトランザクションがあり、2つのデータセンター間のネットワーク帯域幅に依存している場合、レプリケーションの待ち時間も発生します。

私の経験に基づいて、以下が私の推奨です:

  • データベースを完全復旧に変更します。これは、PKの作成と比較して大きな影響はありません。
  • ソースデータベースの完全バックアップを出荷します-圧縮してバックアップを取り、ファイルの初期化を即座に有効にします。これは、宛先データセンターでの復元時間を短縮するのに役立ちます。
  • 移行先サーバーでデータベースを復元しますWITH NORECOVERY
  • Logshippingを実装し、バックアップから初期化します。
  • ログ配布では、ログを1分ごとに発送してください。
  • フェイルオーバーの日中に、ソースで最後のテールログバックアップを作成し、を使用して宛先でそれを復元しWITH RECOVERYます。これにより、宛先データベースがオンラインになります。
  • 宛先データベースがオンラインになったら、ユーザー同期する必要があります
  • 新しいサーバーを指すようにweb.configを変更する必要があります。

システムデータベースを移動する必要はありません。ログイン、ジョブ、ssisパッケージなどのスクリプトを作成し、宛先サーバーでそれらを作成する前に、すべての準備作業を必ず行ってください。

復元後の手順やその他のベストプラクティスについてはこの回答を参照しください。

注:データベースミラーリング(使用しているsqlサーバーのエディションに応じてSYNCまたはASYNC)を実装することもできますが、ログ配布は実装するのが簡単であり、テストしても失望しません。上記の手法を使用して、テラバイトデータベースをあるデータセンターから別のデータセンターに正常に移動しましたが、完全に正常に機能します。

現在の本番データベースは、移行プロセス全体を通じてオンラインでアクセス可能な状態を維持する必要があります。

常にダウンタイムがあり、それをスケジュールする必要があります。クラスタリングなどのソリューションに多額の費用を投じても、フェイルオーバーするとダウンタイムが発生します。ダウンタイムがゼロに近い場合の投資額と、許容可能なダウンタイムで利用可能な場合のバランスをとる必要があります。


彼が言ったこと。完全な回復中に、現在のデータベースがディスクをいっぱいにしないように、ログのバックアップの頻度が十分であることを確認してください。
マイケルグリーン

@MichaelGreenログの保持を調整して、ディスクがいっぱいになる懸念に対処できます。
Kin Shah

@Kinすばらしい答えをありがとう。ログ配布に関しては、サーバーでのオーバーヘッドが高すぎないことを理解していますか?
Snake_Plissken

@Snake_Plisskenオーバーヘッドは高くありません..頻繁にログシップされるデータベースが多数ある場合、msdb..sysjobhistoryテーブルで少しの競合が発生する可能性があります(私は100以上のデータベースについて話している)。私は、ある国から別の国へ毎分ログ配布を行うサーバーを使用しており、問題なく50以上のデータベースを実行しています。
Kin Shah

0

私自身はこれを使用する機会がなく、まだプレビュー段階にあると思いますが、AzureプラットフォームのSQL Data Syncは潜在的なオプションになる可能性があります。

https://azure.microsoft.com/en-gb/documentation/articles/sql-database-get-started-sql-data-sync/

オンプレミスおよびAzure SQLデータベースで動作し、データベースの同期を維持するための便利なツールのようです。


SQL Data Syncは何年も前からプレビューされています(正しく覚えていれば4年以上)。その非常にバグが多いです。適切なロギングがなく、詳細を提供しないとランダムに失敗します。私はこれを概念実証として試してみましたが、使用しないことに決め、SSISを使用してオンプレミスからAzureにデータを読み込みました。データ同期を取り除くために、MSはプレビューオンプレミスからAzureへのT-repを用意しました。すぐに試してみます。
Kin Shah

それは私がかなり有望だと思ったデモから見たので、それは残念です。まあ…
steoleary
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.