Oracle触发器6(建立系统事件触发器)

简介: Oracle触发器6(建立系统事件触发器)(2012-02-14 09:23:36) 转载▼

Oracle触发器6(建立系统事件触发器)

(2012-02-14 09:23:36)
<SCRIPT. $tag="触发器,建立,用于,事件,例程" $tag_code="64e2a8d9ae7359def02feebdbe14d783" $r_quote_bligid="71806002010108pu" $worldcup="0" var $worldcupball="0" ; < SCRIPT. 标签:

触发器

建立

用于

事件

例程

分类: 工作

前提要:系统时间触发器是指基于Oracle系统事件(LOGIN登录  STARTUP启动)所建立的触发器,通过使用系统事件触发器,提供了跟踪系统或数据库变化的机制。

 

1.常用事件属性函数

建立系统触发器要用到的:

  • ora_client_ip_address:用于返回客户端的IP地址
  • ora_database_name:用于返回当前数据库名
  • ora_des_encrypted_password:用于返回DES加密后的用户口令
  • ora_dict_obj_name:用于返回DDL操作所对应的数据库对象名
  • ora_dict_obj_name_list(name_list_ OUT ora_name_list_t):用于返回字事件中被修改的对象名列表
  • ora_dict_obj_owner:用于返回DDL操作所对应的对象的所有者名。
  • ora_dict_obj_ower_list(ower_list OUT ora_name_list_t):用于返回在事件中被修改对象的所有者列表
  • ora_dict_obj_type:用于返回DDL操作所对应的数据库对象的类型。
  • ora_grantee(user_list OUT ora_name_list_t):用于返回授权时事件授权者。
  • ora_instance_num:用于返回历程号。
  • ora_is_alter_column(column_name IN VARCHAR2):用于检测特定列是否被修改
  • ora_is_creating_nested_table:用于检测是否正在建立嵌套表
  • ora_is_drop_column(column_name IN VARCHAR2):用于检测特定列是否被删除
  • ora_is_servererror(error_number):用于检测是否返回了特定Oracle错误。
  • ora_login_user:用于返回登录用户名
  • ora_sysevent :用于返回触发 触发器的系统时间名。

 

 

2.建立例程启动和关闭触发器:

为了跟踪例程启动和关闭事件,可以分别建立例程启动触发器和历程关闭触发器

为了记载历程启动和或关闭事件和时间,首先建立事件表event_table:

 

 

conn sys/oracle as sysdba

create table event_table(event varchar2(30),time date);

 

在建立了事件表event_table之后,就可以在触发器中引用该表了。

例程启动触发器和关闭触发器只有特权用户才能建立例程启动触发器只能使用AFTER关键字,而例程关闭触发器只能使用BEFORE关键字

CREATE OR REPPLACE TRIGGER tr_startup

AFTER STARTUP ON DATABASE

BEGIN

INSERT INTO event_table VALUES(ora_sysevent,SYSDATE);

END;

/

 

CREATE OR REPLACE TRIGGER tr_shutdown

BEFORE SHUTDOWN ON DATABASE

BEGIN

INSERT INTO event_table VALUES(ora_sysevent,SYSDATE);

END;

/

 

在建立了tr_startup触发器之后,当打开数据库之后会执行该触发器相应代码,在建立触发器tr_shutdown之后,在关闭例程之前,会执行触发器的相应代码,但SHUTDOWN ABORT(关闭数据库)不会触发该触发器。

 

 

 

3.建立登录和退出触发器

为了记载用户登录和退出事件,可以分别建立登录和退出触发器。为了记载登录用户和退出用户的名称。时间和IP地址,应该首先建立专门存档登录和退出的信息表LOG_TABLE

 

conn sys/oracle as sysdba

CREATE TABLE log_table(

username VARCHAR2(20),login_time DATE,

logoff_time DATE,address VARCHAR2(20)

);

 

在建立了LOG_TABLE表之后,就可以在触发器中引用该表了。

