2013-04-13 27 views
1

我创建一个注销触发器这样PL/SQL LOGOFF触发器不会捕获注销事件妥善

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

,并与使用Oracle.DataAccess.Client的对象的OracleConnection小VB.Net应用进行了测试模块。当登录事件是由一个类似的登录触发器正常拍摄,当客户端连接关闭只捕获的注销事件,整个客户端应用程序之后关闭,即这是不够的:

cn.Close() 

这也不是:

cn.Close() 
cn.Dispose() 

也不是这:

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

我在做什么错?在此先感谢,
Jan

+0

为什么不使用AUDIT? – haki

+0

我想对事件执行一些操作,因此我无法使用AUDIT。 – jlnme

回答

3

您是否在应用程序中使用连接池?在大多数三层应用程序的巨大的中,您将在中间层维护一个连接池,以便用户不必在每个页面上等待连接到数据库的连接再次打开和关闭。当应用程序打开连接时,它从池中获取现有连接(假设有一个空闲连接),并在应用程序关闭连接时将连接返回到池。虽然这在性能方面效率更高,但使用连接池意味着您正在从数据库会话中分离应用程序会话,因此登录和注销触发器不一定会捕获应用程序登录或注销操作。

在你的情况下,我的下注是登录触发器似乎只工作,因为应用程序启动时连接池是空的。如果您反复登录和注销,我敢打赌,并非所有的应用程序登录都会导致登录触发器触发。

+0

这是ist。谢谢! – jlnme