undo 里面记录的是被修改的数据块的前镜像,但是他并不是原数据块的copy,而是一个改变向量,真正的一致性读要借助CR块,Cr块也就是consistent read块它用来维护Oracle的读一致性的数据块。当查询某些数据的时候,发现数据块的版本比我们要查询的新,例如session1执行了dml操作并没有提交,session2此时查找跟session1相关的dml操作的数据信息,此时查询的数据却是原来的数据信息。
查询的过程会在undo段中查找该数据块的前映像后,然后把前映像和current块合并形成了一个CR block,通过查询cr block就可以满足数据的一致性了。
CR block存在于sga的buffer cache中,在db cache里申请一个数据块(当前块),然后和对应的回滚段的前映像生成cr block。
如果在CDB 根下执行,则会继承到CDB下的PDB,也可以切换到具体的PDB下执行修改undo_retention的操作
关于undo的参数:
SQL> alter system set undo_retention=10800 scope=both sid='*';
System altered.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 10800
undo_tablespace string UNDOTBS1
SQL> alter system set undo_retention=7200 scope=both sid='*';
System altered.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 7200
undo_tablespace string UNDOTBS1
版权声明:本文为博主原创文章,未经博主允许不得转载。
oracle