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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - 数据库管理 » 数据库维护 » 使用调度和事件自动完成任务 » 调度和事件内部

 

数据库服务器如何检查调度事件

在数据库服务器启动时以及每当调度的事件处理程序完成时,都会进行调度的事件时间的计算。

根据在调度定义中指定的增量,将增量与上一开始时间累加来计算下一个调度时间。如果执行事件处理程序花费的时间比指定的增量大,导致下一时间早于当前时间,则数据库服务器会按指定的增量计算下一个调度时间,直到下一个调度时间是将来的时间。

例如,其执行需要六十五分钟且被请求在 9:00 和 5:00 之间每小时运行一次的事件处理程序,将每隔两小时运行一次,即在 9:00、11:00、1:00 等时间运行。

为运行一个在 9:00 和 5:00 之间工作并在下一次执行之前延迟一段时间的进程,您可以将处理程序定义为在其完成时间超过之前不断循环,并且每次迭代之间都有一个 WAITFOR 语句。

如果您正在间歇地运行数据库服务器,而且不是在调度时间运行,则在启动时事件处理程序不会运行。而是会在启动时计算下一个调度时间。例如,如果您将一个备份预定在每天凌晨一点发生,但在每个工作日结束时都会关闭数据库服务器,则该备份永远也不会发生。

如果一个事件的下一调度执行时间是在一小时以后,则数据库服务器将以小时为基础重新计算它的下一个调度时间。这允许事件在系统时钟调整(系统时钟更改为 Daylight Saving Time 或者由 Daylight Saving Time 更改为其它)时按预期触发。