一、回退段介绍
在Oracle数据库中,当某个事物对数据进行修改时,Oracle首先将数据的原始值保存到一个回退段中。一个事物只能将它的回退信息保存到一个回退段中,而多个并行事物可以使用同一个回退段。
(1)回退段的作用
回退段主要有4个作用,分别是:事物回滚、数据库恢复、读一致性、闪回查询。
—事物回滚:当事物执行失败或用户执行回滚操作(rollback)时,Oracle会利用保存在回退段中的信息将数据恢复到原来的值;
—数据库恢复:当数据库实例运行失败,在数据库重启恢复时,Oracle先利用重做日志文件的信息对数据库进行恢复(包括已提交和未提交的事务),再利用回滚段中的信息回滚未提交的事务;
—读一致性:当一个用户对数据进行修改时,会预先将其原始值保存到回退段中,这时,如果有其它用户访问该数据,则访问回退段中的信息,使当前用户未提交的修改其他用户无法看到,保证了数据的一致性;
—闪回查询:通过保留在回退段中的信息,用户可以查询某个数据在过去某个时刻的状态
(2)回退段的工作方式
当事务开始时,系统分配给该事物一个回退段,在事务的整个生命周期中,当数据发生改变时,数据的原始值被复制到回退段中。回退段采用循环写的方式进行工作,当事务写满回退段的一个区之后,会接着写入回退段的下一个区,当所有的区都写满后,事务开始循环写入到第一个区或者分配新的区(datafile为autoextend)。回退段归用户sys所有,每个回退段至少包含2个区。
保证还原保留时间
RETENTION GUARANTEE 是表空间属性而不是初始化参数。此属性只可使用SQL 命令行
语句来更改。将还原表空间改为采用保留时间保证设置的语法是:
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled boolean TRUE
undo_management string AUTO
undo_retention integer 86400
undo_tablespace string UNDOTBS02
SQL> ALTER TABLESPACE undotbs02 RETENTION GUARANTEE;
Tablespace altered.
要将设置了保留时间保证的还原表空间返回到其常规设置,请使用以下命令:
SQL> ALTER TABLESPACE undotbs02 RETENTION NOGUARANTEE.
将还原表空间改为固定大小
可能出于以下两个原因,需要将还原表空间改为固定大小:支持闪回操作(预期将来会使
用还原功能)或防止表空间增长过大。
如果决定将还原表空间改为固定大小,则必须选择一个足够大的大小以避免以下两类错误:
• DML 失败(因为空间不够大,无法存储新事务处理的还原数据)
• “快照太旧”错误(因为没有足够的还原数据来实现读取一致性)