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

adrianEvin 2014-07-29 11:02:17
我有三个oracle数据库,在不同的地方,需要操作这三个数据库。
我想写个事务操作,因为入一个数据库,其他二个库对应的其他表也要添加。
所以想写个一个事务,当某一个数据库操作失误,可能其他二个库就回滚。
...全文
423 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengzhishu502 2015-12-17
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
[quote=引用 13 楼 adrianEvin 的回复:] [quote=引用 10 楼 davinciyxw 的回复:] 从数据库或者架构层面考虑比较靠谱一些。
怎么去考虑啊,有没有相应的理论方面的文档等。 [/quote] 最简单地处理的话,你可以把(代码控制的)不同的数据库事务嵌套在一起,先确保执行“完毕”所有数据库表操作,然后一次性提交所有事务。由于这些提交“很接近、很短促”,基本上可以确保都会成功。[/quote] 由于这些提交“很接近、很短促”,基本上可以确保都会成功。 假如A表更新条数跟预计条数相等,更新成功; B表更新条数与预计条数不相等,更新失败,这跟提交的接近程度有关系么?还不是A成功,B失败。。。
yaotomo 2015-04-18
  • 打赏
  • 举报
回复
TransactionScope类可以实现你的需求
PaulyJiang 2014-08-18
  • 打赏
  • 举报
回复
放在一个Pro里面用DBLINK处理,感觉这个方法不错
  • 打赏
  • 举报
回复
引用 13 楼 adrianEvin 的回复:
[quote=引用 10 楼 davinciyxw 的回复:] 从数据库或者架构层面考虑比较靠谱一些。
怎么去考虑啊,有没有相应的理论方面的文档等。 [/quote] 分布式事务可以考虑,服务端提供insert和delete两个服务,然后拼一个“大”的事务。 如果你的应用很简单,几个oracle都是自家的,是否可以考虑用dblink只操作一个库,其他几个都是“映射”过来的。
smthgdin_020 2014-08-17
  • 打赏
  • 举报
回复
1.分布式事务; 2.设计是否可以再考虑下。
梦吟情诗 2014-08-17
  • 打赏
  • 举报
回复
网上搜索 分布式事务,可实现多个数据库的事务控制,SQL Server亲测没有问题,ORACLE需要安装另外一个支持分布式事务的程序后通过Windows 服务也可以实现。
  • 打赏
  • 举报
回复
如果这些数据库“是你家自己的”,你可以这样考虑一下。但是从SOA的角度,这其实往往首先是性能杀手(不但拖垮了网络系统,也会拖垮数据库本地应用),其次是毫无安全性,而且也不利于进行系统扩展。 通常是从业务流程设计上去解决这种问题。 如果你只能从“技术上”去理解,那么就无法解决这类问题了。如果死抠技术,可能就设计不出更高效率的系统。
  • 打赏
  • 举报
回复
引用 13 楼 adrianEvin 的回复:
[quote=引用 10 楼 davinciyxw 的回复:] 从数据库或者架构层面考虑比较靠谱一些。
怎么去考虑啊,有没有相应的理论方面的文档等。 [/quote] 最简单地处理的话,你可以把(代码控制的)不同的数据库事务嵌套在一起,先确保执行“完毕”所有数据库表操作,然后一次性提交所有事务。由于这些提交“很接近、很短促”,基本上可以确保都会成功。
adrianEvin 2014-08-16
  • 打赏
  • 举报
回复
引用 10 楼 davinciyxw 的回复:
从数据库或者架构层面考虑比较靠谱一些。
怎么去考虑啊,有没有相应的理论方面的文档等。
adrianEvin 2014-08-16
  • 打赏
  • 举报
回复
引用 11 楼 Z65443344 的回复:
[quote=引用 7 楼 adrianEvin 的回复:] 而且还有可能你的oracle,别人的是sql server 或者 sybase,有的库可以让你去直连。但是大多数又是web接口。 又不是单单一个 SQLTransaction、OracleTransaction类可以搞定的事情。
不是说多数据库的设计奇葩,而是说你想在客户端实现事务,这设计很奇葩 就算事务最终做出来了,也根本达不到你想要的效果[/quote] 没有说客户端,是中间服务实现的。
於黾 2014-08-15
  • 打赏
  • 举报
回复
引用 7 楼 adrianEvin 的回复:
而且还有可能你的oracle,别人的是sql server 或者 sybase,有的库可以让你去直连。但是大多数又是web接口。 又不是单单一个 SQLTransaction、OracleTransaction类可以搞定的事情。
不是说多数据库的设计奇葩,而是说你想在客户端实现事务,这设计很奇葩 就算事务最终做出来了,也根本达不到你想要的效果
  • 打赏
  • 举报
回复
从数据库或者架构层面考虑比较靠谱一些。
程晨c 2014-08-14
  • 打赏
  • 举报
回复
这个问题不能用事物来处理 可以在数据库中建立连接来解决 A库中建立对B库的连接,然后在A库的相关表中使用触发器操作B库
adrianEvin 2014-08-14
  • 打赏
  • 举报
回复
引用 3 楼 bisolutions 的回复:
你这个要分布式事务嘛 类似sqlserver scope
暂时这个分布式事务不知道怎么去处理
adrianEvin 2014-08-14
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
本身设计的就很奇葩. 就算你实现了这个事物 那么假如: a,b,c,3个库 我更新完a,网络就异常了,这时更新b当然不成功,你想让a回滚,又如何通知a?
而且还有可能你的oracle,别人的是sql server 或者 sybase,有的库可以让你去直连。但是大多数又是web接口。 又不是单单一个 SQLTransaction、OracleTransaction类可以搞定的事情。
adrianEvin 2014-08-14
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
本身设计的就很奇葩. 就算你实现了这个事物 那么假如: a,b,c,3个库 我更新完a,网络就异常了,这时更新b当然不成功,你想让a回滚,又如何通知a?
为什么很奇葩。。。。。 很多这种情况。 不同的系统都有自己的接口。。。你一个系统需要操作多个其他系统任何数据都需要事务(例如电网,移动,铁路里面信息中心会有N个系统N个数据库) 这个事务。。。不是一句ORACLE SQL SERVER里面事务类。 就以为搞定的。 是要自己写个单独的事务处理机制的类。。。去完成不同数据库的数据录入或者修改。
wangnaisheng 2014-07-30
  • 打赏
  • 举报
回复
把语句写到一个事物里面不行吗?
漫天雪飞 2014-07-30
  • 打赏
  • 举报
回复
事务解决不了问题吧。 又不是同一个数据库
於黾 2014-07-30
  • 打赏
  • 举报
回复
本身设计的就很奇葩. 就算你实现了这个事物 那么假如: a,b,c,3个库 我更新完a,网络就异常了,这时更新b当然不成功,你想让a回滚,又如何通知a?
Ny-6000 2014-07-30
  • 打赏
  • 举报
回复
不是同一个库,较难办了.
加载更多回复(1)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