SQL Server 分布式数据库MSDTC 分布式事务错误和解决方法

合集下载

MS Sql Server分布式事务解决方案

MS Sql Server分布式事务解决方案

MS Sql Server分布式事务解决方案适用环境操作系统:windows 2003数据库:sql server 2000/sql server 2005使用链接服务器进行远程数据库访问的情况一、问题现象在执行分布式事务时,在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 0x8004d00a]。

二、解决方案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),是不被支持的,所以要保证在链接服务器中不存在此类操作。

数据库分布式事务的处理与解决方案

数据库分布式事务的处理与解决方案

数据库分布式事务的处理与解决方案随着大数据时代的到来,企业和组织面临着日益增长的数据量和用户规模。

为了处理这么大规模的数据,往往需要采用分布式数据库系统。

然而,分布式数据库系统面临着一个关键的问题:如何处理分布式事务,确保数据的一致性和可靠性。

分布式事务是指涉及多个数据库的事务,通常包括多个复杂操作,并且要求这些操作在多个数据库上同时成功或失败。

在一个分布式数据库系统中,每个节点上都可以执行事务操作,这就带来了分布式事务的并发性、一致性和可靠性的挑战。

在解决分布式事务问题时,我们需要考虑以下几个方面:一致性、原子性、隔离性和持久性。

一致性指的是事务执行前后,数据库中的数据应保持一致。

原子性表示一个事务中的所有操作要么全部执行成功,要么全部失败回滚。

隔离性要求事务之间互不干扰,最终结果与串行执行的结果一致。

持久性确保事务提交后产生的结果永久保存在数据库中。

在分布式事务处理中,存在多种解决方案。

常见的解决方案包括两阶段提交(Two-Phase Commit,2PC)、三阶段提交(Three-Phase Commit,3PC)和基于消息的最终一致性(Message-based Eventual Consistency)。

首先介绍的是两阶段提交协议。

在两阶段提交中,有一个协调者和多个参与者。

协调者负责协调和控制整个事务的执行。

在第一阶段,协调者向所有参与者发送准备请求,并等待参与者的响应。

如果所有参与者都准备好了,协调者则进入第二阶段。

在第二阶段,协调者向所有参与者发送提交请求。

参与者在收到提交请求后,执行事务操作,并将询问协调者是否可以提交的回复。

最后,协调者根据参与者的回复决定是提交还是中止事务。

两阶段提交协议的优点是简单易实现,缺点则是存在阻塞问题。

在整个事务执行期间,参与者处于阻塞状态,如果协调者出现故障,整个系统可能进入死锁状态。

为了解决两阶段提交协议的问题,三阶段提交协议被提出。

三阶段提交协议在两阶段提交的基础上引入了超时机制。

在SQL SERVER中使用分布式事务全攻略(图解)

在SQL SERVER中使用分布式事务全攻略(图解)

在SQL SERVER中使用分布式事务全攻略(图解)[原创文章] 作者:cyw操作系统:Win2003 Enterprise Edition。

版本:5.2.3790 Service Pack 2 内部版本号 3790。

数据库:SQL Server 2000 企业版 + SP4 + SP4后的补丁。

版本:8.00.2187 (Intel X86) Mar 9 2006。

网络环境:两台服务器仅安装TCP/IP协议,处于相同网段,工作组可以不同,相互间Ping主机名成功,Ping IP地址也能成功。

如果不能Ping成功,请在两台服务器上安装NETBIOS协议后再重试。

如果还不行,请在“C:\WINDOWS\system32\drivers\etc\hosts”文件中增加一条记录:xxx.xxx.xxx.xxx 服务器主机名作用同样是把服务器名对应到链接服务器的IP地址。

一、建立链接服务器假设服务器A的IP是172.16.10.6,SQLServer登录用户sa,密码8888;服务器B的IP是172.16.10.16,SQLServer登录用户sa,密码9999。

现在先在服务器A上建立与B通信的远程链接服务器,假设链接的别名是BServer,如图:点击“确定”,完成。

同理,在B服务器上也建立对A服务器的远程链接,链接别名为AServer,数据源地址改为172.16.10.6,密码输入8888,其他相同。

当然,也可以使用SQL语句完成以上操作,如下:-- 建立远程链接服务器BServerEXEC sp_addlinkedserve r @server = 'BServer', @srvproduct = '', @provider = 'SQLOLEDB',@datasrc = '172.16.10.16', @catalog = 'HYCommon'-- 建立远程登录到BServerEXEC sp_addlinkedsrvlogin@rmtsrvname = 'BServer', @useself = 'false', @rmtuser = 'sa',@rmtpassword = '9999'-- 设置远程服务器选项:允许RPC和RPC输出(该步可选)Exec sp_serveroption'BServer', 'RPC', 'true'Exec sp_serveroption'BServer', 'RPC Out', 'true'现在测试一下链接是否成功,打开查询分析器,登录到A服务器,输入以下SQL运行:Select * From BServer.pubs.dbo.titles正常的话就可以看到B服务器上pubs数据库的titles表数据,如果不行,请检查网络连接是否满足文章开头所述的网络环境。

