背景:
按照《Oracle Conecpt》的结构一起了解Oracle。
历史文章:
《》
《》
《》
《》
《》
作为《Concept》的前言,有六个主题,可以说是整本书的缩略,
About Relational Databases
Schema Objects
Data Access
Transaction Management
Oracle Database Architecture
Oracle Database Documentation Roadmap
本文主题:前言《Introduction to Oracle Database》 - “Transaction Management”。
交易管理,Transaction Management
Oracle最初的设计,就是一种多用户数据库。数据库确保多个用户能并发操作而不会互相影响对方的数据。
交易
作为关系型数据库管理系统,必须支持SQL语句的组合,保证这些语句要么都提交,要么都回滚。这就是所谓“事务”的概念,你可以将他理解为逻辑、原子的工作单元,包含至少一条SQL。
例如,转账的场景,就非常需要“交易”。转账操作,包含以下步骤:
减少存款账户的资金。
增加目标账户的资金。
在交易记录中标记这个交易。
Oracle数据库保证这三项操作,作为一个单元,要么成功,要么失败。例如,若出现硬件故障,阻止了某条语句的执行,那么其他的语句,就必须进行回滚。
“交易”是Oracle数据库区别于文件系统的特征之一。如果你在文件系统上,更新了一些文件,此时操作系统半途崩溃,文件就会处于不一致的状态。相比之下,“交易”会让Oracle从一种状态,迁移至另一种一致的状态。交易的基本原则,就是“要么都执行,要么都不执行”。换句话说,就是原子操作,作为整体,要么成功、要么失败。
数据并发,Data Concurrency
多用户的关系型数据库管理系统需求之一,就是对于并发的控制,也就是允许多个用户,同时访问相同的数据。如果没有并发的控制,用户就能非法改编数据,造成数据的不一致。例如,某个用户更新一行记录,同时,另一个用户也在更新这行。
如果多个用户,同时访问相同的数据,控制并发的一种方法,就是让用户等待。然而,数据库管理系统的目标,就是减少等待,因此要么不会让用户等待,要么让其等待的影响,可以忽略不计。所有改数据的SQL,必须尽可能没有影响。必须避免错误地更新数据或者更改底层数据结构。
Oracle数据库使用锁机制来控制对于数据的并发访问。锁,是一种阻止不同交易访问共享资源进而冲突的机制。锁可以确保数据完整性,同时还能允许,最大的数据并发访问。
数据一致性,Data Consistency
Oracle数据库中,用户必须看的是,数据一致性视图,包括该用户交易所做的变更,以及其他用户提交的交易。例如,数据库必须阻执脏读,脏读指的是某个交易,可以看见其他交易做的、尚未提交的变更。
Oracle数据库强制语句级读一致性,确保每条检索返回的数据,在同一个时间点上是一致的。依赖于交易隔离级别,这个时间点就是语句开始执行,或者说交易开始。闪回查询功能,可以指出需要回退的时间点。
对于一次交易的所有查询,数据库也能支持读一致性,通常理解为交易级别的读一致性。交易中每条语句看见的都是同一个时间点的数据,这个时间点,就是交易开始的时间。
如果您觉得本文有帮助,欢迎关注转发:bisal的个人杂货铺,