♣
题目 部分
在Oracle中,Undo段中区3种状态分别是什么?
♣
答案部分
Undo信息存储在Undo段中,Undo段又存储在Undo表空间中。Undo表空间仅用于Undo段(在Undo表空间中不能创建其它段类型,例如表、索引等),只能与单个实例相关联。在任意指定时间,一个给定的实例只能有一个表空间是当前可写Undo表空间。Undo表空间是永久的、本地管理的表空间(具有自动区分配),它们由数据库自动进行管理。
Redo和Undo可以从以下几个方面进行区分:
Undo |
Redo |
|
记录内容 |
如何还原更改 |
如何重新生成更改 |
用于 |
事务回滚、实例恢复、一致性读、闪回 |
向前滚动数据库更改,例如数据库恢复(在实例恢复中利用Redo做前滚;在介质恢复中利用归档日志做RECOVER恢复操作实现完全或不完全恢复)、LogMiner、DG、OGG等 |
存储于 |
Undo段 |
Redo日志文件 |
避免 |
在多用户系统中读取不一致 |
数据丢失 |
Oracle Undo段中区3种状态(DBA_UNDO_EXTENTS的STATUS列):ACTIVE、EXPIRED和UNEXPIRED:
l ACTIVE即未提交的Undo信息(活动):表示事物还在活动,该值对应的Undo段的DBA_ROLLBACK_SEGS.STATUS一定是ONLINE状态,一旦没有活动的事务在使用Undo段,那么对应的Undo段就变成OFFLINE状态。ACTIVE状态的Undo区不会被覆盖。
l EXPIRED即过期的Undo信息(过期):表示事务已经提交且超过了UNDO_RETENTION指定时间,该状态可以被覆盖使用。
l UNEXPIRED即提交的Undo信息(未过期):表示事务已经提交但是还没有超过UNDO_RETENTION指定时间,该状态可以被覆盖使用。
关于Undo表空间有如下几个参数:
1SYS@orclasm > show parameter undo 2 3NAME TYPE VALUE 4------------------------------------ ----------- ------------------------------ 5_undo_autotune boolean FALSE 6undo_management string AUTO 7undo_retention integer 900 8undo_tablespace string UNDOTBS1
l UNDO_RETENTION参数指定已提交的Undo信息要保留多长时间(单位为秒),默认为900秒(即15分钟)。但是该值不是绝对的,也就是说,如果有其它事务需要Undo空间,而Undo空间出现不足时,这些信息仍然会被覆盖。只有当表空间设置为GUARANTEE时,才能确保已提交的数据保留UNDO_RETENTION参数设置的时间。RETENTION GUARANTEE是表空间属性而不是初始化参数,此属性只可使用SQL命令行语句来更改。通过更改Undo表空间来保证保留时间的语法是:
1SQL>ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
要将有保留时间保证的还原表空间返回到其常规设置,请使用以下命令:
1SQL>ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;
查询保留时间状态:
1SQL> SELECT RETENTION FROM DBA_TABLESPACES WHERE TABLESPACE_NAME LIKE 'UNDO%';
如果设置UNDO_RETENTION为0,那么Oracle启用自动调整UNDO_RETENTION(auto tuning of undo_retention)以满足最长运行查询的需要,在告警日志文件中可以看到如下信息:
1Autotune of undo retention is turned on.
可以通过设置“"_undo_autotune"=FALSE”来显式的关闭自动调整UNDO_RETENTION功能。
l UNDO_MANAGEMENT参数用于指定Undo数据的管理方式,分为自动Undo管理(AUM,Automatic Undo Management)和手动Undo管理(MUM,Manual Undo Management)。如果要使用AUM,那么必须设置为AUTO;如果要使用MUM,那么必须设置为MANUAL。在使用AUM时,Oracle会使用Undo表空间管理Undo数据;在使用MUM时,Oracle会使用回滚段管理Undo数据。需要注意的是,在使用AUM时,如果没有配置初始化参数UNDO_TABLESPACE,那么Oracle会自动选择第一个可用的Undo表空间存放Undo数据,如果没有可用的Undo表空间,那么Oracle会使用SYSTEM回滚段存放Undo记录,并在告警文件中记录警告。
l UNDO_TABLESPACE 在使用AUM时,该参数用于指定实例所要使用的Undo表空间。在RAC结构中,因为一个Undo表空间不能由多个实例同时使用,所以必须为每个实例配置一个独立的Undo表空间。
有关Undo表空间的恢复请参考:http://blog.itpub.net/26736162/viewspace-1458787/,这里不再详述。有关Undo表空间常用的几个视图如下所示:
1SELECT OWNER,SEGMENT_NAME,BYTES/1024/1024 MB FROM DBA_SEGMENTS WHERE TABLESPACE_NAME='UNDOTBS1'; 2SELECT * FROM DBA_ROLLBACK_SEGS; 3SELECT * FROM V$ROLLNAME; 4SELECT * FROM DBA_UNDO_EXTENTS; 5 6SELECT TABLESPACE_NAME, STATUS, SUM(BYTES) / 1024 / 1024 "Bytes(M)" 7 FROM DBA_UNDO_EXTENTS 8 GROUP BY TABLESPACE_NAME, STATUS; 9 10SELECT R.STATUS "Status", 11 R.SEGMENT_NAME "Name", 12 R.TABLESPACE_NAME "Tablespace", 13 S.EXTENTS "Extents", 14 TO_CHAR((S.BYTES / 1024 / 1024), '99999990.000') "Size" 15FROM SYS.DBA_ROLLBACK_SEGS R, 16 SYS.DBA_SEGMENTS S 17WHERE R.SEGMENT_NAME = S.SEGMENT_NAME 18AND S.SEGMENT_TYPE IN ('ROLLBACK', 'TYPE2 UNDO') 19ORDER BY 5 DESC; 20 21SELECT R.NAME 回滚段名, 22 S.SID SID, 23 S.SERIAL# SERIAL, 24 S.USERNAME 用户名, 25 S.MACHINE 机器名, 26 T.START_TIME 开始时间, 27 T.STATUS 状态, 28 T.USED_UBLK 撤消块, 29 USED_UREC 撤消记录, 30 T.CR_GET 一致性取, 31 T.CR_CHANGE 一致性变化, 32 T.LOG_IO "逻辑I/O", 33 T.PHY_IO "物理I/O", 34 T.NOUNDO NOUNDO, 35 G.EXTENTS EXTENTS, 36 SUBSTR(S.PROGRAM, 1, 50) 操作程序 37FROM V$SESSION S, 38 V$TRANSACTION T, 39 V$ROLLNAME R, 40 V$ROLLSTAT G 41WHERE T.ADDR = S.TADDR 42AND T.XIDUSN = R.USN 43AND R.USN = G.USN 44ORDER BY T.USED_UBLK DESC;
(二)系统回滚段(System Rollback Segment)与延迟回滚段(Deferred Rollback Segment)
SYSTEM回滚段创建在系统表空间中,当手工创建数据库后,在创建普通回滚段之前必须首先创建系统回滚段。但正常情况下,系统回滚段主要用于两个方面:一是系统事务,另一个就是延迟回滚段。延迟回滚段表示的是,当使一个表空间OFFLINE之后,由于表空间不可用(不能进行读写),这个时候若有事务数据位于该表空间并且执行了回滚命令,回滚完成将显示给Client,对于Client看起来该事务已经回滚,但是对于数据库来说该回滚并没有真正完成,这个时候数据库将该回滚信息写入系统回滚段(这就是延迟回滚段),等表空间重新ONLINE的时候,数据库从系统回滚段中将回滚信息写入表空间。
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
---------------优质麦课------------
详细内容可以添加麦老师微信或QQ私聊。
About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。