在Oracle中,UNDO的作用是什么?
UNDO主要有以下3个作用:
1. 事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,Oracle将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。
2. 事务恢复:当正在处理事务的时候,如果数据库实例由于断电等原因而宕机,那么这个时候回滚段的信息保存在UNDO表空间中,Oracle将在下次打开数据库时利用UNDO表空间的数据来恢复未提交的数据。
3. 读一致性:
l 当一个会话正在修改数据时,其它的会话将看不到该会话未提交的修改。
l 当一个语句正在执行时,该语句将看不到从该语句开始执行后的其它事务未提交的修改(语句级读一致性)。
l 当Oracle执行SELECT语句时,Oracle依照当前的SCN(System Change Number,系统改变号)来保证任何前于当前SCN的未提交的改变不被该语句处理。例如,当一个长时间的查询语句正在执行时,若其它会话改变了该查询要查询的某个数据块,Oracle将利用回滚段的数据前影像来构造一个读一致性视图。