0

年に 1 回など定期的に、いくつかの基準に基づいて DB2 9.7 データベースから一連のテーブル行をアーカイブしたいと考えています。たとえば、1 年に 1 回、作成日が 1 年以上前のすべての EMPLOYEE 行をアーカイブしますか?

アーカイブとは、データが DB スキーマから移動され、別の場所に取得可能な形式で保存されることを意味します。これは可能ですか?

4

2 に答える 2

3

システムはアーカイブされたデータにアクセスする必要はありません

プログラムでアーカイブされたデータにアクセスする必要がない場合は、次のことをお勧めします。

  • エクスポート (ここを参照) スクリプトを作成します。例:
echo '===================== export started ';

values current time;
-- maybe ixf format would be better?
export to tablename.del of del 
select * from tablename
where creation_date < (current date - 1 year)
;
echo '===================== export finished ';
  • create delete db2 スクリプトの例:
echo '===================== delete started ';
values current time;

delete from tablename.del of del 
where creation_date < (current date - 1 year)
;
commit;

echo '===================== delete finished ';
  • すべてを呼び出すバッチスクリプトを作成すると、新しいエクスポートファイルが安全な場所にコピーされます。スクリプトを呼び出すときに、データが安全に配置されるまで削除が行われないようにします。
db2 connect to db user xx using xxx
db2 -s -vtf export.sql
7z a safe-location-<date-time>.7z tablename.del
if no errors till now:
   db2 -s -vtf delete.sql
  • これを自動的に行うには、バッチ スクリプトを cron ジョブとして登録します。

繰り返しますが、削除は非常に機密性の高い操作であるため、データが失われないように複数のバックアップ メカニズムを用意することをお勧めします(たとえば、削除して別の期間を設定する - たとえば、1.5 年以上前のものを削除する)。

システムはアーカイブされたデータにアクセスする必要があります

システムがアーカイブされたデータにアクセスする必要がある場合は、次のいずれかの方法をお勧めします。

于 2013-05-10T09:53:34.767 に答える
0

もちろん?かなり単純な方法の 1 つは、基本的に次のようなストアド プロシージャを作成することです。

  • アーカイブする特定のテーブルのすべてのレコードを一時テーブルに抽出し、
  • それらの一時レコードをアーカイブ テーブルに挿入し、
  • 主キーが一時テーブルにある特定のテーブルから削除します

列のサブセットのみをアーカイブに入れたい場合は、一時ファイルで主キーを取得している限り、それらの列のみを含むビューから抽出できます。

于 2013-05-08T14:16:27.243 に答える