永发信息网

如何让jms事务与数据库事务处于同一事务中

答案:1  悬赏:50  手机版
解决时间 2021-03-26 02:43
如何让jms事务与数据库事务处于同一事务中
最佳答案
一 事务处理介绍
事务是这样一种机制,它确保多个SQL语句被当作单个工作单
元来处理。事务具有以下的作用:
* 一致性:同时进行的查询和更新彼此不会发生冲突,其他
用户不会看到发生了变化但尚未提交的数据。
* 可恢复性:一旦系统故障,数据库会自动地完全恢复未完
成的事务。

二 事务与一致性
事务是完整性的单位,一个事务的执行是把数据库从一个一
致的状态转换成另一个一致的状态。因此,如果事务孤立执行时
是正确的,但如果多个事务并发交错地执行,就可能相互干扰,
造成数据库状态的不一致。在多用户环境中,数据库必须避免同
时进行的查询和更新发生冲突。这一点是很重要的,如果正在被
处理的数据能够在该处理正在运行时被另一用户的修改所改变,
那么该处理结果是不明确的。
不加控制的并发存取会产生以下几种错误:
1 丢失修改(lost updates)
当多个事务并发修改一个数据时,不加控制会得出错误的结
果,一个修改会覆盖掉另一个修改。
2 读的不可重复性
当多个事务按某种时间顺序存取若干数据时,如果对并发存
取不加控制,也会产生错误。
3 脏读(DIRDY DATA),读的不一致性
4 光标带来的当前值的混乱
事务在执行过程中它在某个表上的当前查找位置是由光标表
示的。光标指向当前正处理的记录。当处理完该条记录后,则指
向下一条记录。在多个事务并发执行时,某一事务的修改可能产
生负作用,使与这些光标有关的事务出错。
5 未释放修改造成连锁退出
一个事务在进行修改操作的过程中可能会发生故障,这时需
要将已做的修改回退(Rollback)。如果在已进行过或已发现错
误尚未复原之前允许其它事务读已做过修改(脏读),则会导致
连锁退出。
6 一事务在对一表更新时,另外的事务却修改或删除此表的
定义。
数据库会为每个事务自动地设置适当级别的锁定。对于前面
讲述的问题:脏读、未释放修改造成的连锁退出、一事务在对一
表更新时另外的事务却修改或删除此表的定义,数据库都会自动
解决。而另外的三个问题则需要在编程过程中人为地定义事务或
加锁来解决。
三 事务和恢复
数据库本身肩负着管理事务的责任。事务是最小的逻辑工作
单元,在这个工作单元中,对数据库的所有更新工作,要么必须
全部成功,要么必须全部失败(回退)。只要应用程序指定了某
段程序为一个事务并做了相应的处理(提交或回退),数据库系
统会自动维护事务本身的特性。

四 ORACLE数据库的事务定义
ORACLE事务从COMMIT、ROLLBACK、连接到数据库或开始第一
条可执行的SQL语句时开始,到一条COMMIT、ROLLBACK语句或退出
数据库时结束。如果在一个事务中包含DDL语句,则在DDL语句的
前后都会隐含地执行COMMIT语句,从而开始或结束一个事务。
如果一个事务由于某些故障或者由于用户改变主意而必须在
提交前取消它,则数据库被恢复到这些语句和过程执行之前的状
态。
利用ROLLBACK语句可以在COMMIT命令前随时撤消或回退一个
事务。可以回退整个事务,也可以会退部分事务,但是不能回退
一个已经被提交的事务。回退部分事务的ROLLBACK命令为:
ROLLBACK to savepoint 存储点名
存储点是用户放入事务中的标记,用来表示一个可被回退的
位置。存储点通过在事务中放入一个SAVEPOINT命令而被插入。该
命令的语法是:
SAVEPOINT 存储点名
如果在ROLLBACK语句中没有给出存储点名,则整个事务被回
退。
五 SYBASE数据库的事务定义
SYBASE通过使用BEGIN TRANsaction和COMMIT TRANsaction命令指
示SQL将任意数目的语句作为一个单元来处理。ROLLBACK TRANsaction
命令则允许用户恢复到事务的开始,或恢复到事务内部已经被用SAVE
TRANsaction命令定义的存储点上。
BEGIN TRANsaction和COMMIT TRANsaction能够包含任意数目的SQL
语句和存储过程,方法很简单:
BEGIN TRANsaction [事务名称]
COMMIT TRANsaction
如果一个事务由于某些故障或者由于用户改变主意而必须在提交
前取消它,则数据库被恢复到这些语句和过程执行之前的状态。
利用ROLLBACK TRANsaction命令可以在COMMIT TRANsaction命令
前随时回退一个事务。可以回退整个事务,也可以回退部分事务,但
是不能回退一个已经被提交的事务。ROLLBACK TRANsaction命令为:
ROLLBACK TRANsaction [事务名|存储点名]
存储点名是用户放入事务中的标记,用来表示一个可以被回退的
位置。存储点名通过在事务中放入一个SAVE TRANsaction命令而被插
入。该命令的句法是:
SAVE TRANsaction 存储点名
如果在ROLLBACK TRANsaction中没有给出存储点名或事务名,则
事务被回退到批处理中的第一个BEGIN TRANsaction语句处。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
谁有猫咪软件,求发
3dripperdx 能在64位系统用么-= -..为什么我
枭雄什么意思呀
汽水中因溶解有
让四季都变成冬天安静又纯洁是什么歌?
if (event.keyCode == 13){window.event.keyC
springer journal是哪个国家
之前在百胜做了5年,从学生时期的兼职服务员
老鼠爱大米的歌曲争议
外国把自己全部身家捐出去是真的还是假的
橄榄核活性炭半成品怎样做?
陈哈尼的床戏
我前面在贵阳被女网友骗了三万多人民币,我们
中国和越南战争谁赢了,?
相亲认识的男孩快两个月了没有牵过我手,偶然
推荐资讯
KENWOOD健伍旧音箱现在价值多少钱?
田边的一种植物
为什么会产生企业
Zephyr作为实时操作系统,采用怎样的执行模式
这个男人喜欢我 我不跟他在一起,现在找我各
在那时 英语
“请带我一起走”用英语怎么说
黄翠如踏入TVB之前也一帆风顺?
固体、液体、气体都是由分子组成的.气态物质
用英语介绍你会做的事,用I can这个句型,语
fun it is to jump into a pool or go swimmi
千里黄云白日曛的下一句
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?