ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5170|回复: 15

[精华] 调用Web服务的时候如何保证数据库事务的一致性?请教 [复制链接]

版主

SUN

精华贴数
2
技术积分
8948
社区积分
530
注册时间
2005-9-13
论坛徽章:
36
数据库板块每日发贴之星
日期:2005-11-25 01:01:34ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452009日食纪念
日期:2009-07-22 09:30:00ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-18 20:41:51双黄蛋
日期:2011-05-28 20:32:46迷宫蛋
日期:2011-08-14 17:30:33咸鸭蛋
日期:2012-01-08 14:47:32ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2006-12-29 10:40:57 |显示全部楼层
环境:Win XP , 数据库Oracle 9i , 语言C# .net
企业A 和 企业B ,企业A的数据库服务器是Ora1,企业B的数据库服务器是Ora2
Ora1与Ora2中均有表tab1,tab2
1 现在要使用web service将Ora1库中的tab1,tab2 传输到Ora2库的tab1,tab2中,也就是说两个企业要进行业务数据的传输。怎么调用web服务执行呢?
2 另外,当数据从Ora1 插入到Ora2库中的时候,需要更改Ora1库中tab1,tab2的状态字段(标志这条数据已经传输完毕),那怎么保证事务的一致性呢?也就是说Ora1库中的tab1,tab2 数据insert到Ora2库的tab1,tab2中 要 同时保证Ora1库中这些表的状态也同步修改;如果insert失败,那么状态不作修改,如果状态修改失败,insert也应当能回滚,这就是事务一致。
请教各位大虾了,望指点一下,谢谢!

版主

SUN

精华贴数
2
技术积分
8948
社区积分
530
注册时间
2005-9-13
论坛徽章:
36
数据库板块每日发贴之星
日期:2005-11-25 01:01:34ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452009日食纪念
日期:2009-07-22 09:30:00ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-18 20:41:51双黄蛋
日期:2011-05-28 20:32:46迷宫蛋
日期:2011-08-14 17:30:33咸鸭蛋
日期:2012-01-08 14:47:32ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2006-12-29 11:03:29 |显示全部楼层
我现在的想法是这样的:
增加一个中间库mid,因为在数据由 A 插入到 B 的时候,需要按一张规则表进行数据转换,这些规则表就存放在中间库 mid 中。

在A库写2个web 服务,一个服务将A库中需要与B库进行传输的数据根据条件取出来暂存到A库另一个表空间中。还有一个Web服务用来修改A库中相关表的状态字段。

在中间库mid中使用一个Web服务,对从A中取出的数据按照AB双方 约定的规则(存放在mid库的转换规则表中)进行数据的编码转换。

在B库中有一个Web服务,这个服务去调用中间库的web服务(在这个服务内部调用A库暂存的数据并进行编码转换,同时再去调用A库中的第二个服务去回头修改A库相关表的状态,标志为已经传输完毕,不需要再传输),将转换完成的数据插入到B库中,如果插入数据失败,则需要将A库中相关表的 状态 修改回去。

望各位大虾指点一下,看我的这个思路有没有不合适的地方,谢谢!!

使用道具 举报

版主

水墨清风

精华贴数
6
技术积分
5594
社区积分
5997
注册时间
2004-8-29
论坛徽章:
51
茶鸡蛋
日期:2012-04-16 22:40:06紫蛋头
日期:2011-11-16 17:20:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012010世博会纪念徽章
日期:2010-10-11 16:32:562010年世界杯参赛球队:朝鲜
日期:2010-06-20 04:58:532010广州亚运会纪念徽章:轮滑
日期:2011-03-16 15:15:13管理团队成员
日期:2011-05-07 01:45:08
发表于 2006-12-29 11:39:18 |显示全部楼层
是不是异构数据之间的同步

不用中间表使用数据转换规则来创建视图会不会好些?
将插入和修改操作放到同一个事务里是否可以满足要求?

使用道具 举报

版主

SUN

精华贴数
2
技术积分
8948
社区积分
530
注册时间
2005-9-13
论坛徽章:
36
数据库板块每日发贴之星
日期:2005-11-25 01:01:34ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452009日食纪念
日期:2009-07-22 09:30:00ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-18 20:41:51双黄蛋
日期:2011-05-28 20:32:46迷宫蛋
日期:2011-08-14 17:30:33咸鸭蛋
日期:2012-01-08 14:47:32ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2006-12-29 12:49:42 |显示全部楼层
to mo_yuan_ming 斑竹:
不是异构数据之间的同步,而是异构数据库之间的数据传输,以及传输之后数据状态的更改,如何保持这两步事务的一致性。

