论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> ORACLE认证 >> IT正文
Oracle中通过触发器来追踪用户的活动
 作者:佚名     2007-3-15 13:29:07        来源:不详  浏览次数:

从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括数据库启动触发器,DDL触发器和最终用户登陆/注销触发器。

当Oracle提供了这些新的触发器的功能后,却还不清楚该如何使用这些触发器来追踪系统的使用情况。这篇文章描述了我是如何使用创建终端用户登陆/注销的方法来追踪终端用户的活动的。刚开始实行的追踪终端用户系统级触发器是非常新的,就因为它非常的新,所以它在功能上还是不够完善。

虽然用户登陆/注销触发器会告诉你用户登陆和用户注销的准确时间,可是代码却无法获取在用户会话阶段所进行活动的任何信息。

这些用户的登陆/注销触发器对于使用时间戳用户的应用程序而言是非常有用的。所谓的时间戳用户,就是那些在访问应用程序的时候被给定一个唯一的Oracle用户ID的人。不使用时间戳Oracle用户ID的应用程序使用这些登陆/注销触发器可能没有什么用。

既然我们知道了基本的知识,那么,让我们看看该如何设计用户审计表来追踪用户的活动。

设计一个用户审计表

第一步就是创建一个用于存储终端用户登陆/注销触发器信息的Oracle表。为了合理地设计这些触发器,让我们先来看看系统级的触发器。首先,我们在登陆的时候就会获取以下信息:

用户 ID—用户的ID ,用于执行登陆操作;

会话 ID—Oracle为用户控制会话的ID;

主机—计算机的名称;

登陆时间—一个用户登陆时间一样的Oracle时间数据类型,精确到0.001秒。

现在,我们将获得仅仅优先于用户注销的信息。当用户在注销的时候,Oracle系统级触发器就可以提供这个用户当前的会话状态和活动信息:

最后的程序—用户在注销时执行的最后一个程序的名称。

最后的活动—用户在会话种执行的最后一个活动。

最后的模块—用户在注销前访问的最后一个模块的名称。

注销时间—一个和用户实际注销时间一样的一个Oracle时间数据类型,精确到0.001秒。

现在,我们知道了登陆和注销的信息,那么我们如何搜集这些信息,并管理它们呢?让我们来看看可用的选择。

用户表的标准化

因为用户的登陆/注销触发器是两个分离的实体,所以我们在设计支持存放这些信息的表的时候就可以有多种选择。我们可以设计两个隔离的表格:一个用户登陆表和一个用户注销表。如果我们这样做了,那么在把这两个表连接起来的时候和判断哪个用户的登陆引起了哪个用户的注销等等事情的时候就会有困难。这个投机取巧的方法可能会给错误的产生制造机会。诸如,用户24在登陆前是如何注销的?等等。

现在,让我们考虑一个更好的选择。为了很好的使用表的信息,我们可以创建一个数据库,它里面包含一个单一的表,用于记录登陆和注销时间信息。这个方法就省去了连接表和关联数据的麻烦。另外,我们还将创建一个区域,用于计算每个用户在特定会话中所用去的时间。这个计算预先由触发器做好,这样就可以节省时间,并且可以创建一个丰富的报表,这个我们后面会提到。

设计一个登陆触发器

一旦表格设计好了以后,接下来的步骤就是创建一个系统级的登陆触发器,它可以在发生登陆时间的时候记录尽可能多的信息。我创建的登陆审计触发器。正像你看到的一样,我在这个表中创建了一些在登陆时可以使用到的信息值:

用户—建立Oracle会话的Oracle用户ID

会话ID—使用Oracle的SYS context功能从v$session 表中直接获取Oracle的会话ID。主机—使用Oracle的SYS context功能,在Oracle会话被创建的时候获取主机名。请注意,对于使用Oracle并行服务器或者实际应用群的时候,获取主机名是非常重要的,因为我们可能同时和许多不同的远程主机都有会话连接。

登陆时间—获取实际工作登陆的时间,精确到0.001秒。请注意我们是如何把登陆时间划分成两个区域的。产生一个登陆日期和一个登陆时间可以给最后的报表带来很强的可读性。

既然登陆触发器已经创建好了,我们就需要创建一个注销触发器来获取用户完成会话的所有信息。

设计一个注销触发器

为了使一个单独的表格同时为登陆和注销事件服务,首先就需要定位单个用户会话的登陆行。正像你想的一样,这个小技巧使得允许许多用户使用同一个用户名在同一时间登陆。为了对这个情况做限制,我使用了Oracle会话ID。你知道,在每个用户登陆Oracle的时候,Oracle就会给每个用户分配一个唯一的会话ID,并把这个ID添加到v$session表中去。我们可以像使用主键一样来使用这个会话ID,这样,这个用户在注销的时候,他的注销信息就可以更新我们的用户审计表。

现在让我们来看一看在我们使用了注销触发器后可以使用的信息。首先,我们更新用户的日志表,使它包含用户(在注销前)的最后一个活动。正像你所看见的一样,更新最后一个活动的这个工作是通过使用SYS context功能,从表v$session中获取活动属性的信息而完成的。

接下来,我们更新我们的审计表来显示在会话期间访问的最后一个程序。再一次,我们使用SYS context功能,从v$session表中选择程序属性这一列。

我们更新用户会话所访问的最后一个模块。这是通过在v$session表中选择模块这个属性列,用它的内容来填充我们的用户审计表来完成的。

最后也是最重要的一个步骤就是添加注销时间,并计算用户在会话中停留的时间。代码中显示的一样,通过使用注销时间数据类型来更新我们的用户登陆表然后计算会话所用的时间。像我早先提及的一样,预先计算每个用户会话的时间将使得审计表中的每一个记录都非常有用,因为它显示了会话过程中的持续时间。

让我们来检查一下系统能够产生的几个报表。为了符合特殊需要,你可以充实/修改一下这些报表。现在,预先计算会话所用时间就显得非常重要了:它可以创建一个更有用的报表。

 

[1] [2] 下一页  



责任编辑:lss
  相关新闻
Spring MVC framework总体分析
06年9月23日计算机二级Access答案汇总(网友提供)
06年9月计算机等级考试二级VF笔试试卷(Word版)
06年9月计算机等级考试二级Access官方标准试卷
JSF经典视图技术-Facelets 实例解析
Spring MVC framework总体分析
WebWork拦截器(Interceptor)使用方法
Oracle中国前员工述说公司高层内部纷争史
Wicket初次接触之HelloWorld
Oracle身份管理套件帮助企业进行安全管理
数据库系统工程师:NBU备份ORACLE时Code 29错误
ORACLE中用一条SQL实现其它进制到十进制的转换
06年9月23日计算机二级Access答案汇总(网友提供)
06年9月计算机等级考试二级Access官方标准试卷
06年9月23日计算机等级考试二级Access标准答案
06年9月计算机等级三级网络技术笔试试卷(Word版)
06年9月计算机等级考试二级VF笔试试卷(Word版)
Oracle中国前员工述说公司高层内部纷争史
Oracle下调数据库许可价格 以适应多芯CPU
Oracle身份管理套件帮助企业进行安全管理
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号