`
lovecontry
  • 浏览: 1095175 次
文章分类
社区版块
存档分类
最新评论

启动分布式事务

 
阅读更多

一、 问题现象
在执行分布式事务时,在sql server 2005下收到如下错误:

消息 7391,级别 16,状态 2,过程 xxxxx,第 16 行

无法执行该操作,因为链接服务器 “xxxxx” 的 OLE DB 访问接口 “SQLNCLI” 无法启动分布式事务。

在sql server 2000下收到如下错误:

该操作未能执行,因为 OLE DB 提供程序 ‘SQLOLEDB’ 无法启动分布式事务。

[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

OLE DB 错误跟踪[OLE/DB Provider ‘SQLOLEDB’ ITransactionJoin::JoinTransaction returned 0×8004d00a]。

二、 解决方案
1. 双方启动MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

2. 打开双方135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。

使用“telnet IP 135 ”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放。

3. 保证链接服务器中语句没有访问发起事务服务器的操作
在发起事务的服务器执行链接服务器上的查询、视图或存储过程中含有访问发起事务服务器的操作,这样的操作叫做环回(loopback),是不被支持的,所以要保证在链接服务器中不存在此类操作。

4. 在事务开始前加入set xact_abort ON语句
对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。

5. MSDTC设置
打开“管理工具――组件服务”,以此打开“组件服务――计算机”,在“我的电脑”上点击右键。在MSDTC选项卡中,点击“安全配置”按钮。

在安全配置窗口中做如下设置:

l选中“网络DTC访问”

l在客户端管理中选中“允许远程客户端”“允许远程管理”

l在事务管理通讯中选“允许入站”“允许出站”“不要求进行验证”

l保证DTC登陆账户为:NT Authority/NetworkService

6. 链接服务器和名称解析问题
建立链接sql server服务器,通常有两种情况:

l第一种情况,产品选”sql server”

EXEC sp_addlinkedserver

@server=’linkServerName’,

@srvproduct = N’SQL Server’

这种情况,@server (linkServerName)就是要链接的sqlserver服务器名或者ip地址。

l第二种情况,访问接口选“Microsoft OLE DB Provider Sql Server”或“Sql Native Client”

EXEC sp_addlinkedserver

@server=‘ linkServerName ‘,

@srvproduct=”,

@provider=’SQLNCLI’,

@datasrc=’sqlServerName’

这种情况,@datasrc(sqlServerName)就是要链接的实际sqlserver服务器名或者ip地址。

Sql server数据库引擎是通过上面设置的服务器名或者ip地址访问链接服务器,DTC服务也是通过服务器名或者ip地址访问链接服务器,所以要保证数据库引擎和DTC都能通过服务器名或者ip地址访问到链接服务器。

数据库引擎和DTC解析服务器的方式不太一样,下面分别叙述

6.1 数据库引擎
第一种情况的@server或者第二种情况的@datasrc设置为ip地址时,数据库引擎会根据ip地址访问链接服务器,这时不需要做名称解析。

第一种情况的@server或者第二种情况的@datasrc设置为sql server服务器名时,需要做名称解析,就是把服务器名解析为ip地址。

有两个办法解析服务器名:

一是在sql server客户端配置中设置一个别名,将上面的服务器名对应到链接服务器的ip地址。

二是在“C:/WINDOWS/system32/drivers/etc/hosts”文件中增加一条记录:

xxx.xxx.xxx.xxx 服务器名

作用同样是把服务器名对应到链接服务器的ip地址。

6.2 DTC
不管哪一种情况,只要@server设置的是服务器名而不是ip地址,就需要进行名称解析,办法同上面第二种办法,在hosts文件中增加解析记录,上面的第一种办法对DTC不起作用。

如果@server设置的是ip地址,同样不需要做域名解析工作。

分享到:
评论

相关推荐

    【数据库管理】SQLServer链接服务器使用提示“访问接口 "SQLNCLI10" 无法启动分布式事务”的设置方式

    本文档详细介绍了当SQL Server数据库链接服务器使用提示“访问接口 "SQLNCLI10" 无法启动分布式事务”的错误时的解决方法。主要针对的是在服务器A的数据库实例中通过触发器调用服务器B的存储过程时发生的错误。 文中...

    SQLServer分布式事务问题

    SQL Server分布式事务时,在SQL Server 2005下收到如下错误: 消息 7391,级别 16,状态 2,过程 xxxxx,第 16 行 无法执行该操作,因为链接服务器 “xxxxx” 的 OLE DB 访问接口 “SQLNCLI” 无法启动分布式事务。...

    若依框架分布式事务配置和项目启动手册

    《若依框架分布式事务配置与项目启动指南》 在当今的互联网时代,高并发、大数据量的业务场景对系统的性能和稳定性提出了更高要求,而分布式事务则是解决这些问题的关键技术之一。若依框架作为一款广受欢迎的Java...

    分布式事务若依框架文档

    ### 分布式事务若依框架文档 #### 一、分布式事务基本概念 在理解分布式事务之前,我们首先需要了解数据库事务的基本属性,即ACID特性。 - **原子性(Atomicity)**:事务中的所有操作要么全部成功,要么全部失败...

    java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip

    本项目"java+spring+mybatis+mysql+RuoYi-atomikos-实现分布式事务.zip"是一个基于若依(RuoYi)框架改造的多模块分布式事务解决方案,它利用了Atomikos这一强大的分布式事务管理器。以下将详细解析这个项目的知识点...

    分布式事务JDTX与数据库中间件集成方案.pptx

    集成JDTX的优势在于其透明化的分布式事务实现,用户无需关注底层细节,只需通过标准API即可启动分布式事务。此外,JDTX支持多种分布式事务模式,如2PC(两阶段提交)、柔性事务和Saga模式,可以根据业务场景选择最...

    分布式事务seata 资源

    1. **全局事务协调器 (Global Transaction Coordinator, GTC)**:全局事务协调器负责整个分布式事务的生命周期管理,包括启动事务、提交事务、回滚事务等操作。它维护全局事务的状态,并通过两阶段提交(2PC)协议...

    SQLServer分布式事务服务器的配置.doc

    要使用分布式事务,必须在参与的双方服务器启动 MSDTC 服务。 知识点:MSDTC 服务是 SQL Server 分布式事务的基础组件,负责管理分布式事务。 2. 打开双方 135 端口 MSDTC 服务依赖于 RPC(Remote Procedure Call...

    分布式事务.zip

    4. 开启事务注解:在需要进行分布式事务的方法上添加`@GlobalTransactional`注解,启动全局事务。 5. 实现本地事务:在业务代码中,每个服务内部需要保证本地事务的正确性,这通常通过编程式事务管理或者声明式事务...

    Atomikos实现分布式事务

    分布式事务是一种确保在多个数据库或资源之间保持数据一致性的重要技术。在现代的互联网应用中,尤其是在微服务架构中,一个业务操作可能涉及到多个独立的服务,每个服务都有自己独立的数据存储。这就需要一种机制来...

    深度解读分布式事务Seata入门到实践培训视频.zip

    1-分布式事务的介绍 2-扁平事务的演示 3-分布式事务演示 4-分布式事务理论之布鲁尔定理 5-分布式事务理论之Base理论 6-两阶段提交模型成功的流程 7-两阶段提交模型失败的流程 8-理论模型和解决思想之间的关系 9-强...

    C#(.net)分布式事务处理类及事件使用

    在.NET开发环境中,C#语言提供了强大的工具和框架来处理分布式事务,这使得开发者能够构建高效、可扩展的多数据库应用。本主题将深入探讨C#中的分布式事务处理类及事件使用,帮助你理解如何在分布式系统中实现一致性...

    .NET简谈事务、分布式事务处理

    ### .NET中的事务与分布式事务处理 #### 一、引言 事务处理是现代软件开发中不可或缺的一部分,尤其是在处理数据库操作或需要确保一系列操作原子性的场景下。.NET框架提供了强大的事务支持,允许开发者轻松地在不同...

    springboot + dubbo + LCN分布式事务 demo

    【描述】这个demo涵盖了SpringBoot作为微服务启动框架,Dubbo作为服务治理组件,以及LCN作为分布式事务协调器的集成应用。通过这个实例,开发者可以学习如何在微服务架构下处理跨服务的事务一致性问题,确保业务数据...

    springcloud整合分布式事务框架TX-LCN

    在现代的微服务架构中,分布式事务处理是一个关键的挑战。Spring Cloud作为一款强大的微服务治理框架,提供了许多工具和组件来帮助开发者构建云原生应用。本文将深入探讨如何在Spring Cloud环境中整合分布式事务框架...

    tx-manager.rar(lcn 分布式事务管理协调器)

    分布式事务在IT行业中是至关重要的一个概念,尤其是在大型企业级应用和互联网服务中。它确保了数据的一致性和完整性,即使在多台服务器或者多个数据库之间进行操作时也能做到。LCN(Local Connection Normalization...

    基于springboot整理的分布式事务及动态数据源切换

    整理的分布式事务 及动态数据源切换 基于数据库XA协议 maven 包可直接使用 maven 引入路径: <groupId>com.maple</groupId> <artifactId>DCSDataSourcesServer <version>0.0.1-SNAPSHOT 事务及数据源标签...

    分布式事务-seata0.9版本(springboot-dubbo-seata-zk).zip

    然后,根据项目的文档指导,配置相关服务和环境变量,最后启动Seata Server,运行微服务应用程序,并测试其分布式事务功能。 通过深入理解和实践这个项目,你可以了解到分布式事务处理的原理和实践,包括两阶段提交...

    分布式事务难题在微服务架构下的解法和标准化1

    2. **事务协调器**:提供一个中心化的事务协调服务,负责整个分布式事务的生命周期管理,包括事务的启动、提交、回滚和监控。 3. **事务日志**:记录事务的执行情况和状态,用于恢复和故障排查。 4. **事务隔离...

    解决分布式事务详细文档

    分布式事务是处理跨越多个数据库或服务的复杂操作的关键技术,特别是在两个系统之间进行数据传输时。本文档将深入探讨如何实现分布式事务,并提供一个具体的示例来说明其工作原理。 首先,分布式事务的运行需要微软...

Global site tag (gtag.js) - Google Analytics