Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » 维护数据库 » 使用调度和事件自动完成任务

 

了解系统事件

SQL Anywhere 跟踪着多个系统事件。每个系统事件都提供一个您可以在其上挂接一组操作的挂钩。数据库服务器为您跟踪事件,并在系统事件满足提供的触发条件时执行操作(操作在事件处理程序中定义)。

有关触发条件的详细信息,请参见定义事件的触发条件

通过将事件处理程序定义为在发生选定系统事件且该事件符合定义的触发条件时执行,可以提高数据的安全性并有助于简化管理。如果在执行期间未检测到任何错误,则将提交事件处理程序的操作。如果检测到错误,将回退。

可用的系统事件如下:

  • BackupEnd   您可以使用 BackupEnd 事件类型在备份结束时执行操作。

  • 连接事件   在建立连接时 (Connect) 或连接尝试失败时 (ConnectFailed)。为安全起见,您可能希望使用这些事件。作为连接事件处理程序的替代方法,可能要考虑使用登录过程。请参见login_procedure 选项

  • DatabaseStart   您可以使用 DatabaseStart 事件类型在启动数据库时执行操作。

  • Deadlock   您可以使用 Deadlock 事件在发生死锁时执行操作。事件处理程序可以使用 sa_report_deadlocks 过程以获得有关导致死锁的条件的信息。使用 Deadlock 事件时,应配置数据库服务器以便通过将 log_deadlocks 选项设置为 On 来捕获死锁信息,并且通过使用 sa_server_option 或 -zl 服务器选项来启用 RememberLastStatement 功能。

    连接死锁和线程死锁触发 Deadlock 事件。Deadlock 事件仅能提供可通过 sa_report_deadlocks 系统过程获得的信息。但是,通过使用此事件可及时地对死锁发生作用。由于数据库服务器能够保留的与死锁相关的信息量是有限的,所以快速响应会非常重要。请参见:

  • Disconnect   您可以使用 Disconnect 事件在用户或应用程序断开连接时执行操作。

  • 可用磁盘空间   跟踪数据库文件 (DBDiskSpace)、日志文件 (LogDiskSpace) 或临时文件 (TempDiskSpace) 所在设备的可用磁盘空间。此系统事件在 Windows Mobile 上不可用。

    在磁盘空间不足时,您可能希望使用磁盘空间事件来提醒管理员。

    您可以在启动数据库服务器时指定 -fc 选项,以在数据库服务器出现文件系统已满时执行回调函数。请参见-fc dbeng12/dbsrv12 服务器选项

  • 文件大小   文件达到指定的大小。可以将此事件用于数据库文件 (GrowDB)、事务日志 (GrowLog) 或临时文件 (GrowTemp)。

    您可能希望使用文件大小事件来跟踪对数据库的异常操作或监控批量操作。

  • GlobalAutoincrement   当用 GLOBAL AUTOINCREMENT 定义的列的剩余值数目不足其范围的百分之一时,就会触发 GlobalAutoincrement 事件。基于表和提供给此事件作为参数的剩余值数目,可使用此事件为 global_database_id 选项请求新值。要获得事件中表的其余值,请使用具有 RemainingValues 参数和 TableName 参数的 EVENT_PARAMETER 函数。RemainingValues 将会返回可为该列生成的剩余值的数量,而 TableName 则会返回含有 GLOBAL AUTOINCREMENT 列(此列接近其范围末尾)的表。请参见EVENT_PARAMETER 函数 [System]

  • RAISERROR 错误   当执行一个 RAISERROR 语句时,您可以使用 RAISERROR 事件类型来执行操作。通过使用 EVENT_CONDITION 函数,可在事件处理程序中确定在 RAISERROR 语句中使用的错误号(例如,EVENT_CONDITION( 'ErrorNumber' ))。

  • 空闲时间   数据库服务器已经空闲了指定的时间 (ServerIdle)。您可能希望使用此事件类型在安静期间执行例行的维护操作。

  • 数据库镜像   当主服务器与镜像服务器或仲裁服务器之间的连接中断时,将会触发 MirrorServerDisconnect 事件。要获得断开连接的服务器的名称,请使用具有 MirrorServerName 参数的 EVENT_PARAMETER 函数。请参见EVENT_PARAMETER 函数 [System]

    只要服务器具有数据库的所有权,便会触发 MirrorFailover 事件。例如,在服务器初次启动并确定其将会具有数据库时,便会触发该事件。当以前起镜像作用的服务器确定主服务器已关闭,并在与仲裁服务器协商之后确定其应拥有所有权时,也会触发该事件。

    当前正在充当镜像服务器的服务器不会触发事件,因为其数据库备份仍处于启动状态。同样,不能将镜像事件定义为在仲裁服务器上执行,因为事件仅在定义它们的数据库环境中运行,并且仲裁服务器也不会使用要被镜像的数据库副本。请参见数据库镜像系统事件


定义事件的触发条件