跨数据库事务(跨库事务解决方案)

软件开发 95
今天给各位分享跨数据库事务的知识,其中也会对跨库事务解决方案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!c# SQL跨数据库事务问题。 数据库建同义词 ,可以不需要 跨数据库 这样插入的。以下示例首次创建将在此后的示例中使用的同义词。USE tempdb;GOCREATE SYNONYM MyAddressTypeFOR AdventureWorks.Person.AddressType;

今天给各位分享跨数据库事务的知识,其中也会对跨库事务解决方案进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

c# SQL跨数据库事务问题。

数据库建同义词 ,可以不需要 跨数据库 这样插入的。

以下示例首次创建将在此后的示例中使用的同义词。

USE tempdb;

GO

CREATE SYNONYM MyAddressType

FOR AdventureWorks.Person.AddressType;

GO

以下示例将行插入到由 MyAddressType 同义词引用的基表。

USE tempdb;

GO

INSERT INTO MyAddressType (Name)

VALUES ('Test');

GO

求助:跨域事务的解决方案

自己写了个事务处理类,提供一个静态的启动事务方法,然后就是Commit,Rollback方法,再利用GUID作为事务ID。有事务处理类管理本地数据库链接和远程跨域服务信息,利用这些信息在Commit或者rollback时进行提交或者回滚,在数据库级上并行执行命令,需要对远程跨域提交或者回滚的,结合一个远程事务池、远程事务服务类和远程事务服务调用代理类(就提交和回滚两个方法)进行处理,其中用事务ID贯穿始终。当然,所有的数据访问层,数据库访问层都来由一个事务类参数,没有事务的话就为空。由逻辑处理层决定是否采用事务处理。做的就这么简单,结果感觉还可以;当然这个模式有个致命的弱点,就是无法解决Commit一致性问题,就是如果涉及到多个数据库时,如果前N-1个数据库服务都提交成功,第N个数据库提交失败就没办法了。在跨区域事务方面问题比较大,但如果是局域网还是可以的。这种方式比较适合数据分布存储(非镜像)的情况,当然,数据分割的时候需要将大部分的操作都集中在一个中心,毕竟跨区域访问还是有些慢得。

这次整得这个架构,可以分布式查询,同时更新多个数据库(可以控制到表级),并对业务逻辑层透明,速度和易用性感觉都还不错,而且业务层处理事务的时候可以支持搭积木方式进行。

这个架构带有云应用架构的味道,可以分业务,分用户存放数据,应用部分也可以支持多中心,多负载方式,理论上来讲扩展性无限。当然,因为主要的目的不是做镜像同步支持,所以我没有加入数据库命令队列处理方式来保证可靠性,在数据库节点方面只是简单的采用了同时更新3份,查询则随机选其中一份的方式。对于企业级业务,特别是高实时性和一致性的应用,如果跨数据库,事务处理和可靠性保证要一起做,真的很难。所以后来放弃了自己做可靠性那部分(就是同时写3份,随机读一份那部分功能),让数据库自己去做,毕竟他们更专业。

这个架构主要技术点:多线程(实现不同目标数据库查询异步进行),ODPNet,WCF(跨域访问),事务,同步(简单的采用Lock),反射机制,泛型等.

如何在spring中配置跨数据库的事务

1.使用注解的方式

?xml version="1.0" encoding="UTF-8"?

beans xmlns=""

xmlns:xsi=""

xmlns:context=""

xmlns:tx=""

xsi:schemaLocation="

"

!-- 使用annotation定义数据库事务,这样可以在类或方法中直接使用@Transactional注解来声明事务 --

tx:annotation-driven transaction-manager="transactionManager" /

/beans

2.使用事务管理器来管理

?xml version="1.0" encoding="UTF-8"?

beans xmlns="" xmlns:xsi=""

xmlns:jee=""

xmlns:aop=""

xmlns:tx=""

xmlns:context=""

xsi:schemaLocation="

"

bean id="transactionManager"

class="99b1dad6490c7e1b org.springframework.jdbc.datasource.DataSourceTransactionManager"

property name="dataSource" ref="dataSource" /

/bean

aop:config

!-- 切入点指明了在执行com.zxt.service包中的所有方法时产生事务拦截操作 --

aop:pointcut id="daoMethods"

expression="execution(* com.zxt.service.*.*(..))" /

!-- 定义了将采用何种拦截操作,这里引用到 txAdvice --

aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethods" /

/aop:config

!-- 事务通知操作,使用的事务管理器引用自transactionManager --

tx:advice id="txAdvice" transaction-manager="transactionManager"

tx:attributes

!-- 指定哪些方法需要加入事务 --

tx:method name="save*" propagation="REQUIRED" /

tx:method name="delete*" propagation="REQUIRED" /

tx:method name="update*" propagation="REQUIRED" /

!-- read-only="true":其余方法只读格式,加强其安全性 --

tx:method name="*" read-only="true" propagation="NOT_SUPPORTED" /

/tx:attributes

/tx:advice

/beans

跨数据库事务的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于跨库事务解决方案、跨数据库事务的信息别忘了在本站进行查找喔。

跨数据库事务 跨数据库事务 spring跨数据库事务失败跨数据库事务 实现方法跨数据库事务 队列跨数据库分布式事务数据库的事务是什么数据库事务回滚数据库事务级别数据库事务的作用mysql数据库事务
扫码二维码