理论教育 如何使用Oracle系统触发器优化数据库管理与开发

如何使用Oracle系统触发器优化数据库管理与开发

时间:2023-10-30 理论教育 版权反馈
【摘要】:系统触发器是在数据库系统事件或DDL事件发生时激活运行的触发器。系统触发器有数据库级和模式级两种。系统触发器触发事件的种类见表12.5。表12.5系统触发器的触发事件种类续表创建系统触发器需要具有DBA权限,所使用SQL语句的语法格式如下:下面的示例,先在HR模式下创建一个事件日志表event_log,以DBA身份连接后,再创建两个触发器来将捕获到的事件记录到这个事件日志表中。

如何使用Oracle系统触发器优化数据库管理与开发

系统触发器是在数据库系统事件或DDL事件发生时激活运行的触发器。系统触发器有数据库级和模式级两种。前者定义在整个数据库上,触发事件是数据库事件,如数据库的启动、关闭,对数据库的登录或退出。后者定义在模式上,触发事件包括模式用户的登录或退出,或对模式对象的创建、修改与删除操作(DDL事件)。系统触发器触发事件的种类见表12.5。

表12.5 系统触发器的触发事件种类

续表

创建系统触发器需要具有DBA权限,所使用SQL语句的语法格式如下:

下面的示例,先在HR模式下创建一个事件日志表event_log,以DBA身份连接后,再创建两个触发器来将捕获到的事件记录到这个事件日志表中。然后重新启动数据库,并以HR用户登录连接,查看event_log表的数据。可以发现,在数据启动时,以及以HR身份连接数据库时,event_log都有数据被记录。

上述示例中,LOGON事件触发器明确了只有登录为HR用户,才需要记录登录的事件日志信息,如果需要任何用户登录数据库时都记录信息到事件日志表,则需要将“ON HR.SCHEMA”改为“ON DATABASE”。

下面再创建一个DDL触发器,该触发器在试图删除HR的模式对象时,把执行该操作的用户信息记录到事件日志表event_log中。

在本示例中:

①RAISE_APPLICATION_ERROR(-20000,禁止删除HR模式对象!)语句:捕获了一个自定义异常,这将导致用户调用的(删除)语句执行失败,删除对象的操作将不被执行。(www.daowen.com)

②PRAGMA AUTONOMOUS_TRANSACTION语句:声明了一个自治事务,以便主事务操作(删除)失败时,触发器中的insert操作作为自治事务能单独提交,以继续完成。

③ora_dict_obj_owner、ora_dict_obj_type、ora_dict_obj_name、ora_login_user则是几个事件属性函数,分别表示被执行操作(删除)的对象的所有者、被执行操作(删除)的对象的类型、被执行操作(删除)的对象的名称,以及调用操作(删除)语句的用户名

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