SQL Server数据库故障及修复方法

SQL Server数据库故障及修复方法

SQL Server数据库故障及修复方法
对于计算机专业的大学生来说,SQL Server数据库肯定不陌生吧,SQL Server数据库作为目前使用相对广泛的数据库管理系统,被很多企业所使用,给大家带来了很多的方便。

对于企业来说,SQL Server数据库的稳定性至关重要,一旦发生问题,将会带来不可估量的损失。

当SQL Server数据库出现故障时,大家该如何解决问题呢?
SQL Server数据库常见故障:
1)SQL数据库置疑
2)SQL数据库无法附加或附加报错
3)SQL数据表查询错误
4)MDF文件损坏
5)SQL数据库备份文件损坏
6)SQL数据库被标记为可疑
7)SQL数据库被误删除
8)分区被格式化,SQL数据库被恢复后还是坏的
9)一致性错误
10)错误823等等
从上面大家可以了解到,SQL Server数据库的常见故障非常多,很可能用户一个错误操作就可能造成SQL Server数据库损坏或数据丢失,当出现这些问题时,用户不要盲目对数据库进行任何操作,因为用户的错误操作可能会造成数据库进一步损坏,对于不确定的情况,用户应该将数据库交给那些专业的数据库恢复人才进行恢复,这样才能保证数据库的安全。

MSDTC不能启动的几个解决方法

MSDTC不能启动的几个解决方法

