watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


Q          题目如下所示:

在Oracle中,UNDO的作用是什么?


     
A          答案如下所示:          


UNDO主要有以下3个作用:

1. 事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,Oracle将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。

2. 事务恢复:当正在处理事务的时候,如果数据库实例由于断电等原因而宕机,那么这个时候回滚段的信息保存在UNDO表空间中,Oracle将在下次打开数据库时利用UNDO表空间的数据来恢复未提交的数据。

3. 读一致性:

l 当一个会话正在修改数据时,其它的会话将看不到该会话未提交的修改。

l 当一个语句正在执行时,该语句将看不到从该语句开始执行后的其它事务未提交的修改(语句级读一致性)。

l 当Oracle执行SELECT语句时,Oracle依照当前的SCN(System Change Number,系统改变号)来保证任何前于当前SCN的未提交的改变不被该语句处理。例如,当一个长时间的查询语句正在执行时,若其它会话改变了该查询要查询的某个数据块,Oracle将利用回滚段的数据前影像来构造一个读一致性视图。