文件名称:时间触发器-the design and analysis of algorithms
文件大小:4.17MB
文件格式:PDF
更新时间:2024-06-29 04:38:53
达梦,DM7
13.3 事件触发器 前面表级触发器都是基于表中数据的触发器,它通过针对相应表对象的插入/删除/修改 等 DML 语句触发。DM 还支持事件触发器,包括库级和模式级触发器,这类触发器并不依赖 于某个表,而是基于特定系统事件触发的,通过指定 DATABASE或某个 SCHEMA来表示事件 触发器 的作用区域。 创建事件触发 器的用户需要 拥有 CREATE_TRIGGER 或 CREATE_ANY_TRIGGER的权限。 可以触发的事件包含以下两类: 1. DDL事件,包括 CREATE、ALTER、DROP、GRANT、REVOKE以及 TRUNCATE; 2. 系统事件,包括 LOGIN、LOGOUT、AUDIT、NOAUDIT、BACKUP DATABASE、RESTORE DATABASE、TIMER、STARTUP、SHUTDOWN以及 SERERR(即执行错误事件)。 所有DDL事件触发器都可以设置BEFORE或AFTER的触发时机,但系统事件中LOGOUT, SHUTDOWN仅能设置为 BEFORE,而其它则只能设置为 AFTER。模式级触发器不能是 LOGIN、 LOGOUT、SERERR、BACKUP DATABASE、RESTORE DATABASE、STARTUP和 SHUTDOWN 事件触发器。 与数据触发器不同,事件触发器不能影响对应触发事件的执行。它的主要作用是帮助管 理员监控系统运行发生的各类事件,进行一定程度的审计和监视工作。 13.4 时间触发器 从 DM7开始,触发器模块中新增了一种特殊的事件触发器类型,就是时间触发器,时间 触发器的特点是用户可以定义在任何时间点、时间区域、每隔多长时间等等的方式来激发触 发器,而不是通过数据库中的某些操作包括 DML、DDL操作等来激发,它的最小时间精度为 分钟。 时间触发器与其它触发器的不同只是在触发事件上,在 PL/SQL语句块(BEGIN和 END 之间的语句)的定义是完全相同的。 时间触发器的创建语句如下: CREATE [OR REPLACE] TRIGGER 触发器名 WITH ENCRYPTION AFTER TIMER ON DATABASE {时间定义语句} BEGIN PL/SQL语句 END; 时间定义语句的语法规则较多,具体可参考《DM_SQL》中时间触发器相关章节。 下面的例子在每个月的第 28 天,从早上 9 点开始到晚上 18 点之间,每隔一分钟就打 印一个字符串“Hello World”。 CREATE OR REPLACE TRIGGER timer2 AFTER TIMER ON DATABASE FOR EACH 1 MONTH DAY 28 FROM TIME '09:00' TO TIME '18:00' FOR EACH 1 MINUTE str VARCHAR; BEGIN PRINT 'HELLO WORLD'; END; / 时间触发器实用性很强,如在凌晨(此时服务器的负荷比较轻)做一些数据的备份操作,