本文将为大家逐步解读Oracle使用手册中提及的如何为Oracle的闪回(Flashback)特性设置自动撤消管理(Automatic UNDO Management),相应地附上相关脚本和注意事项。
Oracle数据库闪回特性在实际应用中的第一道坎就是自动撤消管理。对于并没有完全了解“undo”为何物的人来说,undo只是Oracle存储起来用于数据库回滚或撤消操作的信息。一谈到闪回技术,undo数据在某一时间点前的数据重建上的重要性可以说显而易见。然而,任何事情都是两面的,在闪回某特定时间点数据的实际操作中,undo也是一个制约因素;如果没有足够的undo数据,那么闪回查询就会失败,甚至触发一些异常的数据库错误。
Oracle一直以来都极力支持使用自动撤消管理,当然是有原因的。相信那些曾经和手动撤消管理进行过奋战的DBA们是深谙其中的困难,你得花上相当的时间和精力来正确创建和控制回滚段,不停地重复调整回滚段的大小,才能避免出现ORA-1555快照过旧之类的错误。有了自动撤消管理(AUM)就不一样了,Oracle就可以为你自动监控和管理撤消段。从Oracle 11g开始,AUM成为默认设置,而且绝大部分数据库都会在创建时生成一个名为UNDOTBS1的自动扩展的撤消表空间。你可以用以下的SQL语句来查看该撤消表空间:
SQL> SELECT dt.tablespace_name, dt.contents,
ddf.file_name, ddf.bytes/1024/1024 size_MEG
FROM dba_tablespaces dt,
dba_data_files ddf
WHERE dt.tablespace_name = ddf.tablespace_name
AND dt.contents = 'UNDO';
TABLESPACE_NAME CONTENTS FILE_NAME SIZE_MEG
--------------- --------- --------------------------------- ----------
UNDOTBS1 UNDO /oradata/db11FS/undotbs01.dbf 2048
如果你的数据库中没有撤消表空间,用CREATE TABLESPACE语句很容易就能够创建一个。如果选择了AUTOEXETEND选项,则如下所示:CREATE UNDO TABLESPACE undotbs1
DATAFILE '/oradata/db11FS/undotbs01.dbf' SIZE 2048M REUSE AUTOEXTEND ON;
如果你正在被手动撤消管理(使用回滚段)折腾得焦头烂额,不妨轻松过渡到自动撤消管理。切换的法门就在UNDO_MANAGEMENT初始化参数,它可以指定系统当前使用的撤消模式。通过SHOW PARAMETER命令可以查看当前的参数设置:
SQL> SHOW PARAMETER undo
NAME TYPE VALUE
--------------------- ----------- ---------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1