消息"上调用对象的事务失败 enlist"意味着什么?
当试图打开一个数据库连接的事务 Microsoft 事务服务器组件和驱动程序管理器不能登记当前事务中的数据库连接时,ODBC 驱动程序管理器将报告此错误。ODBC 驱动程序管理器数据库中登记连接当前交易记录通过调用 ODBC 驱动程序的 SQLSetConnectionAttr (SQL_ATTR_ENLIST_IN_DTC) 过程。如果 SQLSetConnectionAttr 过程调用失败,ODBC 驱动程序管理器将显示"失败登记"消息。
有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
193893
(http://support.microsoft.com/kb/193893/EN-US/
)
与 Microsoft 事务服务器使用 Oracle 数据库
当使用 Microsoft SQL Server
如果此错误时发生事务性 Microsoft 事务服务器组件正在访问 Microsoft SQL Server 数据库检查以下内容:
- 请确保 Microsoft 分布式事务 Coordinator(MS DTC) 服务已启动。
请确保在其上的系统上启动时,MS DTC 服务组件部署您 Microsoft 事务服务器。如果 Microsoft 事务服务器应用程序正在访问远程系统上的 Microsoft SQL Server 数据库,请确保 MS DTC 服务已启动该系统上也。这通常是在"无法 Enlist 错误"的原因。
执行以下步骤来检查 MS DTC 服务的状态: - 在 开始 菜单上选择设置,然后单击控制面板。
- 选择服务图标。
- 在服务列表中滚动,并确认启动 MS DTC 服务的状态。如果 MS DTC 状态为空 (不启动),您可以通过选择 MSDTC,然后单击 开始 来启动它。
- 请检查网络配置。
当事务 Microsoft 事务服务器组件在一个系统上的访问另一个系统上的 SQL Server 数据库时,MS DTC 将传播到辅助系统从第一个或主系统 DTC 事务。事务如果主系统上的 DTC 进程可以与次的系统上 DTC 进程进行通信,可以仅发生传播。DTC 进程建立远程过程调用 (RPC) 连接两个的方向这意味着系统的网络配置问题可以阻止 DTC 进程与另一个成功进行通讯。这将导致 ODBC 返回"无法登记"的错误。
通常在 Windows NT 应用程序事件日志中记录了以下的 MS DTC 事件:主: 会话绑定失败。主超时等待绑定到辅助站点。
此错误指示计算机就能够绑定到 SQL Server 上的 DTC,但该 SQL Server 上的 DTC 在 Microsoft 事务服务器上的 DTC 无法执行反向绑定到 Microsoft 事务服务器计算机。
不正确网络配置是否每次尝试连接到远程 SQL Server 数据库会导致"未能登记"的错误。如果即使 Microsoft DTC 已启动两个系统上一致地得到"未能登记"的错误,失败的最可能的原因是网络配置错误。
如果发生这种情况检查您的网络配置使用 Pingtest.bat,如下所示: - 若要创建一个名为 Pingtest.bat 的文件使用文本编辑器 (如记事本)。将以下的批处理文件命令复制到它。
echo off
REM Usage pingtest OtherMachineName
REM Must use a machine name and NOT an IP address
ping -n 1 %computername%
ping -n 1 %1
ipconfig /all
echo on
该批处理文件使用 %计算机名 %显示本地的 IP 地址。然后,它显示在运行该批处理文件时,在命令行中指定的远程计算机的 IP 地址。在调用该批处理文件,您必须指定远程计算机,而不是其 IP 地址的名称。使用计算机的名称将强制解析计算机名 MS DTC 完全一样时它绑定到远程 MS DTC 计算机执行 ping。 - Microsoft 在事务服务器上运行 Pingtest.bat 的计算机,以确定是否您可以 ping SQL Server 计算机的名称。捕获输出从批处理文件在一个文本文件中。例如对于如果 Microsoft 事务 Server 运行在计算机 A 上,并且 SQL Server 运行在计算机 B 上使用以下命令:
Pingtest B > AResults.txt
- 运行 Pingtest.bat SQL Server 计算机以确定您可以通过名称 ping Microsoft 事务服务器计算机上。 捕获输出从批处理文件在一个文本文件中。例如对于如果 Microsoft 事务 Server 运行在计算机 A 上,并且 SQL Server 运行在计算机 B 上使用以下命令:
Pingtest A > BResults.txt
- 检查以确保两台计算机可以成功地另一个的 ping 将两个文本文件的内容。
如果您使用的 TCP/IP 名称解析的主机或 Lmhosts 文件,以确保它们包含有效的计算机名到 IP 地址映射非常仔细检查这些文件。若要执行此操作检查在主机和 Winnt40\System32\Drivers\Etc 目录中 Lmhosts 文件,这两个的 Microsoft 事务服务器上的计算机和 SQL Server 一台计算机。经常,而在其他系统上的不正确,一个系统上的文件将其正确。
- 配置要使用 TCP/IP rather than 命名 SQL Server 管道。
如果您仅看到"未能登记"错误间歇性地,然后使用命名管道,而不是 TCP/IP 可能导致问题的原因。 使用命名管道可以导致间歇性"失败登记"的错误。
Microsoft 强烈建议您在配置为使用 TCP/IP rather than Named Pipes SQL Server。使用命名管道可能会导致间歇"失败来登记"的错误。 - 在 开始 菜单上选择程序,选择 Microsoft SQL Server 6.5,然后再单击 SQL 客户端配置实用工具。
- 单击 网络库 选项卡。
- 在默认网络列表的选择 TCP/IP 套接字。
- 请单击 完成。
- 检查事务超时。
该组件的事务可能由于之前已完成的数据库登记的事务超时已停止。您可以增加事务超时值,通过 Microsoft 事务服务器资源管理器。使用以下步骤来提高所用的超时值:
- 启动 Microsoft 事务服务器资源管理器,选择计算机。
- 用鼠标右键单击引发了交易记录的计算机,然后单击 属性。
- 单击 选项 选项卡并指定更长的超时值。
这是不可能是问题,除非您的事务需要很长的时间。但是,它可能有助于临时增加超时值,以消除此问题的潜在源。
当使用 Oracle
如果此错误时发生事务性 Microsoft 事务服务器组件正在访问 Oracle 数据库检查以下内容:
- 请确保 MS DTC 服务已启动。
请确保 Microsoft DTC 服务"启动了"在其部署您的 Microsoft 事务服务器组件在系统上。
若要检查其状态使用以下步骤: - 在 开始 菜单上选择设置,然后单击控制面板。
- 选择服务图标。
- 在服务列表中滚动,并确认启动 MS DTC 服务的状态。如果 MS DTC 状态为空 (不启动),您可以通过选择 MSDTC,然后单击 开始 来启动它。
- 在 Microsoft 事务服务器计算机上安装最新的 Oracle 客户端软件。
请确保包含 Microsoft 事务服务器组件在系统上安装了最新的 Oracle 7.3 或 Oracle 8 客户端软件修补程序版本。请注意常见升级包含 Oracle 数据库的系统上的 Oracle 软件,但不能升级包含 Microsoft 事务服务器组件的系统上的 Oracle 软件。您必须升级客户端系统上的 Oracle 软件。
您可以获得最新的 Oracle 修补程序 Windows NT 从 Oracle FTP 站点。请转到: - 您的 Oracle 数据库上安装最新的 Oracle 服务器软件服务器系统
如果 Microsoft 事务服务器应用程序需要访问 Windows NT 或 UNIX 系统上的 Oracle 数据库,请确保该系统上安装了最新的 Oracle 修补程序。
对于 Windows NT 从 Oracle FTP 站点,您可以获得最新的 Oracle 修补程序。请转到: - 使用 Microsoft Oracle ODBC 驱动程序。
请确保 Microsoft 事务服务器正在使用 Microsoft Oracle ODBC 驱动程序。没有其他 Oracle ODBC 驱动程序支持 Microsoft 事务服务器事务。
如果您希望使用 Microsoft 事务服务器从一个英特尔 x86 平台的交易记录,您必须安装以下 Microsoft Oracle ODBC 驱动程序之一。
收起该表格展开该表格
| MS Oracle ODBC 驱动程序 | 版本编号 | 释放辆 |
|---|
| 2.0 更新 | 2.73.7283.03 | MDAC 1.5b MDAC 1.5 c Windows NT 4.0 选项包 |
| 2.0 更新 | 2.73.7356 | ODBC 3.5 SDK |
| 2.5 | 2.573.2927 | visual 6.0 Studio 数据访问 SDK 2.0 MDAC 2.0 |
如果您希望使用 Microsoft 事务服务器,您必须安装 Microsoft Oracle ODBC 2.5 驱动程序版本 2.573.2927,从 Compaq 的 Alpha 平台的交易记录。早期版本的 Microsoft Oracle ODBC 驱动程序不支持 Compaq 的 Alpha 平台。
您可以获得 Microsoft Oracle 的 ODBC 驱动程序 2.5 中:
http://microsoft.com/data
(http://msdn.microsoft.com/dataaccess)
按照下面的"下载"链接。
如果您想要访问一个 Oracle 数据库,我们建议您使用 Microsoft Oracle ODBC 驱动程序 2.0 或更高版本的驱动程序的即使您不需要事务支持。此新的驱动程序提供了更好的性能比它替换的 Oracle 1.0 驱动程序,Microsoft Oracle ODBC 1.0 驱动程序序列化在驱动程序级别的所有活动 ; 请求是通过驱动程序单线程。将 Microsoft Oracle 2.0 和更高版本的驱动程序序列化在连接级别的所有活动。这允许不同的数据库连接到并行使用。 - 请确保启用了 Oracle XA 支持。
请检查以确保已启用 Oracle XA 事务支持。有关更多的信息,请参阅标题为"启用 Oracle XA 事务支持"部分与 Microsoft 事务服务器数据库的使用 oracle"文档中。
- 如果使用的 Oracle 7.3 确保 V $ XATRANS $ 存在。此视图应已创建安装 XA 库时。 如果不存在此视图,Oracle 系统管理员必须创建它的运行名为"XAVIEW.SQL"Oracle 提供脚本。C:\ORANT\RDBMS73\ADMIN 中找不到此文件。必须作为 Oracle 用户执行此 SQL 脚本"SYS"。
如果使用的 Oracle8 应存在于此视图。您应该不需要创建它。 - Oracle 7.3 和 Oracle8,Oracle 系统管理员必须授予 SELECT 访问公众上 DBA_PENDING_TRANSACTIONS 视图
Grant Select on V$XATRANS$ to public.
公共。 - 在 Oracle 实例管理器中,单击 高级模式 在 视图 菜单上,并在左窗格中选择"初始化参数"。在右侧窗格中选择"高级优化",然后增加"distributed_transactions"参数,以允许一次更新数据库的多并发 MTS 事务。
有关配置 Oracle XA 事务支持的详细信息,请参阅 Oracle 服务器文档。 - 请确保正确配置了 Oracle 数字字符。
警告注册表编辑器使用不当会导致严重的问题,可能会要求您重新安装操作系统。Microsoft 不能保证可以解决导致错误地使用注册表编辑器的问题。使用注册表编辑器需要您自担风险。
有关如何编辑注册表的信息查看注册表编辑器 (Regedit.exe) 或 Regedt32.exe 中的在注册表中添加和删除信息"和编辑注册表数据帮助主题中的"改变项和值"帮助主题。请注意您应该备份注册表之前对其进行编辑。
在美国以外的位于系统的用户可能需要配置 Oracle 数值型字符的支持。在 Windows NT 注册表中找到以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle
和添加此项:
"NLS_NUMERIC_CHARACTERS"=".,"
注意: 上述用引号括起来的字符串内的字符是句点和逗号,按该顺序。 - 请确保配置 Oracle 了足够的连接。
如果要为其创建到 Oracle 数据库的几个几十连接,确保 Oracle 被配置为支持附加的数据库连接。有关详细的信息请参阅部分中的标题为"配置 Oracle 到支持较大编号的连接"文档"中使用 Oracle 数据库与 Microsoft 事务服务器"。 - 请确保您具有连接到 Oracle 数据库,如果您使用 Oracle 集成安全性。
如果您使用 Oracle 集成安全性,请确保在登录 ID 和密码被授权连接到 Oracle 数据库正在运行的 MS DTC。有关详细的信息请参阅在文档中"配置集成安全性"节"与 Microsoft 事务服务器使用 Oracle 数据库"。 - 运行 TestOracleXAConfig 程序。
运行 TestOracleXAConfig 程序以确保可以成功地连接到 Oracle 数据库不使用 Microsoft 事务服务器。有关详细的信息,请参阅部分中"使用一 Oracle 数据库与 Microsoft 事务服务器"文档中标题为"测试安装和配置的 MTS 支持的 Oracle"。 - 运行该示例银行程序。
该示例银行编程,以确保可以成功地连接到 Oracle 数据库从 Microsoft 事务服务器程序的运行。有关详细的信息,请参阅部分中"使用 Oracle 数据库与 Microsoft 事务服务器"在文档中标题为"验证 Oracle 安装和配置使用在示例应用银行程序"。 - 启用 Oracle 跟踪。
oracle 是能够生成跟踪文件记录 Oracle 之间发送信息的客户端和服务器。这些跟踪文件可以是诊断问题非常有用。您可以将确保 Oracle 跟踪,如下所示: - 使您的 MTS 系统上安装该 Mtxoci.dll 是版本 1998.08.762.0 或更高版本。发布版本 1998.08.762.0 NT4 Service Pack 4 发行的版本。是的允许您启用 Oracle 跟踪和控制 Oracle 跟踪文件的位置 Mtxoci.dll 第一个版本。
- 使用资源管理器中查找并删除任何现有的 Oracle 跟踪您的系统上的文件。这些文件具有名称后缀"带.trc"以结束。通过删除任何已过时的跟踪文件,可以使其易于查找任何新创建的。
- 运行 REGEDIT 创建以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server\Local Computer\My Computer\OracleTraceFilePath
授予此注册表项下列 REG_SZ 值: 如果您希望您可能会选择一个不同的磁盘驱动器和跟踪文件的目录。 - 使用资源管理器来创建 Oracle 跟踪文件目录。在我们的示例创建"C"驱动器上的目录"OraTrace"。
- 停止 MTS 包访问 Oracle 数据库。通过停止包可以确保所有现有的 Oracle 数据库连接都将关闭,并且新的 Oracle 数据库连接打开下一个 MTS 组件时调用。这些新打开的 Oracle 数据库连接已启用的 Oracle 跟踪。
- 调用正在打开 Oracle 数据库的 Microsoft 事务服务器组件。
- 检查新创建的 Oracle 跟踪文件。
- 启用 MTS/oracle 错误跟踪
MTS 都能够捕获 Oracle 在 Windows 应用程序事件日志中的错误有关的其他信息。您可以捕获此信息,如下所示: - 运行 REGEDIT 创建以下注册表项:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\MTx.Ini\TRACE
- 停止 MTS 包访问 Oracle 数据库。通过停止包可以确保当重新启动它时该 Mtxoci.dll 执行跟踪。
- 调用正在打开 Oracle 数据库的 Microsoft 事务服务器组件。
- 使用 Windows 事件查看器检查应用程序事件日志。查找由 MTXOCI 所生成的事件。您可能会看到类似以下事件:
字符串消息: sqlld2 调用失败错误 0x849。
在 $ 八进制中显示错误值。使用计算器程序可以将错误值转换为小数。在此的示例"0x849"转换为 Oracle 错误值 2121年。
- 检查事务超时。
请考虑是否可能有 Microsoft 事务服务器组件的事务结束之前已完成的数据库登记。如果事务超时过期 Oracle 数据库登记完成之前,则可能发生这种情况。
您可以增加事务超时值,通过 Microsoft 事务服务器资源管理器。若要执行此操作使用以下步骤:
- 运行 Microsoft 事务服务器资源管理器,选择计算机。
- 用鼠标右键单击引发了交易记录的计算机,然后选择快捷菜单上的属性。
- 选择 选项 选项卡并指定更长的超时值。
这是不可能是问题,除非您的事务持续超过一分钟。但是,它可能有助于临时增加超时值,以消除此问题的潜在源。
如果您仍然可以获取此错误应执行的操作
如果您仍然遇到此错误执行此处所述的所有内容后,应在错误报告给 Microsoft 产品支持组织。请提供下列信息与您的问题报告。
- 描述问题。每次尝试使用 Microsoft 事务服务器事务或是间歇性的失败时出现"失败登记"错误吗?间歇性故障是否频率它出现?
- 描述您的应用程序和系统配置。
- 描述系统 Microsoft 事务服务器安装了应用程序组件。如果使用的 Oracle 数据库提供 Oracle 客户端软件和 Microsoft Oracle ODBC 驱动程序的版本是您使用。
- 您正在使用 Microsoft SQL 数据库或一个 Oracle 数据库吗?是与 Microsoft 事务相同的计算机上数据库服务器应用程序组件,还是在单独的计算机上吗?如果使用的 Oracle 数据库系统的哪种类型是 Oracle 数据库上安装和 $ 安装何种版本的 Oracle 软件?
- 您正在使用哪个网络传输: TCP/IP,命名管道、 IPX/SPX 等?您正在使用什么名称服务: WINS、 DNS,主机文件,等等?
- TestOracleXAConfig 程序是否运行?
如果使用的 Oracle 数据库请试着运行 TestOracleXAConfig 程序。如果将失败该程序则是有问题与 Oracle。请报告给 Oracle 客户支持的问题。 - 该示例银行程序是否运行?
请尝试使用 Microsoft SQL Server 运行该示例银行程序。如果您正在使用 Oracle 示例银行应用程序不运行数据库,与 Oracle 吗?如果不,时遇到什么错误? - 在 Oracle 跟踪文件中报告了什么错误?
如果使用的 Oracle 数据库有哪些信息是 Oracle 跟踪文件中存在?若要捕获此信息,第一个查找和删除所有现有的 Oracle 跟踪系统中的文件。这些文件具有带.trc 扩展名结尾的名称。删除所有现有的跟踪文件后,运行失败 Microsoft 事务服务器组件,并为 Microsoft 提供的 Oracle 跟踪文件的内容。 - 在 Windows NT 事件日志中报告了什么错误?
请检查 Windows NT 事件日志,并报告处或其附近出现故障时记录的所有 DTC 事件。 - 您是否正在使用 Oracle 集成安全性?
报告您是否使用了 Oracle 集成安全性。 - 事务超时值是什么?
请告诉 Microsoft 中,Microsoft 事务服务器配置的事务超时值。
有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
193893
(http://support.microsoft.com/kb/193893/EN-US/
)
与 Microsoft 事务服务器使用 Oracle 数据库
文章编号: 191168 - 最后修改: 2003年3月14日 - 修订: 2.0
这篇文章中的信息适用于:
- Microsoft Transaction Services 1.0
- Microsoft Transaction Services 2.0
| kbmt kbdatabase kberrmsg kbfaq kbinfo kbmts kbmts100 kbmts200 KB191168 KbMtzh |
机器翻译注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版:
191168
(http://support.microsoft.com/kb/191168/en-us/
)
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。