【问题标题】:Two cron jobs connecting to same database simultaneously causes connection failure两个 cron 作业同时连接到同一个数据库导致连接失败
【发布时间】:2018-04-05 20:46:22
【问题描述】:

我有两个通过 cron 选项卡安排的数据 ETL 作业 (Pentaho)。一个每 5 分钟运行一次,另一个每小时运行一次。两个作业都尝试连接到同一个数据库。当这些作业的运行时间重叠时,其中一个作业失败并且日志显示“连接数据库时出错”。任何人都可以分享一些关于这个问题的潜在根本原因的想法吗?

【问题讨论】:

  • 可能由于已经运行的作业的长时间运行事务而超时?两个作业是否修改同一张表?
  • 由 cron 启动重要还是同时启动重要?如果没有,请删除该标签!
  • @DirkTrilsbeek 你的问题,他们不查询同一张表。
  • @UlrichEckhardt 感谢您的回复。这是个好建议。我注意到了这个问题,因为这些作业是由 cron 触发的。也许我可以尝试同时运行它们以查看 cron 选项卡是否重要。
  • @nkgxgongxi 可能是数据库的会话限制?你真的得到了连接超时,还是在某个地方有 ORA 消息?例如,ORA-02391 表明已达到用户限制。您还可以查看 oracle 跟踪日志,看看错误发生的时间是否正确。

标签: oracle cron pentaho


【解决方案1】:

根据时间同步 ETL 通常不是一个好主意。我们在表锁定、创建后截断或删除记录、ETL 在先前正确完成之前开始等方面遇到了很多问题。

使用 Pentaho,您可以编写作业来编排运行转换。

在您的情况下,我会编写一个每 5 分钟运行一次的作业,执行第一个转换,然后运行 ​​12 次以上的第二个转换。

执行此操作的另一种方法是运行可能作为主作业的子作业失败的两个作业。子作业完成后,您可以捕获错误,等待 6 或 7 分钟,然后再次尝试重新启动。如果您这样做,请放置一个计数器以将重新启动限制为 4 或 5,并在连续失败的情况下向您发送邮件。

【讨论】:

  • 感谢您的回复。我认为问题在于这两个工作具有不同的业务含义,因此很难在一个 Pentaho 工作中同时维持这两个工作。此外,它们都不会写入数据库,而只是尝试查询数据。
  • 我的意思是把这两个工作合二为一。相反,我正在考虑编写一个超级作业,其职责是运行另外两个,在检查不会有同步问题之后。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 2019-08-11
相关资源
最近更新 更多