Oracle的事务类型
Oracle的事务处理类型有点像SQL Server的隐式事务。当执行到第一个可执行的SQL语句时自动打开事务,然后需要调用方执行commit或者rollback来提交或者回滚事务,如果有DDL语句,Oracle也会自动提交事务的。
参考:Transaction Management
Oracle的事务的实现
Oracle的结构分逻辑上和物理上的区别。逻辑上的结构是表空间,而物理上的结构是数据文件。
逻辑实现
Oracle下实现事务在逻辑上是由Undo Tablespace来实现的。Undo Tablespace包含Undo Segements(段),而Undo Segements包含Undo Data。Undo Data是支持事务的逻辑单元。
图源自于《Oracle Database 10g: Administration Workshop I》
Undo Data用于保存修改前后的数据,以支持回滚,长时间查询,和flashback查询,以及失败事务恢复的功能。
由于有了Undo Data,回滚事务变得容易了,因为Undo Data保存了修改前后的数据,保证了事务的原子性。失败事务恢复和事务回滚类似,当网络中断或者其他原因导致事务异常停止,数据库引擎可以恢复到一致性状态。
同时Undo Data也支持长时间查询(Read-consistent),例如有表格T,主键为key,有字段为f1,数据如下,尽管只有4条数据,假设需要很长时间进行查询。