0

データベースで単純/基本的な操作を実行する Java/JDBC コードを作成しました。このプログラムによって特定のデータベースがいつアクセス、更新、変更されたかを追跡するのに役立つコードを追加したいと考えています。関連するデータベースごとにこれらの詳細またはログが保存される別のデータベースを DBMS 内に作成することを考えています。
これが最善の方法ですか?これを行う他の方法(できれば簡単な方法)はありますか?

編集-

For now, I am using MySQL. But, I also want my code to work with at least 
Oracle SQL and MS-SQL as well.
4

2 に答える 2

1

ほとんどすべてのテーブルに、次の列があります。

  • によって作成された
  • 作成日

これらの列には、それぞれ現在のユーザーと現在の時刻のデフォルト値があります。行が追加されると、値が取り込まれます。

これは問題の一部のみを解決します。トリガーの追加を開始できますが、それは複雑になります。もう 1 つの方法は、ストアド プロシージャを介してデータベースへの変更アクセスを強制し、ストアド プロシージャをログに記録することです。これには、ユーザーができることを制御するという点で、他の利点があります。ただし、より柔軟性が必要な場合があります。

3 つ目の可能性は、データベースで実行されているすべてのクエリを追跡する監査ツールです。ほとんどのデータベースには、内部監査をオンにする方法があると思いますが、これらはデータベースに非常に固有のものです。何が起こったかを確認できるサードパーティのツールもあります。ただし、データベースが大量のトランザクションを実行している場合、これらの方法はパフォーマンスに影響を与えることに注意してください。

詳細については、質問を修正して、使用している、または使用する予定のデータベースを指定する必要があります。

于 2012-08-04T18:06:20.053 に答える
1

「last_modified」列をテーブルに追加してから、テーブルに更新トリガーを追加して、データベースの現在の時刻に設定するのは非常に標準的です。そうすれば、アプリはそれについて心配する必要はありません。また、「create_time」もよく使用され、挿入トリガーによって入力されます。

コメント後の更新:

監査ログを探しているようです。一部のアプリは、挿入や更新ではなく、ストアド プロシージャを介してのみデータ操作が行われるアプリケーションを作成します。固定 API。テーブルに項目を追加するには、ストアド プロシージャを呼び出します。

addItem(itemName, itemDescription)

次に、proc は item テーブルに挿入し、必要なログを記録します。

jdbc アクセスにある種のフレームワーク (Spring など) を使用している場合の別の手法は、そのレイヤーでインターセプトすることです。

于 2012-08-04T17:26:05.277 に答える