endlocal
goto :EOF
:delkey
set key=%1
call :delkeyq %key% >nul 2>&1
@echo.
goto :EOF
:delkeyq
REG DELETE %key% /F
step 3
restlog
MSDTC_3.bat
set /a type=%%y
)
goto :EOF
:getstart
for /f "Tokens=2,3" %%x in ('reg query "HKLM\System\CurrentControlSet\Services\!svc!" /V start^|FIND "REG_DWORD"') do (
如果你确定不会用到它,那就可以删除。
项目里要用到事务,而.NET事务需要用到MSDTC,但是启动时,报错。经实验,找到以下解决方法
1. 如果只是提示需要MSDTC
那么点开始→运行→输入命令"net start msdtc",运行该命令即可.
2. 如果启动不了,请查看事件查看器
3. 键入下列命令, 然后按 ENTER 键: net start msdtc
MSDTC 服务帐户权限设置登录方法 2:
如果方法 1 不能解决问题, 设置登录帐户对 MSDTC 服务来具有读取和写入权限 Msdtc.log 文件。要这样做, 请按照下列步骤操作: 1. 单击 开始 ,单击 运行 , 类型 cmd然后单击 确定 。
set /a start=3
set /a type=0

oledb分布式事务无法启动的解决方案

oledb分布式事务无法启动的解决方案

OLEDB分布式事务无法启动的解决方案一、问题现象在执行分布式事务时,在后台报如下错误:java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。

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

MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。

该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web Server和Microsoft SQL Server。

该服务用于管理多个服务器 . 位置:控制面板--管理工具--服务--Distributed Transaction Coordinator依存关系:Remote Procedure Call(RPC)和Security Accounts Manager建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。

解决办法:1. 在windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->属性-->启动2.在CMD下运行"net start msdtc"开启服务后正常。

注:如果在第1步Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。

重新创建 MSDTC 日志,并重新启动服务的步骤如下:(1) 单击"开始",单击"运行",输入 cmd 后按"确定"。

MSDTC配置及排错步骤

MSDTC配置及排错步骤

环境配置:MSDTC配置MSDTC故障排除问题描述:如果MSDTC没有配置正确,通常会出现以下错误:进入页面,提示“正在载入桌面信息,请稍候。

”,很长时间,最后提示“查找快捷方式信息时发生异常,-》获取主域信息时发生异常”解决方案:要解决MSDTC配置问题,请使用以下步骤:快速排错步骤:1、检查应用服务器com+组件中的msdtc配置是否正确。

2、检查数据库服务器上com+组件中的msdtc配置是否正确。

3、确认启用了应用服务器上的dtc服务已经启动4、确认启用了数据库服务器上的dtc服务已经启动5、确认应用服务器与数据库服务器能否通过机器名和ip相互ping通,并且从ping中看到的机器名和IP完全一致。

6、确认应用服务器和数据库服务器是否在一个工作组或者域中。

7、确定应用服务器与数据库服务器之间的网络防火墙和本地杀毒软件防火墙没有屏蔽通讯端口,MSDTC在通讯时走的是随机端口。

8、确定启用了数据库本身的”将分布式事务用于服务器到服务器的通信”。

9、windows7、Server2008添加了SNMP服务详细排错步骤:一、确定应用服务器和数据库服务器之间,正确解析了NetBIOS名称(通常称作网络名称或计算机名)。

要想成功的在计算机之间进行MSDTC通讯,需要能把应用服务器的NetBIOS名称解析成正确的IP地址,并且能把数据库服务器的NetBIOS名称解析成正确的IP地址。

请使用以下步骤,从两个方向验证NetBIOS名称解析(应用服务器到数据库服务器,数据库服务器到应用服务器):1、在每台服务器上确定NetBIOS名称。

a、右键点击“我的电脑”-“属性”,在对话框中,点击“计算机名称”选项卡,查看此计算机指定的“完整的计算机名称”。

b、NetBIOS名称就是“完整的计算机名称”的第一部分。

例如,“完整的计算机名称”是,则NetBIOS名称就是myserver。

2、在每台服务器上确定相关的IP地址。

如何应对分布式数据库的故障和故障恢复(七)

如何应对分布式数据库的故障和故障恢复(七)

分布式数据库在现代信息技术领域中扮演着至关重要的角色。

然而,由于系统的复杂性和数据规模的增长,分布式数据库的故障和故障恢复已经成为我们所面临的一个重要问题。

本文将探讨分布式数据库故障的原因及应对方法,以及故障恢复的策略。

一、故障原因分布式数据库故障的原因可以分为两类:节点故障和网络故障。

节点故障是指数据库中的某个节点无法正常工作。

这可能是由于硬件故障、软件错误或人为操作错误等原因引起的。

节点故障会导致数据不一致和服务中断问题。

网络故障是指连接分布式数据库的网络部分失效或不稳定。

这可能是由于网络设备故障、网络拥塞或网络分区等原因引起的。

网络故障会导致节点之间无法通信,进而影响到数据的一致性和可用性。

二、应对方法为了应对分布式数据库的故障,我们可以采取以下几种方法:1. 冗余备份:通过在不同节点上存储冗余备份,当一个节点发生故障时,其他节点可以接管数据服务,确保数据的可用性和一致性。

2. 错误检测与恢复:通过监测节点状态和网络连接状态,及时发现故障,并尽快采取恢复措施。

这可以通过使用心跳机制、故障检测算法和自动化故障恢复方法实现。

3. 容错设计:在分布式数据库设计时,考虑到节点和网络的故障可能性,采用容错设计原则。

这包括使用冗余存储、多副本数据分发和故障转移/切换机制等。

4. 数据一致性保证:分布式数据库中的数据一致性是一个关键问题。

可以采用一致性协议(如Paxos或Raft)来确保数据在节点之间的一致性。

三、故障恢复策略故障发生后,恢复数据库的关键策略是:1. 数据备份与恢复:定期对数据库进行备份,并保持备份数据的完整性和可靠性。

当数据库发生故障时,可以使用备份数据来恢复数据库。

此外,还可以使用增量备份和持续备份等技术来减少恢复时间。

2. 故障迁移:当一个节点发生故障时,可以迁移其上的数据和服务到其他健康的节点上,实现故障的快速恢复。

这需要具备自动化故障迁移和自动化负载均衡的能力。

3. 故障诊断与修复:及时发现故障的原因和范围,并进行修复。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL Server 分布式数据库MSDTC 分布式事务错误和解决方法
一、问题现象
假如分布式事务的客户端和服务器端(可能N个)不在同一台服务器上,如分别为应用程序服务器和数据库服务器,经常会出现一下错误:
①在建立与服务器的连接时出错。

在连接到SQL Server 2005 时,在默认的设置下SQL Server 不允许进行远程连接可能会导致此失败。

(provider: 命名管道提供程序, error: 40 - 无法打开到SQL Server 的连接)。

②事务已被隐式或显式提交,或已终止。

③该伙伴事务管理器已经禁止了它对远程/网络事务的支持。

(异常来自
HRESULT:0x8004D025)。

(TransactionScope异常)
④[COMException (0x8004d00e):此事务已明地或暗地被确认或终止(异常来自HRESULT:0x8004D00E)]。

(MSDTC 分布式事务错误)
⑤Import of MSDTC transaction failed: Result Code = 0x8004d023. (MSDTC安全性配置问题)
二、解决方法
遇到以上的问题或SQL Server分布式的问题,请按照以下步骤设置,问题应该可以得到解决。

可能有些步骤对您来说是多余的,但求全不求漏。

1. 启动MSDTC服务。

MSDTC简介:MSDTC是Microsoft Distributed Transaction Coordinator的简称,即微软分布式事务协调器,描述:协调跨多个数据库、消息队列、文件系统等资源管理器的事务。

如果停止次服务,则不会发生这些事务。

如果禁用此服务,显式依赖此服务的其他服务将无法启动。

MSDTC启动方法:
①“开始”|“运行”,输入“services.msc”,或者“控制面板”|“管理工具”|“服务”,打开“服务”窗口,在名称中找到“Distributed Transaction Coordinator”,将其启动。

②“开始”|“所有程序”|“Microsoft SQL Server”|“服务管理器”,打开“SQL Server 服务管理器”窗口,选中“Distributed Transaction Coordinator”服务,将其启动。

2. 设置MSDTC组件。

①检查操作系统是否安装DTC组件。

XP默认安装,Win2003默认不安装。

安装步骤如下:
a. “开始”|“控制面板”|“添加/删除程序”|“添加/删除Windows组件”,选择“应用程序服务器”,单击“详细信息”,选择“启用网络DTC访问”,单击“确定”|“下一步”|“完成”。

b. 停止并重启MSDTC服务(命令:net stop msdtc和net start msdtc)。

c. 停止参与分布式事务的任何资源管理器服务(如Microsoft SQL Server 或Microsoft Message Queue Server),然后重新予以启动。

②“开始”|“运行”,输入“dcomcnfg”,或者“控制面板”|“管理工具”|“组件服务”,打开“组件
服务”窗口,“组件服务”|“计算机”|“我的电脑”,右键“属性”|“MSDTC”,勾选“使用本地协调器”,单击“安全性配置”,弹出“安全配置”窗口,勾选“网络DTC访问”、“允许远程客户端”、“允许远程管理”、“允许入站”、“允许出站”、“不要求进行验证”、“启用事务Inernet协议(TIP)事务”和“启用XA事务”(“允许入站”和“允许出站”据具体情况设置,客户端机器必须“允许出站”,服务器端机器必须“允许入站”),DTC登陆账号必须是“NT AUTHORITY\NetworkService”。

Vista系统只需勾选“使用本地协调器”即可。

③配置防火墙以允许与Msdtc.exe服务的网络通讯。

【测试时可以退掉所有的防火墙和杀
毒软件】
3. 检查两台机器能够相互ping通Hostname。

注意是机器名,而不是IP。

若不可以,进行如下设置:
①在目录“%windir%\system32\drivers\etc”下的hosts文件,写上IP和HostName的对应
信息,如“10.25.11.185 GSMAJK”。

另外,你也可以使用DTCping工具来测试是否可以在
两台机器之间使用MSDTC,并帮你分析原因,下载地址可以到微软的站点。

4. 启动SQL Server 的分布式远程连接。

(1) SQL Server 2000:
①“开始”|“所有程序”|“Microsoft SQL Server”|“企业管理器”,鼠标选中SQL Server 实例,如:GSMAJK(Windows NT),右键“属性”,弹出“SQL Server 属性(配置)”窗口,“连接”|“远程服务器连接”,选中“允许其他SQL Server 使用RPC远程连接到本SQL Server”和“强制分布式事务处理(MTS)”,SQL Server 2000默认情况下是选中的。

②配置防火墙以允许与SQL Server 服务相关的网络通讯。

【测试时可以退掉所有的防火墙和杀毒软件】
(2) SQL Server 2005:参见如何配置SQL Server 2005 以允许远程连连接
①在您要从远程计算机连接到的SQL Server 实例上启用远程连接。

“开始”|“所有程序”|“Microsoft SQL Server 2005”|“配置工具”|“SQL Server外围应用配置器”,单击“服务和连接的外围应用配置器”|“数据库引擎”,单击“远程连接”,选中“本地连接和远
程连接”和“同事使用TCP/IP和named pipes”,然后单击“应用”。

在接收到消息“直到重新启动数据库引擎服务后,对连接设置所做的更改才会生效”后,单击“确定”。

单击“服务”,检查“MSSQLSERVER服务”是否启动。

②打开SQL Server Browser 服务。

“开始”|“所有程序”|“Microsoft SQL Server 2005”|“配置工具”|“SQL Server外围应用配置器”,单击“服务和连接的外围应用配置器”|“SQL Server Browser”,在“启动类型”中单击“自动”选项,然后单击“应用”。

单击“启动”,然后单击“确定”。

③配置防火墙以允许与SQL Server 和SQL Server Browser 服务相关的网络通讯。

【测试时可以退掉所有的防火墙和杀毒软件】
5. SQL Server是否安装必须的补丁。

如SQL Server 2000的SP4。

在一次.NET开发中,问题现象中①②③条全遇到了,弄了好几天都没有解决,后来,查看
数据库版本,一个是SQL Server 2000 SP3,一个是SQL Server 2000 RTM,我就在后者的基础上安装了SQL Server 2000 SP4,结果问题解决。

信息来源:互联网上搜集和本人经验的总结。

相关文档
最新文档