♣  

题目         部分

在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 undo23NAME                                 TYPE        VALUE4------------------------------------ ----------- ------------------------------5_undo_autotune                       boolean     FALSE6undo_management                      string      AUTO7undo_retention                       integer     9008undo_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; 910SELECT 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      S17WHERE  R.SEGMENT_NAME = S.SEGMENT_NAME18AND    S.SEGMENT_TYPE IN ('ROLLBACK', 'TYPE2 UNDO')19ORDER  BY 5 DESC;2021SELECT 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    G41WHERE  T.ADDR = S.TADDR42AND    T.XIDUSN = R.USN43AND    R.USN = G.USN44ORDER  BY T.USED_UBLK DESC;

 


(二)系统回滚段(System Rollback Segment)与延迟回滚段(Deferred Rollback Segment)

SYSTEM回滚段创建在系统表空间中,当手工创建数据库后,在创建普通回滚段之前必须首先创建系统回滚段。但正常情况下,系统回滚段主要用于两个方面:一是系统事务,另一个就是延迟回滚段。延迟回滚段表示的是,当使一个表空间OFFLINE之后,由于表空间不可用(不能进行读写),这个时候若有事务数据位于该表空间并且执行了回滚命令,回滚完成将显示给Client,对于Client看起来该事务已经回滚,但是对于数据库来说该回滚并没有真正完成,这个时候数据库将该回滚信息写入系统回滚段(这就是延迟回滚段),等表空间重新ONLINE的时候,数据库从系统回滚段中将回滚信息写入表空间。


©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【DB笔试面试543】Oracle用户的状态有几种?分别表示什么含义?
  2. 【linux】实战扩展swap分区
  3. MySQL InnoDB 共享表空间和独立表空间
  4. ReactNative之从HelloWorld中看环境搭建、组件封装、Props及Stat
  5. SYSAUX表空间占用过大情况下的处理(AWR信息过多)
  6. 数据文件、表空间offline用法及区别
  7. Oracle建立表空间和用户
  8. nodejs搭建本地服务器
  9. 磁盘空间不足的解决办法

随机推荐

  1. 2010.11.28(3)———android AlertDialog
  2. Android——ImageButton【图片按钮】的点
  3. Android平台mass storage相关代码
  4. Android Module中导入aar
  5. Android中的颜色
  6. WebView控件中的javascript与Android本地
  7. android开机logo制作
  8. 常见UI控件的使用-富文本、textview
  9. 关于android系统自带数据库SQLite操作的
  10. Android(安卓)远程连接 daemon not runni