Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语句

CREATE EVENT 语句


说明 

此语句用于定义事件及其自动执行预定义操作的关联处理程序。另外,还用于定义调度操作。

语法 

CREATE EVENT event-name
TYPE event-type
         [ WHERE trigger-condition [ AND trigger-condition ] ... ]
    | SCHEDULE schedule-spec, ... ]
ENABLE | DISABLE ]
AT { CONSOLIDATED | REMOTE | ALL } ]
HANDLER
      BEGIN
...
     END ]

event-type :
  BackupEnd   | "Connect"
ConnectFailed  | DatabaseStart
DBDiskSpace | "Disconnect"
GlobalAutoincrement | GrowDB
GrowLog     | GrowTemp
LogDiskSpace   | "RAISERROR"
ServerIdle     | TempDiskSpace

trigger-condition :
event_condition( condition-name ) { = | < | > | != | <= | >= } value

schedule-spec :
schedule-name ]
   { START TIME start-time | BETWEEN start-time AND end-time }
   [ EVERY period { HOURS | MINUTES | SECONDS } ]
   [ ON { ( day-of-week, ... ) | ( day-of-month, ... ) } ]
   [ START DATE start-date ]

event-name | schedule-name : identifier

day-of-week :        string

day-of-month | value | period :   integer

start-time | end-time :      time

start-date :         date

参数 

CREATE EVENT 子句    事件名称是一个标识符。事件都有创建者,即创建事件的用户。事件处理程序只能在创建者的许可下执行。这与存储过程的执行是一样的。您不能创建由其他用户所拥有的事件。

TYPE 子句    可以指定带可选 WHERE 子句的 TYPE 子句,或者指定 SCHEDULE。

event-type 是所列出的一组系统定义事件类型中的一种。事件类型不区分大小写。要指定该 event-type 触发事件的条件,请使用 WHERE 子句。有关未在下面列出的事件类型的说明,请参见选择系统事件

WHERE 子句    此触发器条件定义事件在什么情况下触发。例如,如果希望在含有事务日志的磁盘上有 80% 以上已满时采取行动,请使用以下触发器条件:

...
WHERE event_condition( 'LogDiskSpacePercentFree' ) < 20
...

event_condition 函数的参数必须对该事件类型有效。

可以使用多个 AND 条件来构成 WHERE 子句,但不能使用 OR 条件或其它条件。

有关有效参数的信息,请参见 EVENT_CONDITION 函数 [系统]

SCHEDULE 子句    此子句指定调度的操作何时发生。时间序列充当事件处理程序中定义的关联操作的一组触发器条件。

对给定事件及其关联的处理程序,可以定义多个调度。这样可以实现复杂的调度。有多个调度时必须提供调度名称,而仅提供一个调度时,这是可选的。

如果调度事件的定义中含有 EVERY 或 ON,则调度事件将反复出现。如果未使用这些保留字,则事件最多执行一次。如果试图创建启动时间已过去的非反复出现的调度事件,就会产生错误。

当非反复出现的调度事件过去后,将删除其调度,但不删除事件处理程序。调度事件的时间从调度创建时开始计算,并在事件处理程序完成执行时重新计算。计算下一次事件时间的方法是,检查事件的调度并找到即将到来的下一次调度时间。如果指示事件处理程序在 9:00 和 5:00 之间每隔一小时运行一次,并且它需要 65 分钟来执行,则它将分别在 9:00、11:00、1:00、3:00 和 5:00 时运行。如果希望重叠执行,必须创建多个事件。

以下是调度定义的子句:

每当调度事件的处理程序完成后,即开始计算下一个调度时间和日期。

  1. 如果使用了 EVERY 子句,请查看下一个调度时间是否在当天,以及是否在 BETWEEN ... AND 范围之内。如果是,那就是下一个调度时间。

  2. 如果下一个调度时间不在当天,请查找下一个执行事件的日期。

  3. 查找指定日期的 START TIME,或 BETWEEN ... AND 范围的开始时间。

ENABLE | DISABLE    缺省情况下,事件处理程序被启用。指定 DISABLE 后,即使是在调度时间内或满足触发条件时,事件处理程序也不会执行。但是,TRIGGER EVENT 语句 会导致被禁用的事件处理程序执行。

AT 子句    如果要在 SQL Remote 设置中的远程或统一数据库中执行事件,可以使用此子句限制在哪一个数据库中处理事件。缺省情况下,所有数据库都可以执行事件。

HANDLER 子句    每个事件都有一个处理程序。

用法 

主要有两种使用事件的方式:

事件定义包括两个截然不同的方面。触发器条件可以是一个事件,如磁盘使用超出了定义的阈值。调度是一组时间,其中每个时间充当一个触发器条件。当满足触发器条件时,执行事件处理程序。事件处理程序包含一个或多个在复合语句 (BEGIN... END) 内指定的操作。

如果未提供触发器条件或调度说明,则只有显式 TRIGGER EVENT 语句可以触发事件。在开发中,可能需要使用 TRIGGER EVENT 来开发和测试事件处理程序,并在测试完成后添加调度或 WHERE 子句。

事件错误记录到数据库服务器主控台。

触发事件处理程序后,服务器通过使用 event_parameter 函数来使上下文信息(比如导致事件被触发的连接 ID)可供事件处理程序使用。有关 event_parameter 的详细信息,请参见 EVENT_PARAMETER 函数 [系统]

权限 

必须具有 DBA 权限。

在事件所有者的许可下,事件处理程序在一个单独的连接上执行。要使用 DBA 以外的权限执行,可以从事件处理程序内部调用过程:过程用其所有者的权限来执行。这个单独的连接不计入个人数据库服务器只能有 10 个连接的限制中。

副作用 

自动提交。

如果在执行期间未检测到任何错误,则将提交事件处理程序的操作。如果检测到错误,将回退。

另请参见 
标准和兼容性 
示例 

指示数据库服务器在每天凌晨 1 点,使用在 Windows NT 计算机上找到的第一个磁带驱动器执行自动磁带备份。

CREATE EVENT DailyBackup
SCHEDULE daily_backup
START TIME '1:00AM' EVERY 24 HOURS
HANDLER
   BEGIN
      BACKUP DATABASE TO '\\\\.\\tape0'
      ATTENDED OFF
   END

指示数据库服务器从星期一到星期五,在每天上午 8 点到下午 6 点,每隔一小时执行一次自动事务日志备份。

CREATE EVENT HourlyLogBackup
SCHEDULE hourly_log_backup
BETWEEN '8:00AM' AND '6:00PM'
EVERY 1 HOURS ON
   ('Monday','Tuesday','Wednesday','Thursday','Friday')
HANDLER
   BEGIN
      BACKUP DATABASE DIRECTORY 'c:\\database\\backup'
      TRANSACTION LOG ONLY
      TRANSACTION LOG RENAME
   END

有关更多示例,请参见定义事件的触发条件


Collection Contents 上一页 下一页 PDF