从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表中选择模块这个属性列,用它的内容来填充我们的用户审计表来完成的。
最后也是最重要的一个步骤就是添加注销时间,并计算用户在会话中停留的时间。代码中显示的一样,通过使用注销时间数据类型来更新我们的用户登陆表然后计算会话所用的时间。像我早先提及的一样,预先计算每个用户会话的时间将使得审计表中的每一个记录都非常有用,因为它显示了会话过程中的持续时间。
让我们来检查一下系统能够产生的几个报表。为了符合特殊需要,你可以充实/修改一下这些报表。现在,预先计算会话所用时间就显得非常重要了:它可以创建一个更有用的报表。
分享到:
相关推荐
通过这种方式,Oracle的触发器可以有效地监控和记录用户的活动,为系统管理员提供宝贵的数据,帮助他们识别使用模式、检测异常行为并优化系统资源的分配。不过,这种追踪机制也有其局限性,例如无法直接获取用户会话...
总之,调试Oracle触发器是数据库开发中必不可少的一部分。通过合理利用PL/SQL Developer或其他类似的工具,结合断点、变量查看和输出日志等手段,我们可以有效地定位和解决触发器中的问题,确保数据库应用程序的稳定...
总结来说,这个Oracle创建触发器的实例展示了如何使用触发器进行权限控制和日志记录,同时提供了关于如何处理和阻止非预期的DDL操作的示例。这在大型企业系统中尤其重要,因为它们需要严格的数据安全性和审计追踪...
【Oracle触发器在软件开发中的应用】 Oracle触发器在软件开发中扮演着重要的角色,特别是在数据分析和报表制作的场景下。当系统设计中存在冗余数据以满足特定需求时,触发器可以确保这些数据的完整性,防止因更新主...
要查看登录 Oracle 数据库的用户记录,可以创建一个临时日志表,并建立一个数据库表触发器来记录用户的登录行为。 创建临时日志表 首先,需要创建一个临时日志表来存储用户的登录记录。可以使用以下 SQL 语句来...
3. **系统触发器**:Oracle 8i引入了系统触发器,它们会在特定的系统事件中触发,如数据库启动、关闭、用户登录或退出、异常错误等。这些触发器通常用于系统级别的监控和管理任务,如审计、日志记录或执行维护操作。...
### ORACLE中触发器和存储过程介绍 #### 一、Oracle简介 Oracle是一款提供数据库创建与管理功能的强大软件。它不仅支持关系型数据库,还具备对象型数据库的特点。Oracle允许用户利用自带的OUI(Oracle Universal ...
Oracle存储过程和触发器是数据库管理系统中非常重要的概念,它们在数据库设计和应用程序开发中扮演着核心角色。在这个Oracle存储过程和触发器教程中,我们将深入探讨这两个概念,以及它们如何帮助我们创建高效、安全...
Oracle触发器是数据库管理系统Oracle中的一种重要特性,它允许开发者定义特定的数据操作行为,这些行为会在数据表上执行DML(插入、更新、删除)操作时自动触发。触发器本质上是一种存储过程,与数据表紧密关联,...
2. 审计:记录用户对数据库的所有操作,以追踪活动和异常。 3. 数据完整性:实现复杂的业务规则,确保数据满足特定条件。 4. 非标准完整性规则:处理标准约束无法涵盖的逻辑。 5. 连环更新:更新相关联的多张表,...
【Oracle DML触发器在监视重要表中的作用】 Oracle数据库中的DML(Data Manipulation Language)触发器是一种强大的工具,用于在数据修改操作(插入、删除、更新)时自动执行特定的PL/SQL代码块。这些触发器可以...
Oracle存储过程和触发器是数据库管理系统Oracle中的两个关键特性,它们在数据库开发和管理中扮演着重要角色。这里我们将深入探讨这两个概念以及它们在实际应用中的工作原理。 **存储过程** 存储过程是一组预编译的...
触发器是数据库管理系统中的一个重要概念,它是一种存储过程,能够在特定事件发生时自动执行,比如当数据被插入、更新或删除...通过深入学习TP7.ppt和SQLQuery1.sql中的内容,我们可以更全面地理解和掌握触发器的运用。
### 精通Oracle核心技术和项目实战之...通过以上内容的学习,我们可以深入了解Oracle触发器的强大功能及其在实际项目中的应用价值。触发器不仅可以提高数据的安全性和完整性,还能简化开发流程,提升系统的整体性能。
### Oracle触发器应用详解 #### 一、Oracle触发器...综上所述,通过具体案例我们可以更深入地理解Oracle触发器的工作原理及其应用场景。在实际工作中,合理利用触发器可以帮助我们更好地管理和控制数据库中的数据。
Oracle触发器是数据库对象,主要用于在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行预定义的PL/...通过熟练掌握这些概念和用法,你可以有效地利用Oracle触发器来增强数据库功能并实现复杂的业务需求。
在Oracle数据库中,触发器(Triggers)是一种存储过程,它会在特定的数据库事件...总的来说,Oracle中的触发器是数据库级编程的重要工具,合理使用可以增强系统的功能和数据一致性,但需谨慎使用以避免性能和维护问题。
【Oracle触发器在科技行政纪监系统中的应用与实现】 Oracle触发器是关系型数据库管理系统Oracle中的一个重要特性,主要用于响应数据库中的特定事件,如插入、更新或删除数据。当这些事件发生时,触发器会自动执行...