Oracle中通过触发器追踪用户活动
2007-05-05 12:03:30 来源:WEB开发网登陆时间—获取实际工作登陆的时间,精确到0.001秒。请注意我们是如何把登陆时间划分成两个区域的。产生一个登陆日期和一个登陆时间可以给最后的报表带来很强的可读性。
既然登陆触发器已经创建好了,我们就需要创建一个注销触发器来获取用户完成会话的所有信息。
设计一个注销触发器
为了使一个单独的表格同时为登陆和注销事件服务,首先就需要定位单个用户会话的登陆行。正像你想的一样,这个小技巧使得允许许多用户使用同一个用户名在同一时间登陆。为了对这个情况做限制,我使用了Oracle会话ID。你知道,在每个用户登陆Oracle的时候,Oracle就会给每个用户分配一个唯一的会话ID,并把这个ID添加到v$session表中去。我们可以像使用主键一样来使用这个会话ID,这样,这个用户在注销的时候,他的注销信息就可以更新我们的用户审计表。
现在让我们来看一看在我们使用了注销触发器后可以使用的信息。首先,我们更新用户的日志表,使它包含用户(在注销前)的最后一个活动。正像你所看见的一样,更新最后一个活动的这个工作是通过使用SYS context功能,从表v$session中获取活动属性的信息而完成的。
接下来,我们更新我们的审计表来显示在会话期间访问的最后一个程序。再一次,我们使用SYS context功能,从v$session表中选择程序属性这一列。
我们更新用户会话所访问的最后一个模块。这是通过在v$session表中选择模块这个属性列,用它的内容来填充我们的用户审计表来完成的。
最后也是最重要的一个步骤就是添加注销时间,并计算用户在会话中停留的时间。代码中显示的一样,通过使用注销时间数据类型来更新我们的用户登陆表然后计算会话所用的时间。像我早先提及的一样,预先计算每个用户会话的时间将使得审计表中的每一个记录都非常有用,因为它显示了会话过程中的持续时间。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››通过远程管理更改ESXi主机root用户密码
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
更多精彩
赞助商链接