oracle事务概述

事务的概念都是关系数据库范例的一部分。事务由一个或多个DML语句组成,后面紧跟着ROLLBACK或COMMIT命令。可以在事务内使用SAVEPOINT命令给出控制程度。

1.数据库事务

oracle确保事务完整性的机制是撤销段和重做日志文件的组合:此机制无疑是迄今为止开发的任何数据库中的翘楚,而且完全符合数据处理的国际标准。虽然其他数据库供应商能够通过使用自己的机制遵循相同的标准,但是却改变了效率级别。简而言之,任何关系数据库都必须能够通过ACID测试,必须确保原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
1.原子性
原子性原则规定一个事务的所有部分必须都完成,或都不完成(该术语背后的理论是原子不可再分——现在大家知道这是一个错误的假设)。例如,如果业务分析师认为每次某个雇员的薪水发生变化时都必须更改该雇员的等级,那么这个”原子“事务就由两个更新操作组成。数据库必须保证两个更新操作都能完成或者都不完成。如果只有一个更新操作被成功执行,那么雇员的薪水与等级会出现矛盾(商业术语为数据损坏)。如果事务在完成之前出现任何错误,那么数据库自身就必须保证自动回滚所做过的任何事务部分(并且必须自动进行)。虽然原子事务听起来似乎像原子一样小,然而事实上它可以非常大。再举一个例子,从逻辑上看,某个财务软件的名目账项总账不能为八、九月份各半月的账目之和,因此月末转账就是一个原子事务,这个事务可能会影响数千个表中的几百万条记录,并且需要花费几个小时才能完成(或者在出现错误时所进行的回滚)。未完成事务的回滚可以是人工进行的(此时需要执行ROLLBACK命令),不过在出现错误的情况下,回滚必须是自动的和不可停止的。
2.一致性
一致性的原则规定查询的结果必须与数据库在查询开始时的状态一致。假设要进行一个简单的查询,该查询会求取某个表中某列数据的平均值。如果这个表很大,那么扫描整个表需要数分钟时间。在这个查询进行期间,如果其他用户也在更新该列,那么查询应当包括新值还是旧值?查询应当包含在查询启动之后被插入或被删除的记录吗?一致性的原则要求数据库确保查询不会看见改变后的值;无论这个查询经过多长时间或者发生与指定表相关的其他任何动作,它都会提供查询开始时指定列所有数据的平均值。oracle能够保证:在查询成功的前提下,查询结果是一致的。不过,如果数据库管理员没有正确的配置数据库,那么查询就不会成功,就会产生一个常见的oracle错误:“ORA-1555 snapshot too old”。对于旧版本而言,这是一个极难解决的问题,不过对于最近的版本,数据库管理员可以避免这个问题。
3.隔离性
隔离性的原则规定对于其他部分来说,未完成的(也就是未提交的)事务必须不可见。在某个事务进行期间,只有执行该事务的一个会话能看见所做的变更,而其他所有会话看见的都是没有变更的数据(而不是更改后的新值)。这个规定的逻辑含义是:首先,由于整个事务可能没有全部完成(前面介绍了原子性原则以及自动或手动回滚),因此不允许其他用户看到可能反转的变更。其次,在某个事务进行期间,数据时不一致的,也就是说在雇员的薪水发生变化后的短暂时间里,其薪水等级尚未发生相应的变化。事务隔离性要求数据库必须对其他用户隐藏正在进行的事务,这些用户只能看到没有被更新的数据,只有在事务完成时,他们才能看到作为一个一致集合的所有变更。
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值