千家信息网

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

发表于:2024-10-11 作者:千家信息网编辑
千家信息网最后更新 2024年10月11日,本篇内容介绍了"Oracle中怎么建立系统事件触发器"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!<
千家信息网最后更新 2024年10月11日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 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中。

"Oracle中怎么建立系统事件触发器"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

触发器 事件 登录 系统 用户 数据 数据库 对象 时间 代码 关键 关键字 检测 信息 历程 内容 地址 所有者 更多 特权 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发2020 网站数据库文件夹导入 军人网络安全宣传周活动体悟 云霄县振凯网络技术工作室 安装启动mysql数据库 网络安全中心工程 建设网络安全态势感知平台 为什么玩游戏显示服务器不支持 打固定电话显示服务器错误 服务有保障的网络安全评估 软件开发 问题总结 小米首次激活时间显示服务器繁忙 搭建小程序需要买什么服务器 饥荒服务器如何连接 软件开发迭代周期 网络安全第一委员会 网络技术主要干什么 还原hypixel服务器ip 哪些软件可以学习网络安全 投诉天津企航网络技术有限公司 互联网教育科技项目建议书 我国图书馆特色数据库 网络安全攻防靶场的建设与思考 安全生产 电子数据库 苏州阿里云服务器开发平台 怎么连接下好的地理数据库 app组态软件开发 河南居家智慧养老软件开发 数据库为什么是关系型数据库 戴尔r720服务器光驱安装
0