Code Bye

C# 多个oracle 数据库事务怎么处理???

 

我有三个oracle数据库,在不同的地方,需要操作这三个数据库。
我想写个事务操作,因为入一个数据库,其他二个库对应的其他表也要添加。
所以想写个一个事务,当某一个数据库操作失误,可能其他二个库就回滚。

事务解决不了问题吧。  又不是同一个数据库
5分
把语句写到一个事物里面不行吗?
10分
你这个要分布式事务嘛 类似sqlserver scope
不是同一个库,较难办了.
本身设计的就很奇葩.
就算你实现了这个事物
那么假如:
a,b,c,3个库
我更新完a,网络就异常了,这时更新b当然不成功,你想让a回滚,又如何通知a?
引用 5 楼 Z65443344 的回复:

本身设计的就很奇葩.
就算你实现了这个事物
那么假如:
a,b,c,3个库
我更新完a,网络就异常了,这时更新b当然不成功,你想让a回滚,又如何通知a?

为什么很奇葩。。。。。
很多这种情况。  不同的系统都有自己的接口。。。你一个系统需要操作多个其他系统任何数据都需要事务(例如电网,移动,铁路里面信息中心会有N个系统N个数据库)  这个事务。。。不是一句ORACLE SQL SERVER里面事务类。 就以为搞定的。
是要自己写个单独的事务处理机制的类。。。去完成不同数据库的数据录入或者修改。

引用 5 楼 Z65443344 的回复:

本身设计的就很奇葩.
就算你实现了这个事物
那么假如:
a,b,c,3个库
我更新完a,网络就异常了,这时更新b当然不成功,你想让a回滚,又如何通知a?

而且还有可能你的oracle,别人的是sql server  或者 sybase,有的库可以让你去直连。但是大多数又是web接口。
又不是单单一个 SQLTransaction、OracleTransaction类可以搞定的事情。

引用 3 楼 bisolutions 的回复:

你这个要分布式事务嘛 类似sqlserver scope

暂时这个分布式事务不知道怎么去处理

5分
这个问题不能用事物来处理

可以在数据库中建立连接来解决
A库中建立对B库的连接,然后在A库的相关表中使用触发器操作B库

5分
从数据库或者架构层面考虑比较靠谱一些。
5分
引用 7 楼 adrianEvin 的回复:

而且还有可能你的oracle,别人的是sql server  或者 sybase,有的库可以让你去直连。但是大多数又是web接口。
又不是单单一个 SQLTransaction、OracleTransaction类可以搞定的事情。

不是说多数据库的设计奇葩,而是说你想在客户端实现事务,这设计很奇葩
就算事务最终做出来了,也根本达不到你想要的效果

引用 11 楼 Z65443344 的回复:
Quote: 引用 7 楼 adrianEvin 的回复:

而且还有可能你的oracle,别人的是sql server  或者 sybase,有的库可以让你去直连。但是大多数又是web接口。
又不是单单一个 SQLTransaction、OracleTransaction类可以搞定的事情。

不是说多数据库的设计奇葩,而是说你想在客户端实现事务,这设计很奇葩
就算事务最终做出来了,也根本达不到你想要的效果

没有说客户端,是中间服务实现的。

引用 10 楼 davinciyxw 的回复:

从数据库或者架构层面考虑比较靠谱一些。

怎么去考虑啊,有没有相应的理论方面的文档等。

10分
引用 13 楼 adrianEvin 的回复:
Quote: 引用 10 楼 davinciyxw 的回复:

从数据库或者架构层面考虑比较靠谱一些。

怎么去考虑啊,有没有相应的理论方面的文档等。

最简单地处理的话,你可以把(代码控制的)不同的数据库事务嵌套在一起,先确保执行“完毕”所有数据库表操作,然后一次性提交所有事务。由于这些提交“很接近、很短促”,基本上可以确保都会成功。

10分
如果这些数据库“是你家自己的”,你可以这样考虑一下。但是从SOA的角度,这其实往往首先是性能杀手(不但拖垮了网络系统,也会拖垮数据库本地应用),其次是毫无安全性,而且也不利于进行系统扩展。

通常是从业务流程设计上去解决这种问题。

如果你只能从“技术上”去理解,那么就无法解决这类问题了。如果死抠技术,可能就设计不出更高效率的系统。

5分
网上搜索 分布式事务,可实现多个数据库的事务控制,SQL Server亲测没有问题,ORACLE需要安装另外一个支持分布式事务的程序后通过Windows 服务也可以实现。
1.分布式事务;
2.设计是否可以再考虑下。
5分
引用 13 楼 adrianEvin 的回复:
Quote: 引用 10 楼 davinciyxw 的回复:

从数据库或者架构层面考虑比较靠谱一些。

怎么去考虑啊,有没有相应的理论方面的文档等。

分布式事务可以考虑,服务端提供insert和delete两个服务,然后拼一个“大”的事务。
如果你的应用很简单,几个oracle都是自家的,是否可以考虑用dblink只操作一个库,其他几个都是“映射”过来的。

放在一个Pro里面用DBLINK处理,感觉这个方法不错
TransactionScope类可以实现你的需求

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# 多个oracle 数据库事务怎么处理???