web-dev-qa-db-ja.com

複数のデータベースを同じ時点にバックアップする

通常、バックアップを開始するとき、変更のコミットを許可しないか、データベースにアクセスできなくなります。データベースがシングルユーザーモードになることを意味しますが、バックアップを開始し、データベースを解放して使用します。また、バックアップを開始したら、進行中の変更をバックアップファイルに書き込まないようにします。 Microsoft SQL Server 2012でこれを実現する方法を知りたいのですが、私を助けてください。

さて、まず私の問題を説明させてください。現在、バックアップが完了するまで、データベースをシングルユーザーモードに設定しています。このモードは、バックアップの進行中にデータの変更を回避するという私の目的に役立ちます。しかし、私のアプリケーションは複数のデータベースに関連付けられています(各データベースは相互にリンクされており、毎月作成し続けるvar dbsがあります)。そのため、これらすべてのデータベースのバックアップは退屈なプロセスになり、さらに重要なのは、バックアップの進行中はユーザーをシステムから除外する必要があることです。

そこで、以下の要件を満たすバックアップメカニズムを探しています。

  1. 一度にすべてのデータベースのバックアップを開始し、使用できるようにデータベースを解放します。
  2. データベースは相互にリンクされているので、バックアップファイルでデータの一貫性を維持したいと考えています。したがって、このデータの整合性要件のために、進行中の変更をバックアップファイルにコミットしたくありません。

私が欲しいのは、ある時点でのすべてのデータベースのバックアップです。

10
Praveen

私はあなたのタスクがすべてのバックアップを1つの静的な(開いているトランザクションがない)ポイント(すべて同期)に復元できるバックアップのセットを作成することであると想定しています。 DB2で静止ポイントが行うことと同様です。残念ながら、SQL Serverにはそれを正確に行うものはありません。ただし、データベースが完全復旧モードであることを前提として、同様のことを実行できます。

単一のMARKEDトランザクションを一度にすべてのデータベースにわたって作成できます 。次に、各データベースのトランザクションログバックアップを作成します。ログのバックアップを維持していると仮定すると(とにかくそうする必要があります)、ログのバックアップにはそれほど時間がかかりません。そして、誰かがシステムにいるのを止める必要はありません(おそらく、マークされたトランザクションを作成するのに十分な長さを除く)。

この時点で、復元を行う必要がある場合は、RESTORE STOPBEFOREMARK各データベースで。これにより、すべてのデータベースが(トランザクションに基づいて)同じポイントに復元されます。注:そのトランザクションを含める場合は、STOPATMARKもあります。

例が必要な場合は、上記のリンクにある例と、その他の参考資料を参照してください。

これはあなたの質問に正確に答えるものではないことを理解していますが、うまくいけばそれはあなたの問題を解決します。

13
Kenneth Fisher

あなたの質問は私が答えたものと似ています- 10-20のSQL Serverデータベースを〜同期状態にバックアップおよび復元しますか?

データベースの復旧モデルがフルであると想定して、フルバックアップを取り、次に Marked Transactions を使用する必要があります。

あなたの神話を暴くことができます...

一度にすべてのデータベースのバックアップを開始し、使用できるようにデータベースを解放します。

backup mythsから(すべてのバックアップ神話を読むことを強くお勧めします)

バックアップ操作は、ユーザーオブジェクトをロックしません。バックアップはI/Oサブシステムで非常に重い読み込み負荷を引き起こすため、ワークロードがブロックされているように見えるように​​見えるかもしれませんが、実際はそうではありません。減速しているだけです。一括ログに記録されたエクステントを取得する必要があるバックアップがファイルロックを取得する特殊なケースがあり、チェックポイント操作をブロックする可能性がありますが、DMLはブロックされません。

データベースは相互にリンクされているので、バックアップファイルでデータの一貫性を維持したいと考えています。したがって、このデータ整合性の要件のため、進行中の変更をバックアップファイルにコミットしたくありません。

マークされたトランザクションは、一貫したLOGバックアップを取得するのに役立ち、_ 復元RESTORE ... WITH STOPBEFOREMARK = '<mark_name>'を使用してそれらを実行できるようになります

インスタンス上のすべてのデータベースのマーク付きトランザクションは、MSDBデータベースのdbo.logmarkhistoryテーブルにも記録されることに注意してください。

7
Kin Shah