如何保护一段程序的事务完整性

jjj007 2005-08-08 09:26:58
有这样一段程序,要求一个事务的完整性:先从A数据库读出一条要完成的任务,然后在B数据库中执行,执行成功后将A数据库中的那条记录删掉。
如果在B数据库中执行完、删掉A数据库中的记录之前程序出了问题,那么可以说是事务不完整的,怎么办?
这个一个并发的程序。
...全文
267 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yameng 2005-08-18
  • 打赏
  • 举报
回复
看看这个人的说话的口气,知道了也不能告诉他。
yhbttfile 2005-08-12
  • 打赏
  • 举报
回复
兄弟,我想到两条路,供参考:
1、直接使用已有系统的功能。
如果你使用的两个数据库都在一个数据库系统上,就没有这样的问题。直接启动一个事务。
BEGIN TRAN
读A的记录;
插入A记录到B;
删除A的记录;
COMMIT

如果中途有一个操作失败,或者计算机断电等,启动后数据库会保证任何操作都会回滚。

2、自己实现。
——需要使用Gam4的模式。
操作方法都是人做的,人家那么强,你为什么不能那么强?
需要使用MEMENTO(备忘录模式)。把每个操作成功后都记录到事务文件(也成为日志文件)。
操作的过程设计成事务。
事务的设计思想跟数据库的事务类似。

为了更好地使用MEMENTO模式,建议结合COMMAND(命令模式)。

如果程序异常,启动的时候需要首先SCAN这个事务文件,如果发现只有启动事务,没有提交或者回滚事务,则UNDO所有的COMMAND。


这个思路应该实现不难,兄弟,自己做一下吧。
GOOD LUCK。
jixingzhong 2005-08-12
  • 打赏
  • 举报
回复
锁定进程,锁定对象 ...

这个在事务完整性中有很明确的说明的呀 !
jjj007 2005-08-09
  • 打赏
  • 举报
回复
你还知道银行用unix,你真行啊!你还知道哪用啊?孩子。
unix哪都用,还找个银行的,你真搞笑了!
wts_net 2005-08-08
  • 打赏
  • 举报
回复
让系统自己去做吧
你不用考虑
有人替你考虑好了啊
doway 2005-08-08
  • 打赏
  • 举报
回复
Windows 中 COM+ 是专门干这活的。

doway 2005-08-08
  • 打赏
  • 举报
回复
COM+ 中的 MTS 和 J2EE 容器都是扮演这个角色的中间件,但这都是后来的东西了,算是小辈儿。

大多数银行业务系统都是 UNIX 的,那时还没有后来这些小辈儿呢,你需要找个银行的人问一下。

jjj007 2005-08-08
  • 打赏
  • 举报
回复
不好意思哦,可能我没说清楚。
我要写一段程序(可能是C++)来完成这样的任务:先从A数据库读出一条要完成的任务,然后在B数据库中执行,执行成功后将A数据库中的那条记录删掉。要求事务(不是数据库事务)完整。
那么,如果在B数据库中执行完、删掉A数据库中的记录之前程序出了问题,那么可以说是事务不完整的,有可能导致后来的进程又重复执行了那条已经执行过的任务,怎么解决?
程序是Unix下并发的。

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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