【发布时间】:2020-12-11 16:04:19
【问题描述】:
我的任务是稳定遗留应用程序的一部分。这是一个有 20 年历史的 C++ 应用程序,现在使用 Oracle 12.2 数据库进行持久性(即使是 UI 代码)。两者之间的交互是使用 Oracle 调用接口 (OCI) 完成的。
目前,我正在尝试在不正常的断开连接后“修复”数据库事务(例如,在同一网络内从一个接入点更改为另一个接入点)。重新连接到数据库后,我希望客户端从上次会话中恢复事务。这样就不会回滚该事务中的更改。
我相信这将是有益的,因为我无法确定在开始新事务时执行了哪些 DML,哪些未执行。因此,恢复旧的可以查看已经执行的内容。
也许我完全离开了,但我显然愿意接受更好的建议。当然,我似乎找不到某种框架或模式,因为我正在寻找错误的关键字。
最好的问候
一月
【问题讨论】:
-
事务/会话如何断开然后重新连接?这是什么类型的应用程序?
-
如果你终止一个会话,oracle 会回滚当前未提交的事务。没了。
-
是的,@OldProgrammer 所说的:没有办法跨会话桥接未提交的事务。应用程序必须独立于数据库跟踪自己的事务状态。
-
查看 DBMS_XA,它允许跨会话暂停和恢复事务。如果我有时间,我会发布我曾经做过的 PHP 测试中的 hack 代码。我并不是说这是最好的方法;考虑一个中端解决方案可能会更好。
标签: oracle transactions oracle-call-interface occi