1 不能使用视图,我这里的转换规则表是A B双方约定的对传输的数据进行转换的规则,这张规则表会在Web 服务的存储过程中调用,对A库中需要传输的数据按规则转换,转换规则表需要放在公共的中间库中存储。
2 re : 将插入和修改操作放到同一个事务里是否可以满足要求?
我现在已经实现了我上面的需求,但是是另一种思路,在那种思路中 插入和修改操作放在了一个事务中,只使用了一个commit 。但是原先的程序耦合大,就是说,当企业不是两个,而是30个的时候,程序的可扩展性不好,没有发挥出web 服务本身的优势。

所以,我又提出了2楼的这种思路,这种思路使用web 服务之间的相互调用完成业务,各个企业只需要维护自己的web 服务,耦合小,但是事务的一致性难以控制,因为是一个web 服务调用另一个服务(服务内部又使用Oracle的存储过程),而且是跨库的操作,这就不能仅仅使用一个commit(道理很显然,因为一个commit 不能完成对两个数据库服务器的提交),事务的控制显的难以控制。

这些东西设计到Oracle数据库知识,Web服务的知识以及系统架构设计三个方面,有兴趣的能否和我一块研究下?我想随着Web服务的发展,这个问题即使大家现在没有遇到,不久也将遇到。

非常感谢 mo_yuan_ming 斑竹的关注!谢谢!

使用道具 举报

版主

水墨清风

精华贴数
6
技术积分
5594
社区积分
5997
注册时间
2004-8-29
论坛徽章:
51
茶鸡蛋
日期:2012-04-16 22:40:06紫蛋头
日期:2011-11-16 17:20:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012010世博会纪念徽章
日期:2010-10-11 16:32:562010年世界杯参赛球队:朝鲜
日期:2010-06-20 04:58:532010广州亚运会纪念徽章:轮滑
日期:2011-03-16 15:15:13管理团队成员
日期:2011-05-07 01:45:08
发表于 2006-12-29 14:53:53 |显示全部楼层
呵呵现在我刚好也有一个和你类似的需求
我的需求是将分散在各地的数据统一归并到一个数据库中,
不同的是我的数据库是SQLServer的!
我的方案有两个
  一:是通过数据库的作业代理来
  二:采用WebService
如果采用WebService
但我会选择建只立一个web服务
1:获取指定目标服务器上的数据 不在暂存中的数据
2:将获取成功的数据标识暂存
3:目标服务器会根据暂存信息来改变标示
4:改变成功的删除服务器上的标示

1、2反复就是获取数据
3、4反复就是修改标记
如果将1、2写在一个Web发布到服务器上
将3、4写成Web发布到目标服务器上也可以
那样那个速度更快些。

使用道具 举报

版主

SUN

精华贴数
2
技术积分
8948
社区积分
530
注册时间
2005-9-13
论坛徽章:
36
数据库板块每日发贴之星
日期:2005-11-25 01:01:34ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452009日食纪念
日期:2009-07-22 09:30:00ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-18 20:41:51双黄蛋
日期:2011-05-28 20:32:46迷宫蛋
日期:2011-08-14 17:30:33咸鸭蛋
日期:2012-01-08 14:47:32ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2007-1-1 17:28:30 |显示全部楼层
最初由 mo_yuan_ming 发布
[B].....................................
1:获取指定目标服务器上的数据 不在暂存中的数据
2:将获取成功的数据标识暂存
3:目标服务器会根据暂存信息来改变标示
4:改变成功的删除服务器上的标示

1、2反复就是获取数据
3、4反复就是修改标记
如果将1、2写在一个Web发布到服务器上
将3、4写成Web发布到目标服务器上也可以
那样那个速度更快些。 [/B]

to  mo_yuan_ming 斑竹:
首先祝你新年快乐!工作顺利!
是的,我们的需求是比较类似的。
你上面写的4点我一时理解不了能否详细的解释下?
谢谢!
1:获取指定目标服务器上的数据 不在暂存中的数据
Re:是不是这样
获取指定目标服务器上的数据(不在暂存中的数据)

2:将获取成功的数据标识暂存
Re:是不是这样
将获取成功的数据标识并且暂存在本地

这两点也有些看不大明白
3:目标服务器会根据暂存信息来改变标示
4:改变成功的删除服务器上的标示


请问斑竹,你是如何保证获取数据的同时又能进行标示的更新的?也就是怎么把二者放在一个事务里面处理的?
还是使用了 2 个事务,通过另外一个新的服务在保证事务的一致性!
谢谢你的关注!希望能够得到您的恢复!

使用道具 举报

版主

水墨清风

