1

大量のデータを含むテーブル(TMain)があり、アーカイブテーブル(TArchive)にアーカイブされています。レコードは3か月以上前のものです。

TMainは揮発性のテーブルであり、その上の列は一定期間にわたって変更/削除されるため、TMainが変更されたときに、TArchiveが常に同期するように何らかの制御を行いたいと思います。

Oracleでこれを実現するための最良の方法は何ですか?

任意の提案と解決策をいただければ幸いです。

4

2 に答える 2

1

現在のデータが格納されているのと同じ方法で履歴データを保持するための最良のソリューションは、パーティショニングです。
11G では、間隔を設定することもでき、Oracle は自動的に新しいパーティションを作成します。ただし、圧縮を使用したくなる場合は、圧縮されたパーティションがあると DDL を変更できないことを考慮してください。

于 2013-02-21T17:09:48.510 に答える
1

Oracle の DDL はトランザクション対応ではありません。これは、Oracle で 2 つのオブジェクト間で DDL を複製する自動化されたプロセスには、多少の欠陥があることを意味します。2 番目の DDL ステートメントが失敗した場合はどうなりますか? 最初のものをロールバックすることはできません。

さらに、DDL を検証するための外部の組織プロセスが既に存在している必要があります。たとえば、多くの組織では、開発者は開発データベースにしか変更を加えることができません。これらの変更は、テスト目的でステージング データベースに伝達されます。これらの変更を検証後、本番環境にプッシュできるのは DBA のみです。開発者と DBA が同じ人物であっても、次のガイドラインに従う必要があります。すべての DDL を確認してください。

これらの理由から、DDL レプリケーションを自動化しないことをお勧めします。これは面倒すぎるように見えます。その代わり:

  • テーブル構造を頻繁に変更しない場合は、DBA チェックリストにルールを追加してください。
  • テーブルを頻繁に変更する場合は、DDL を必要としない代替アーキテクチャを調べることができます。たとえば、揮発性情報を XML などの構造化されていない形式に格納する場合、行に応じて異なる種類の情報を保持する汎用列を追加することもできます。ローカライズされたキーと値のテーブルでも、テーブル構造を変更する必要性を軽減できます。
于 2013-02-21T12:42:30.497 に答える