1

このようなLOGOFFトリガーを作成しました

CREATE TRIGGER logoffTrigger  
BEFORE LOGOFF ON DATABASE  
BEGIN  
INSERT INTO logoffAudit("type","user")VALUES('LOGOFF',USER);  
END;  
/

Oracle.DataAccess.Client モジュールの OracleConnection オブジェクトを使用する小さな VB.Net アプリケーションでテストしました。LOGON イベントは同様の LOGON トリガーによって適切にキャプチャされますが、LOGOFF イベントは、クライアント接続が閉じられ、その後クライアント アプリケーション全体が閉じられたときにのみキャプチャされます。つまり、これでは十分ではありません。

cn.Close()

これもそうではありません:

cn.Close()  
cn.Dispose()

これも:

cn.Close()  
cn.Dispose()  
cn = Nothing

私は何を間違っていますか?前もってありがとう、
ヤン

4

1 に答える 1

3

アプリケーションで接続プーリングを使用していますか? ほとんどの3 層アプリケーションでは、接続プールを中間層に保持して、ユーザーがデータベースへの接続が開かれ、再度閉じられるまですべてのページで待機する必要がないようにします。アプリケーションが接続を開くと、プールから既存の接続が取得され (空き接続があると仮定)、アプリケーションが接続を閉じると、接続がプールに返されます。これはパフォーマンスの点で大幅に効率的ですが、接続プールを使用すると、データベース セッションからアプリケーション セッションを分離することになるため、ログオンおよびログオフ トリガーがアプリケーションのログオンまたはログオフ アクションを必ずしもキャプチャするとは限りません。

あなたの場合、私の賭けは、アプリケーションの起動時に接続プールが空であるため、ログオントリガーが機能しているように見えるということです。ログオンとログオフを繰り返す場合、すべてのアプリケーション ログオンがログオン トリガーを起動させるわけではないことに賭けたいと思います。

于 2013-04-13T23:15:56.080 に答える