精华贴数
6
技术积分
5594
社区积分
5997
注册时间
2004-8-29
论坛徽章:
51
茶鸡蛋
日期:2012-04-16 22:40:06紫蛋头
日期:2011-11-16 17:20:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012010世博会纪念徽章
日期:2010-10-11 16:32:562010年世界杯参赛球队:朝鲜
日期:2010-06-20 04:58:532010广州亚运会纪念徽章:轮滑
日期:2011-03-16 15:15:13管理团队成员
日期:2011-05-07 01:45:08
发表于 2007-1-4 11:13:29 |显示全部楼层
一个都没有看明白 看来我的表达方式有问题

1、2的意思理解是一致的!
先解释一下 目标服务器就理解为客户端

3:可以理解为客户端会根据服务器端的暂存数据来更新标志位
4:标志位更新成功后就删除服务器上的暂存数据
需要特别说明的是3、4是不用保持同步的,只要反复操作作直到全部更新完毕和删除完毕为止。

1、2是需要同步的需要在服务器上的同一个事务中操作,保证获取的数据和标志保存成功。

使用道具 举报

版主

SUN

精华贴数
2
技术积分
8948
社区积分
530
注册时间
2005-9-13
论坛徽章:
36
数据库板块每日发贴之星
日期:2005-11-25 01:01:34ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452009日食纪念
日期:2009-07-22 09:30:00ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-18 20:41:51双黄蛋
日期:2011-05-28 20:32:46迷宫蛋
日期:2011-08-14 17:30:33咸鸭蛋
日期:2012-01-08 14:47:32ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2007-1-4 14:26:58 |显示全部楼层
to mo_yuan_ming:

是下面这层意思吗?有没有不合适的?谢谢!

1   服务器获取指定客户端数据,这些数据是不在服务器端暂存中的
2   将获取成功的数据暂存在服务器端
2.5 将暂存数据插入业务表中,并修改暂存数据状态为插入成功    --完成服务器端的数据插入
3   若服务器端暂存数据的状态为插入成功,则客户端将自己数据的状态标示为转发成功   --表示数据已经转发成功
4   如果标示成功,则调用服务删除服务器端暂存中的相应数据                   --完成服务器端的数据删除

我 MSN:sdusun0819@hotmail.com

使用道具 举报

版主

SUN

精华贴数
2
技术积分
8948
社区积分
530
注册时间
2005-9-13
论坛徽章:
36
数据库板块每日发贴之星
日期:2005-11-25 01:01:34ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452009日食纪念
日期:2009-07-22 09:30:00ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:342012新春纪念徽章
日期:2012-01-04 11:50:44现任管理团队成员
日期:2011-05-07 01:45:08紫蛋头
日期:2011-05-18 20:41:51双黄蛋
日期:2011-05-28 20:32:46迷宫蛋
日期:2011-08-14 17:30:33咸鸭蛋
日期:2012-01-08 14:47:32ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2007-1-4 14:31:16 |显示全部楼层
我的需求和你的有一些不同,是多个企业之间数据的传输,库也是异构的,但原理应该比较接近!
另外,我在 2.5 步,还有一些额外的加码操作,所以就加了一步!
不知道和你的想法能吻合多少? 请指点啦! 呵呵

使用道具 举报

版主

水墨清风

精华贴数
6
技术积分
5594
社区积分
5997
注册时间
2004-8-29
论坛徽章:
51
茶鸡蛋
日期:2012-04-16 22:40:06紫蛋头
日期:2011-11-16 17:20:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:012010世博会纪念徽章
日期:2010-10-11 16:32:562010年世界杯参赛球队:朝鲜
日期:2010-06-20 04:58:532010广州亚运会纪念徽章:轮滑
日期:2011-03-16 15:15:13管理团队成员
日期:2011-05-07 01:45:08
发表于 2007-1-4 14:55:58 |显示全部楼层
最初由 sdusun 发布
[B]to mo_yuan_ming:

是下面这层意思吗?有没有不合适的?谢谢!

1   服务器获取指定客户端数据,这些数据是不在服务器端暂存中的
2   将获取成功的数据暂存在服务器端
2.5 将暂存数据插入业务表中,并修改暂存数据状态为插入成功    --完成服务器端的数据插入
3   若服务器端暂存数据的状态为插入成功,则客户端将自己数据的状态标示为转发成功   --表示数据已经转发成功
4   如果标示成功,则调用服务删除服务器端暂存中的相应数据                   --完成服务器端的数据删除

我 MSN:sdusun0819@hotmail.com [/B]


方向是一样的,只是细节不同而已 不过这些都没有关系,只要能很好的达到目的就可以了

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部