8

私が話しているタイトルとして、オラクルのデータ変更を追跡するための最良の方法は何ですか?どの行が更新/削除/挿入されているのか知りたいだけですか?

最初はトリガーについて考えますが、各テーブルにさらにトリガーを書き込んでから、変更テーブルに影響を与えたROWIDを記録する必要があります。それは良くありません。次に、Googleで検索し、マテリアライズドビューログと変更に関する新しい概念を学びます。データ収集、

マテリアライズドビューログは、元のテーブルと比較できるので、さまざまなレコードを取得できます。フィールドが異なっていても、元のテーブルから新しいテーブルを作成/コピーするのと同じ方法だと思います(ただし、何が違うのかわからない?);

変更データキャプチャコンポーネントは私にとって複雑です:)、それで私はそれを研究するために私の時間を無駄にしたくありません。

オラクルのデータ変更を追跡するための最良の方法を経験した人はいますか?

4

3 に答える 3

5

AUDITステートメントを確認してください。SYS.AUD$ テーブル内のすべての監査レコードを収集します。

例:

AUDIT insert, update, delete ON t BY ACCESS

よろしく、
ロブ。

于 2011-04-20T07:39:01.100 に答える
2

OracleはREDOログを介してこれを行います。これは、この情報で何をしようとしているかによって異なります。レプリケーションが必要であると想定しています (ソース インスタンスの変更を追跡し、1 つ以上のターゲット インスタンスに伝播します)。

その場合は、Oracle ストリームを検討できます (高度なレプリケーションなどの他のオプションですが、ニーズを考慮する必要があります)。

オラクルから:

Streams を使用する場合、通常、DML または DDL の変更のレプリケーションには次の 3 つの手順が含まれます。

取得プロセスまたはアプリケーションは、1 つ以上の論理変更レコード (LCR) を作成し、それらをキューにエンキューします。LCR は、データベースの変更を説明する特定の形式のメッセージです。取得プロセスは、REDO ログから取得された変更を LCR に再フォーマットし、アプリケーションは LCR を構築できます。変更がデータ操作言語(DML)操作であった場合、各LCRは、ソース・データベースの共有表に対するDML操作に起因する行変更をカプセル化します。変更がデータ定義言語(DDL)操作であった場合、LCRは、ソース・データベースで共有データベース・オブジェクトに対して行われたDDL変更をカプセル化します。

伝播は、ステージングされたLCRを別のキューに伝播します。このキューは、通常、LCRが取得されたデータベースとは別のデータベースにあります。LCRは、宛先データベースに到着する前に多数のキューに伝播できます。

宛先データベースでは、適用プロセスがLCRを共有データベース・オブジェクトに適用することで変更を使用します。適用プロセスでLCRをデキューして直接適用するか、適用プロセスでLCRをデキューして適用ハンドラに送信できます。Streamsレプリケーション環境では、適用ハンドラがLCRのカスタマイズされた処理を実行してから、LCRを共有データベース オブジェクトに適用します。

于 2011-04-20T12:40:20.137 に答える
2

ゴールデンゲートを見てみたいかもしれません。これにより、変更を簡単にキャプチャできますが、価格は高くなりますが、優れたパフォーマンスと迅速なセットアップが可能です。

パフォーマンスに問題がなければ、トリガーと監査が有効なソリューションになる可能性があります。パフォーマンスが問題であり、Golden Gate が高すぎると考えられる場合は、Logminer または Change Data Capture を使用することもできます。この選択を考えると、私の好みは CDC になります。ご覧のとおり、ほぼリアルタイムやオフラインなど、かなりの数のオプションがあります。

手作業でソリューションをコーディングすることにも代償が伴います。Golden Gate は調査する価値があります。

于 2011-04-20T07:46:34.387 に答える