Oracle中怎么建立系统事件触发器

2023-10-18 1238阅读

ora_login_user:用于返回登录用户名 ora_sysevent :用于返回触发 触发器的系统时间名。“Oracle中怎么建立系统事件触发器”的内容就介绍到这里了,感谢大家的阅读。

本篇内容介绍了“Oracle中怎么建立系统事件触发器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前提要:系统时间触发器是指基于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 sysdbacreate table event_table(event varchar2(30),time date);在建立了事件表event_table之后,就可以在触发器中引用该表了。例程启动触发器和关闭触发器只有特权用户才能建立,例程启动触发器只能使用AFTER关键字,而例程关闭触发器只能使用BEFORE关键字CREATE OR REPPLACE TRIGGER tr_startup

AFTER STARTUP ON DATABASE

BEGININSERT INTO event_table VALUES(ora_sysevent,SYSDATE);END;/CREATE OR REPLACE TRIGGER tr_shutdown

BEFORE SHUTDOWN ON DATABASE

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

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

为了记载用户登录和退出事件,可以分别建立登录和退出触发器。为了记载登录用户和退出用户的名称。时间和IP地址,应该首先建立专门存档登录和退出的信息表LOG_TABLEconn sys/oracle as sysdbaCREATE 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

BEGININSERT 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

BEGININSERT 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 sysdbaCREATE 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

BEGININSERT 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操作,则会将该新息记载到表ev开发云主机域名ent_ddl中。“Oracle中怎么建立系统事件触发器”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注开发云网站,小编将为大家输出更多高质量开发云主机域名的实用文章!

Oracle中怎么建立系统事件触发器
(图片来源网络,侵删)

本文从转载,原作者保留一切权利,若侵权请联系删除。

《Oracle中怎么建立系统事件触发器》来自互联网同行内容,若有侵权,请联系我们删除!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]