获取“ORA-XXX:未找到消息 XXX;product=RDBMS;facility=ORA”,而不是 ODAC 12c 上的自定义异常

问题描述 投票:0回答:3

在我的场景中,我通过 WCF 自定义适配器 (oracleDBBinding) 从 MS BizTalk 编排执行 Oracle 存储过程。 此过程在负面情况下会引发自定义异常(pl/sql RAISE_APPLICATION_ERROR)。

如果 BizTalk 发送端口配置为 UseAmbientTransactions = False (这意味着事务未提升到 MSDTC)我得到

发送到发送端口“MySendPort”上的适配器“WCF-Custom”且 URI 为“oracledb://myoracledb/”的消息已挂起。 错误详细信息:Microsoft.ServiceModel.Channels.Common.TargetSystemException:ORA-20901:交易:26252741.0.0 已被处理

如果 BizTalk 发送端口配置为 UseAmbientTransactions = True (这意味着事务提升到 MSDTC)我得到

发送到发送端口“MySendPort”上的适配器“WCF-Custom”且 URI 为“oracledb://myoracledb/”的消息已挂起。 错误详细信息:Microsoft.ServiceModel.Channels.Common.TargetSystemException:ORA-20901:未找到消息 20901; 产品=关系型数据库管理系统;设施=ORA ---> Oracle.DataAccess.Client.OracleException: ORA-20901: MySendPort; 产品=关系型数据库管理系统;设施=ORA

因此,正如您所看到的,当我在发送端口上启用环境事务时,异常消息会丢失。返回错误号,但消息被替换为字符串 Message XXX not fount。仅当我处理在 Oracle 端突袭的自定义异常时,才会发生这种情况,正确检索错误的用户名和密码等异常。

我想知道是否是oracle客户端+OracleMTSRecoveryService+MSDTC的配置错误,或者是oracle客户端的一个bug

为了将其放在上下文中,我将我的解决方案从 Windows 2008(物理盒)上的 BizTalk 2009 迁移到 Windows Server 2012R2(虚拟盒)上的 BizTalk 2013R2。在旧版 (BizTalk2009) 上,启用环境事务后,错误传播将按预期工作。我遇到的问题是在新的 BizTalk 2013R2 上,我有新的操作系统、新的 Oracle 客户端和新的 BizTalk 版本。所以我猜我错过了配置/权限中的某些内容,或者我正在处理 Oracle 客户端/WCF Oracle 适配器中的错误

我的环境: 操作系统:Windows 2012R2 Oracle 客户端:12c (12.1.0) 32 和 64 位版本 BizTalk版本:2013R2 OracleMTSRecoveryService:安装在 64 位 Oracle 客户端上

oracle biztalk odac biztalk-2013r2
3个回答
0
投票

因为您引发的应用程序错误导致事务回滚,然后 BizTalk 将重试并最终收到消息未找到错误(因为响应将在回滚时被丢弃)。

如果是业务异常,您不应该将其作为应用程序异常引发,而是传回包含状态的响应消息,例如Processed=OK/ERROR 以及包含业务失败的 ERROR 节点。 然后您可以在 BizTalk 中处理该响应消息。


0
投票
ORAMTS_SESS_REGISTERUCB

设置为

false
可以解决此问题。

我不完全理解为什么,因为在搜索环境变量时执行谷歌搜索仅返回单个结果 -

ORAMTS_SESS_REGISTERUCB


这可能与架构类型有关,因为我发现在使用

Oracle Services For Microsoft Transaction Server

安装

ODAC_x86
ODAC_x64
工具时会引入这一点。


0
投票

O que Ocorre?

© www.soinside.com 2019 - 2024. All rights reserved.