オンラインであり、単一のエンタープライズアプリで同時に使用されている間、サイズが10〜50 GBのSQL Server 2008 R2データベースを10〜20個バックアップする必要があります。また、すべてのデータベース間でほぼ同期された状態に復元する必要があります(データベース間で最大数秒の同期をとることができます)。目的は、QA/DEV環境の本番データをキャプチャすることです。
データベースを完全復旧で実行することを要求せず、QA環境用のデータのキャプチャ専用であり、自分の制御下にないメインのバックアッププロセスから独立したバックアップ方法を考えたいと思います。
私の顧客の場合、20 GBのフルバックアップをそれぞれ約30 GBでキャプチャするには、1〜2時間かかります。これにより、単純なリカバリで実行するとデータベースの同期が取れなくなるため、フルバックアップを連続して行うことができなくなります。
私はこれらよりも良いアイデアを探しています:
アイデア1:VMディスクのSANレベルのスナップショット。スナップショットからのxcopy MDF/LDF。
コピーされたファイルが別のサーバーインスタンスにアタッチされると、その回復プロセスにより、ほぼ同時にスナップショットである一貫したデータベースが生成されます。
ぐるぐる回って、これは悪い考えだと確信しました。少なくとも、master/msdb/etcに対して非同期になる可能性があるためです
アイデア2:すべてのデータベースにわたって複雑なバックアップと同期復元を調整します
これには、フルリカバリで実行する必要のあるデータベースが必要になります。期限(T0)のかなり前に、すべてのデータベースの並列バックアップを開始します。 T0に達したら、すべてのログをバックアップします(最大で数分かかるはずです)。結果として生じる無数のバックアップを取り、それらを復元し、ログをロールバック/ロールバックして、T0と比較してデータベース全体である程度一貫した状態を取得します。
これを確実に使用するには、多くの計画とスクリプトを作成する必要があるため、回避するためにかなりの時間をかけます。
P.S.1:db snapshots を使用できるようになりたいと思っていました。アイデアは、各dbでスナップショットを開始し(秒単位で終了する必要があります)、その後、次の数分/時間でそれぞれを完全にバックアップします。次に、それらすべてを別のサーバーに復元し、それぞれをスナップショットに戻します。私の知る限り、スナップショットはデータベースと一緒にバックアップできないため、このシナリオは不可能です。ロールバックできるのは、それらが作成されたサーバー上だけです。また、すべてのお客様が利用できるEnterprise Editionは必要ありません。
P.S.2:クロスDB同期バックアップを作成できるサードパーティのソリューションをご存知の場合は、そのことをお知らせください。
すべてのデータベース間でほぼ同期された状態に復元するように、オンラインの間に、単一のエンタープライズアプリで同時に使用されるSQL Serverデータベースを10〜20個バックアップする必要があります。
探しているのは、すべての顧客データベースにわたる一貫性のあるバックアップです。フルバックアップを Marked Transactions
とともに使用する必要があります(太字の強調は追加) ):
2つ以上のデータベースに関連する更新を行う場合、関連データベース、トランザクションマークを使用して、それらを論理的に一貫したポイントに回復できます 。ただし、この復旧では、復旧ポイントとして使用されたマークの後にコミットされたトランザクションはすべて失われます。トランザクションのマーク付けは、関連するデータベースをテストする場合、または最近コミットされたトランザクションを失いたい場合にのみ適しています。
COPY_ONLY
を使用してアドホックトランザクションログのバックアップを取ることを確認してください。そうしないと、COPY_ONLY
を使用しないアドホックトランザクションログのバックアップによってログチェーンが切断されるため、リカバリが面倒になります。予防策として、 [ユーザーに使用を制限するonlyCOPY_ONLY
backups ]を指定できます。
SQL Serverバージョン2008 R2以降のソリューションが必要です。 DBのサイズはdbあたり最大50 GBであり、それらすべてをバックアップする時間は、おそらく1〜2時間以上です。
マークされたトランザクションは、状況に応じて機能します。並列バックアップを作成する唯一の方法は、それらをSTRIPE
することですが、最終的には、バックアップのストライプを失わないようにする必要があります。それらを速くするために、BUFFERCOUNT
とMAXTRANSFERSIZE
で遊ぶことができます。
backup compression を使用し、インスタントファイルの初期化を有効にするを使用する必要があります。
参照する
フルバックアップとトランザクションログバックアップを実行している場合(およびこのデータを重要と考える場合は、バックアップとトランザクションログバックアップをテストシステムにコピーして、 を実行します。データベースを同じ時刻に+-に復元するには、ポイントインタイムリストア を使用します。
すべてのデータベースが同じSQL Serverマシン上にあるかどうか、またはサーバーのクロックがどれだけ同期しているかに応じて、「秒単位の非同期化」ターゲットを一致させることができます。
それは少しバンドエイドソリューションかもしれませんが、要件を満たし、かなりシンプルで安価です。
重要なデータベース(完全復旧中)からの完全バックアップとトランザクションログバックアップがない場合は、バックアップ戦略を修正する必要があります。 SANレベルのスナップショットでは、データベースを完全復旧モードにすることはできません。とにかく、ポイントインタイムリストアを実行することはできません。
指定した状況下で、サードパーティまたはMicrosoftベースのVSSプロバイダーを介してVSSバックアップを確認しましたか?本番のリカバリチェーンを壊さないCOPY_ONLYバックアップを実行できます。最終的には、すべてのデータベースのバックアップを作成し、適切なマージン内で他の場所にリカバリできます。 VSSバックアップには、非常にアクティブなデータベースが使用されるスパースファイルが原因でディスク容量の問題を引き起こす可能性があるという点で、データベーススナップショットと同じメカニズムとダウンフォールのいくつかがあることに注意してください。 SQLライターサービスのTechNetリソース こちら およびSQL ServerのVSSバックアップ こちら をご覧ください。
Windows Serverバックアップを使用してこれを行うには、手動バックアップのウィザード手順に従い、VSS設定の下のカスタム構成設定でVSSコピーバックアップを選択します。これにより、Windows Serverのバックアップが、サーバー上で行われた他のバックアップに干渉しなくなります。詳細は Windows Serverバックアップリファレンス を参照してください。
@ Kin'sは、質問の内容に一致する最初の回答なので、回答として投票します。私は追加の答えを見つけてしまったので、以下で説明します。
シンプルな復旧モデルを使用しているお客様の場合、T0でハイパーバイザーまたはSAN=レベルで取得された一時ディスクスナップショットから抽出されたMDFおよびLDFのコピーが必要です。これらを使用して、 T0からの状態。
完全復旧モデルを使用しているお客様には、次のいずれかが必要です。
T0の前に完了した最新の完全バックアップのメインバックアッププロセスからのコピー+ T0をカバーする後続のトランザクションログバックアップの最小チェーン。その後、T0へのポイントインタイムリカバリを実行できます。
自分の補助を実行するためのアクセスCOPY_ONLY
バックアップ。私はそれらをすべてT0から並行して開始します。T0は数秒しかかからないはずであり、私の最大の関心事でした。次に、復元時に、各バックアップから FirstLSN へのポイントインタイムリカバリを実行します。これの美しさは、メインのバックアッププロセスとまったくやり取りする必要がないことです。これは私のもう1つの懸念事項でした。私のCOPY_ONLY
バックアップは、一貫性に影響を与えることなく実行されています。
これは、本番環境のコピーであるQAおよびその他の環境で年に数回行います。復元では、完全復旧モードが本当に必要であり、特定の時点への復元はうまく機能します。レプリケーションも多く、特定の時点に復元した後に「行が見つかりません」というエラーが発生することはまれです。また、SAN clone/snapshot methodを使用して、地理的に離れた場所にある本番環境のコピーを作成し、データベースを同期させることもできます。