Oracle 我应该如何实现数据库cron作业记录器?

Oracle 我应该如何实现数据库cron作业记录器?,oracle,architecture,plsql,Oracle,Architecture,Plsql,我使用PHP和Oracle,crontab在预定时间执行PHP脚本。我当前的日志/审核解决方案涉及简单的日志文件。我想将cron执行日志保存到数据库中 现在我正在尝试设计流程,以便在cron作业开始时,我在CronExecution表中创建一条记录。然后每次我想为该cron记录一些东西时,我都会将一条记录放在CronEvent表中,该表将具有CronExecution表的外键 我计划使用PRAGMA autonomypl/sql过程记录所有事件。通过这个过程,我将能够以一致的方式记录其他pl/s

我使用PHP和Oracle,crontab在预定时间执行PHP脚本。我当前的日志/审核解决方案涉及简单的日志文件。我想将cron执行日志保存到数据库中

现在我正在尝试设计流程,以便在cron作业开始时,我在
CronExecution
表中创建一条记录。然后每次我想为该cron记录一些东西时,我都会将一条记录放在
CronEvent
表中,该表将具有
CronExecution
表的外键

我计划使用
PRAGMA autonomy
pl/sql过程记录所有事件。通过这个过程,我将能够以一致的方式记录其他pl/sql过程中的事件,也可以从我的PHP代码中记录事件

为了使它更加健壮,我的计划是在数据库日志调用失败的情况下使用回退功能将错误记录到文件中


还有其他人写过类似的东西吗?根据你的经验,你有什么建议?

是的,我已经做过好几次了

CronExecution
表是个好主意。但是,我不知道您是否真的需要创建
CronEvent
表。相反,只需给自己一个“状态”栏并更新该栏即可

您会发现,这使故障切换到文件变得更容易。当您构建大量的
CronExecutions
时,您可能对
CronEvents
不太感兴趣,而对执行的完整状态更感兴趣

将所有更新调用包装到存储过程中。你肯定是对的


CronExecution
中包含一个“时间表”将很方便。很容易有很多cron作业,而无法连接“这需要多长时间?”和“这应该在什么时候运行”上的点。在完成一项工作时加入“下一次计划跑步”会让你的生活更轻松。

是的,我已经做过好几次了

CronExecution
表是个好主意。但是,我不知道您是否真的需要创建
CronEvent
表。相反,只需给自己一个“状态”栏并更新该栏即可

您会发现,这使故障切换到文件变得更容易。当您构建大量的
CronExecutions
时,您可能对
CronEvents
不太感兴趣,而对执行的完整状态更感兴趣

将所有更新调用包装到存储过程中。你肯定是对的


CronExecution
中包含一个“时间表”将很方便。很容易有很多cron作业,而无法连接“这需要多长时间?”和“这应该在什么时候运行”上的点。在作业完成时包含“下一次计划运行”将使您的生活更加轻松。

您将需要阅读DBMS\u SCHEDULER上的文档。
要实现它需要一点工作(什么不是?),但它允许您从数据库中控制计划的和一次性的作业。这包括操作系统级作业。

您需要阅读有关DBMS\u调度程序的文档。
要实现它需要一点工作(什么不是?),但它允许您从数据库中控制计划的和一次性的作业。这包括操作系统级别的作业。

那么,你是不是建议我在作业中添加一个CLOB列,将每条消息附加到其中?然后在最后将状态设置为complete或其他什么,在这一点上我可以从CLOB检索整个执行日志?你也了解我关于在数据库中有某种调度属性的想法。我使用过Quartz for Java,我很喜欢,但不确定在使用PHP时,我能从crontab接管多少功能。但添加带有开始/停止/下一次运行详细信息的信息字段是一个好主意。谢谢CLOB,VARCHAR(最大值),数据库中的任何内容。根据我的经验,我很少需要
CronEvent
级别的任何东西。只需在每条日志消息的开头打印时间,就可以了。现在,您不需要在数据库中进行配置,但是当您开始编写代码来观看“CronLog”时,您想知道的最大问题是“X上次运行的时间是什么时候,它花了多长时间,什么时候会再次运行”那么,您是不是建议我在完成作业时添加每个消息的CLOB列?然后在最后将状态设置为complete或其他什么,在这一点上我可以从CLOB检索整个执行日志?你也了解我关于在数据库中有某种调度属性的想法。我使用过Quartz for Java,我很喜欢,但不确定在使用PHP时,我能从crontab接管多少功能。但添加带有开始/停止/下一次运行详细信息的信息字段是一个好主意。谢谢CLOB,VARCHAR(最大值),数据库中的任何内容。根据我的经验,我很少需要
CronEvent
级别的任何东西。只需在每条日志消息的开头打印时间,就可以了。现在,您不需要在数据库中进行配置,但是当您开始编写代码来观看“CronLog”时,您想知道的最大问题是“X上次运行是什么时候,花了多长时间,何时再次运行”