要用特权身份用户来建立登录和退出触发器,并且登录触发器只能使用AFTER关键字,而退出触发器用BEFORE

 

CREATE OR REPLACE TRIGGER tr_logon

AFTER LOGON ON DATABASE

BEGIN

INSERT INTO log_table(username,logon_time,address)

VALUES(ora_login_user,SYSDATE,ora_client_ip_address);

END;

/

 

CREATE OR REPLACE TRIGGER tr_logoff

BEFORE LOGOFF ON DATABASE

BEGIN

INSERT INTO log_table(username,logoff_time,address)

VALUES(ora_login_user,SYSTEM,ora_client_ip_address);

END;

/

在建立了触发器tr_logon之后,当用户登录到数据库之后,会执行其触发器代码;在建立了触发器tr__logoff之后,当用户断开数据库连接之前,会执行其触发器代码。

 

4.建立DDL触发器

 

为了记载系统所发生的DDL事件(CREATE,ALTER,DROP),可以建立DDL触发器,为了记载DDL时间信息,应该建立专门的表,以便存放DDL事件信息。

conn sys/oracle as sysdba

CREATE TABLE event_ddl(

event VARCHAR2(20),username VARCHAR2(10),

owner VARCHAR2(10),obbjname VARCHAR2(20),

objtype VARCHAR2(10),time DATE

);

 

在建立了表event_ddl之后,就可以在触发器中引用该表,为了记载DDL事件,应该建立DDL触发器,注意,当建立DDL触发器时,必须使用AFTER关键字。

 

CREATE OR REPLACE TRIGGER tr_ddl

AFTER DDL ON scott.schema

BEGIN

INSERT INTO event_ddl VALUES(

ora_sysevent,ora_login_user,ora_dict_obj_owner,ora_dict_obj_name,ora_dict_obj_type,SYSDATE

);

END;

/

 

当建立了触发器tr_dll之后,如果在SCOTT方案对象上执行了DDL操作,则会将该新息记载到表event_ddl中。

相关文章
|
4月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
66 4
|
4月前
|
SQL 存储 Oracle
Oracle系列十四:触发器
Oracle系列十四:触发器
|
4月前
|
存储 前端开发 JavaScript
简单实现一个事件触发器
简单实现一个事件触发器
69 0
|
14天前
|
消息中间件 运维 Serverless
函数计算产品使用问题之如何判断从函数调用获取到的事件是由哪个触发器发出的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
Oracle 关系型数据库 Java
实时计算 Flink版产品使用问题之如何实现Oracle到其他系统的实时同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
运维 Serverless 数据处理
函数计算产品使用问题之OSS触发器是否只支持事件处理函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
Oracle 关系型数据库 Unix
SAP系统拷贝 UNIX + Oracle
SAP系统拷贝 UNIX + Oracle
39 1
|
4月前
|
SQL 数据库
10. 触发器和事件
10. 触发器和事件
|
4月前
|
SQL 缓存 Oracle
Oracle系统全局区:数据王国的“大舞台”
【4月更文挑战第19天】Oracle的系统全局区(SGA)是数据库实例的核心内存区域,包含共享信息和数据结构,对并发访问和性能优化至关重要。SGA包括共享池(存放SQL和PL/SQL代码)、缓冲区缓存(存储数据块以减少I/O)和重做日志缓冲区(记录数据库更改以保证一致性)。还有大型池和Java池等组件,共同确保数据库高效稳定运行。了解SGA的结构和调优对DBA和开发者至关重要。
|
4月前
|
监控 Oracle 安全
Oracle用户事件触发器:数据库世界的“福尔摩斯”
【4月更文挑战第19天】Oracle用户事件触发器是数据库中的监控机制,类似于“福尔摩斯”,在用户执行特定操作时自动触发。它们关注用户行为而非数据变化,可用于权限检查、安全监控、性能优化等。通过DDL语句创建,需注意逻辑清晰、条件合适及定期更新,以适应数据库变化和业务发展。掌握其使用能有效保障数据安全与稳定。

推荐镜像

更多