大きなマルチスキーマデータベースには興味深い問題と要件があります。大きいデータベースのテーブルと変更をアーカイブ/バックアップする最も良い方法
- データベースのサイズは約130Gbです。
- マルチスキーマデータベースで、各顧客にスキーマがあります。
- 現在、システムに102,247個の表があります。
-Microsoft SQL Serverの2K8 R2
これはすべて、単一の定義されたフロントエンドを使用して、顧客のカスタマイズ要件によるものです。 私たちが持っている問題は、データベースのバックアップが天文学になり、失われた/見つからない/間違ったデータを取得するためにデータベースを復元することが悪夢であるということです。最初の製品には監査証跡が定義されておらず、データの保存に「変更」はありません。単純に1バージョンのデータしかありません。
失われたデータを元に戻すとは、基本的に130GBの完全バックアップを復元し、差分/トランザクションファイルをロードしてデータを取得することを意味します。
各スキーマ内の重要なテーブルごとに「チェンジセット」を導入したいと考えています。基本的に一連のデータを保持し、変更された/異なるデータが保存されたときにはそれをX分ごとに格納します。これは最初はSQLジョブでなければなりませんが、何が最善の方法であるかを知りたいのです。
本質的に私は、バックアップするテーブルの各スキーマに 'バックアップ'テーブルを挿入するスクリプトを実行します。
次に、X分ごとにジョブを実行して、各スキーマを順番に調べて、現在のものを挿入してから変更したデータを挿入します。 (行のmodifiedDateに基づいて)それは、自己上書きの前にこの変更ログを約1ヶ月間保持します。
さらに大きなバックアップがありますが、保持期間を長くする必要はありません。私の要点は、変更されたデータをチェックして挿入を実行する最も効率的な方法です。
私の直感では、次のようになります。
INSERT INTO BACKUP_table (UNIQUE ID, col1,col2,col3)
select col1,col2,col3 from table where and ModifiedDate < DATEADD(mi,+90,Current_TimeStamp)
*ラフSQL
これは、すべてのスキーマを通過し、これを実行するために、ループ内でなければならないであろう。多くのテーブルはデータを変更しませんでした。
これは良い方法ですか?
どう思いますか?