我们有一个 24x7 应用程序,可以处理数十个 WF4 实例。
我们成功地实现了持久化和恢复策略,使用 SQL 实例存储持久化 OnIdle,在受控关机中等待该状态,并在恢复中重新加载。
我们需要迁移到 ORACLE,并且使用了 DevArt 实例存储,并且相同的代码存在一些问题。
到目前为止,我们仍在坚持OnIdle,但现在我们必须在受控关闭时卸载才能在恢复中加载。
当我们想到可能出现的"不那么温和"的关闭时,我们的恐惧就来了。
如果持久化实例无法达到受控关闭方法,则未卸载它们怎么办?如何恢复它们?有人遇到过同样的情况吗?
找到了,
它可以通过 ORACLE Devart 实例存储来完成。问题是OracleInstanceStoreLogic的DevArt dotConnect包中的一个错误,该错误将锁定过期时间飙升至2037年,不允许再次加载实例。
而不是
新锁过期 := 系统日期 + p_lockTimeout/24*60*60;
应该是
newLockExpiration := sysdate + p_lockTimeout/(24*60*60);
我已经向 DevArt 人员报告了该问题,以便在下一次更新中修复它。
我对"节拍"的答案有一个重要的补充:缺少括号的错误只在两个地方得到修复!具体来说,脚本"OracleInstanceStoreLogic.sql"中有一个方法"ExtendLock",它仍然具有
新锁过期 := 系统日期 + p_lockTimeout/24*60*60;
(在撰写本文时,我们有 Devart 版本 7.8.287.0,并且该错误仍然存在。这肯定会导致我们的工作流程出现问题,在添加括号后就消失了。
我刚刚向Devart提交了错误报告。