一、回退段介绍
    在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中。一个事物只能将它的回退信息保存到一个回退段中,而多个并行事物可以使用同一个回退段。
    (1)回退段的作用
    回退段主要有4个作用,分别是:事物回滚、数据库恢复、读一致性、闪回查询。
    —事物回滚:当事物执行失败或用户执行回滚操作(rollback)时,Oracle会利用保存在回退段中的信息将数据恢复到原来的值;
    —数据库恢复:当数据库实例运行失败,在数据库重启恢复时,Oracle先利用重做日志文件的信息对数据库进行恢复(包括已提交和未提交的事务),再利用回滚段中的信息回滚未提交的事务;
    —读一致性:当一个用户对数据进行修改时,会预先将其原始值保存到回退段中,这时,如果有其它用户访问该数据,则访问回退段中的信息,使当前用户未提交的修改其他用户无法看到,保证了数据的一致性;
    —闪回查询:通过保留在回退段中的信息,用户可以查询某个数据在过去某个时刻的状态
    (2)回退段的工作方式
    当事务开始时,系统分配给该事物一个回退段,在事务的整个生命周期中,当数据发生改变时,数据的原始值被复制到回退段中。回退段采用循环写的方式进行工作,当事务写满回退段的一个区之后,会接着写入回退段的下一个区,当所有的区都写满后,事务开始循环写入到第一个区或者分配新的区(datafile为autoextend)。回退段归用户sys所有,每个回退段至少包含2个区。
    保证还原保留时间
    RETENTION GUARANTEE 是表空间属性而不是初始化参数。此属性只可使用SQL 命令行
    语句来更改。将还原表空间改为采用保留时间保证设置的语法是:

    1. SQL> show parameter undo
    2. NAME TYPE VALUE
    3. ------------------------------------ ----------- ------------------------------
    4. temp_undo_enabled boolean TRUE
    5. undo_management string AUTO
    6. undo_retention integer 86400
    7. undo_tablespace string UNDOTBS02
    8. SQL> ALTER TABLESPACE undotbs02 RETENTION GUARANTEE;
    9. Tablespace altered.
    10. 要将设置了保留时间保证的还原表空间返回到其常规设置,请使用以下命令:
    11. SQL> ALTER TABLESPACE undotbs02 RETENTION NOGUARANTEE.

    将还原表空间改为固定大小
    可能出于以下两个原因,需要将还原表空间改为固定大小:支持闪回操作(预期将来会使
    用还原功能)或防止表空间增长过大。
    如果决定将还原表空间改为固定大小,则必须选择一个足够大的大小以避免以下两类错误:
    • DML 失败(因为空间不够大,无法存储新事务处理的还原数据)
    • “快照太旧”错误(因为没有足够的还原数据来实现读取一致性)