分布事務出錯原因

本文提供了详细的步骤来解决SQL Server中的分布式事务问题,包括配置MSDTC、检查网络设置及依赖服务等,帮助读者理解并解决实际部署过程中可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.A.不用事务,关用SELECT   语句.是否可以分布式查询?  
   
        B.LINKSERVER   在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)  
   
        C.DBCC   TRACEON   (3604,   7300)--用跟踪看更详细错误信息.  
       
        D.下载MS提供的DTCPing.exe   分装在两台机上,按README说明来运行它.看出错信息.  
  http:
//download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe  
   
  二.两台机的MSDTC是否都打开了.  
   
  三.MSDTC设置是否正确.  
 
1.打开命令提示,运行"net   stop   msdtc",然后运行"net   start   msdtc"。  
 
2.转至"组件服务管理工具"。  
 
3.浏览至"启动管理工具"。  
 
4.选择"组件服务"。  
    a.展开"组件服务"树,然后展开"我的电脑"。  
    b.右键单击"我的电脑",然后选择"属性"。  
    C.在   MSDTC   选项卡中,确保选中了下列选项:   网络   DTC   访问  
  网络管理  
  网络事务  
          XA   事务  
    e.另外,"DTC   登录帐户"一定要设置为"NT   Authority/NetworkService"。  
 
5.单击"确定"。这样将会提示您"MS   DTC   将会停止并重新启动。  
      所有的依赖服务将被停止。请按
''继续"。单击"是"继续。  
 
6.单击"确定"关闭"我的电脑"属性窗口。  
   
  四.  
  MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.  
  telnet   IP  
135  
  如果是关闭的打开它.  
   
  五.  
  有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL"   的ODBC方式联接.  
  使用RRAS而不是RAS.(控制面版
--管理工具--远程服务管理器)  
  Check   whether   you   are   using   Remote   Access   Server   (RAS)   to   access   remote   servers.   If   so,   make   sure   that   you   have   implemented   Routing   RAS   (RRAS).   Linked   server   does   not   work   on   RAS   because   RAS   allows   only   one   way   communication.  
   
   
  七.检查你的两台服务器是否在同一个域中.  
  如果不在同一个域中,是否建立可信任联接.  
   
  八.如果是WIN2000,升级到SP4  
   
  九.升级MDAC到2.6以上,最好是2.
8.  
   
  十.要安装SQL的最新补丁:   sp3a  
 
'全部补丁的位置  
  http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766  
   
 
'应该安装的补丁sql   2000   sp3  
  http:
//download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe  

 

### 事务分布事务的区别 #### 定义差异 事务是在单个数据库或单一应用内执行的一系列操作,这些操作作为一个整体被提交或回滚。如果任何一个子操作失败,则整个事务都会被撤销[^1]。 分布事务涉及多个独立的系统或服务节点上的操作,并且要求所有参与方要么都成功完成各自的任务,要么都做任何改变以保持数据一致性[^2]。 #### 参与者位置 对于常规事务而言,所有的参与者和支持该事务的服务器、资源服务器以及事务管理器通常位于同一台机器上或者是同构环境中紧密耦合的同组件[^3]。 而在分布事务中,上述提到的各种实体分布网络中的同物理地点甚至跨越同的数据中心,它们通过网络相互通信协作来完成一次完整的业务逻辑处理过程。 #### 数据一致性保障 在一个标准的关系型数据库管理系统(RDBMS)里实施的传统意义上的短小精悍型本地事务能够很好地遵循ACID原则(原子性Atomicity, 一致性Consistency, 隔离性Isolation 和持久性Durability),从而确保即使面对并发访问也能维持良好的数据质量。 相比之下,在更广泛范围内的分布式架构下运作的大规模长时间运行的企业级应用程序所面临的挑战更大——仅要在异构平台上维护严格的最终一致性模型,还要应对可能出现的部分失效问题(Partial Failure Problem)。 #### 故障恢复难度 当遇到错误时,普通的SQL语句组成的简单事务可以通过回滚机制迅速恢复正常状态而影响其他部分的工作流程;然而,在涉及到众多远程调用和复杂交互模式下的大型分布式环境里面,要想做到这一点就困难得多,因为这往往意味着要协调更多确定因素并采取额外措施来进行补偿动作或者重新尝试未成功的环节。 ```python # 这是一个模拟传统事务的例子 try: db_connection.begin() cursor.execute("UPDATE accounts SET balance = balance - %s WHERE account_id = %s", (amount, from_account)) cursor.execute("UPDATE accounts SET balance = balance + %s WHERE account_id = %s", (amount, to_account)) db_connection.commit() # 提交更改 except Exception as e: db_connection.rollback() # 出错则回滚 finally: db_connection.close() # 对于分布事务,可能会使用两阶段提交协议(Two-Phase Commit Protocol) class DistributedTransactionManager: def prepare(self): ... def commit(self): ... def rollback(self): ... manager = DistributedTransactionManager() if manager.prepare(): try: do_something_on_remote_service_a() do_another_thing_on_remote_service_b() manager.commit() except Exception: manager.rollback() else: manager.rollback() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值