0

アプリケーションを理解するには、すべてのデータベースの変更を何らかの方法でログに記録できれば非常に役立ちます。次に、フロントエンドでアクションを実行し、データベースで何が起こるかを確認できます。(私は最後の 5 分間程度しか気にしませんが、それ以上は問題ありません。) それにはどのような可能性がありますか?

実行されたステートメントをログに記録するように JDBC ドライバーを構成できることは知っていますが、必要以上にログを記録し (たとえば、クエリについては気にしません)、ログファイルに大量に混在しています。:-/

私が考えることができる別のことは、変更に関するデータをログテーブルに書き込む各テーブルのトリガーを作成することです。誰かがそれを行うことができましたか?特に、特定の一連のテーブルに対してこれらのトリガーを作成するスクリプトを作成しますか?

4

2 に答える 2

0

トリガーを使用すると、以前のデータ(データの履歴)を保持できます。なぜログをログテーブルに挿入しないのですか?

于 2013-03-12T14:48:40.223 に答える
0

トリガーの多くの例は、Oracle のドキュメントに記載されています。必要なのは、各行トリガーの挿入、更新、削除の後、ログテーブルにデータを入力することです。Oracle ドキュメントの例を次に示します。

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/triggers.htm#LNPLS020

CREATE TABLE Emp_log (
  Emp_id     NUMBER,
  Log_date   DATE,
  New_salary NUMBER,
  Action     VARCHAR2(20));

 CREATE OR REPLACE TRIGGER Log_salary_increase_ARUID
  AFTER UPDATE OR INSERT OR DELETE ON emp
  FOR EACH ROW
BEGIN
  -- Can be separated for Inserting then Updating with addl if
  -- In this case it may be easier to control and/or add flags to your log tables
  -- such as Action = 'INS' or Action = 'UPD' --
  If (INSERTING OR UPDATING) 
  THEN
    -- Insert newly created/updated values to your log table --
    INSERT INTO Emp_log (Emp_id, Log_date, New_salary, Action)
     VALUES (:NEW.Empno, SYSDATE, :NEW.SAL, 'INS_UPD');
  ELSE  
    -- Deleting - insert old or deleted values to your logs --
   INSERT INTO Emp_log (Emp_id, Log_date, New_salary, Action)
     VALUES (:OLD.Empno, SYSDATE, :OLD.SAL, 'DEL');
END;
/
于 2013-03-12T14:15:42.640 に答える