要件を要約します。
- バックアップ サイズを減らす
- アーカイブしてデータベース内のレコード数を減らす
- 過度のロギングなしでデータをアーカイブする
バックアップ サイズを小さくするには、データを別のデータベースに移動する必要があります。
ロギングに関する限り、最小限のロギングのルールに目を通し、それらに従っていることを確認する必要があります。挿入先のデータベースの復旧モデルが単純復旧モデルまたは一括ログ復旧モデルであることを確認してください。
アーカイブされたデータを挿入するには、非クラスター化を無効にし (挿入が完了した後にそれらを再構築し)、クラスター化インデックスがある場合はトレース フラグ 610 を使用し、宛先テーブルにテーブル ロックを設定します。リンクにはチェックしたいルールが他にもたくさんありますが、これらは基本的なものです。
削除の最小限のログ記録はありませんが、top 句を使用してチャンクで削除することにより、ログ ファイルの増大を最小限に抑えることができます。基本的な考え方は次のとおりです(ファイルの増加を制限するために、削除中は単純な復旧モデルに切り替えます):
SELECT NULL;
WHILE @@ROWCOUNT > 0
DELETE TOP (50000) FROM TABLE WHERE Condition = TRUE;
上部の数値を調整して、削除ごとに行われるログの量を調整します。また、意図したものだけを削除するように、述語条件が正しいことを確認する必要があります。これにより 50000 が削除され、行数が返された場合は、返された行数が 0 になるまで繰り返されます。
すべてのログを最小限に抑える必要がある場合は、ソース テーブルを週ごとにパーティション分割し、ソース テーブルのクローンを (同じパーティション関数と同一のインデックス構造で) 作成し、パーティションをソース テーブルからクローン テーブルに切り替え、挿入します。クローン表からアーカイブ表に移動し、クローン表を切り捨てます。これの利点は、削除ではなく切り捨てです。欠点は、セットアップ、保守、およびクエリがはるかに複雑になることです (パーティションごとに 1 つのヒープまたは B ツリーを取得するため、すべてのクエリでパーティションの削除を使用しない場合、クラスター化されたインデックス/テーブル スキャンで複数の b をスキャンする必要があります)。 -1 つだけではなく、ツリー/ヒープ)。