Welcome 微信登录

首页 / 数据库 / MySQL / Oracle dump undo 说明

一. undo 的一些准备知识

在之前的文章里有对undo segment 有说明:Current online Redo 和 Undo 损坏的处理方法 http://www.linuxidc.com/Linux/2012-08/66992.htm1.1 当undo_management被设置成MENUAL时使用系统回滚段, 即将undo records 记录到SYSTEM 表空间下的SYSTEM段。SQL> col segment_name format a10SQL> select segment_name,tablespace_name,bytes,next_extent  from dba_segments where segment_type="ROLLBACK";SEGMENT_NATABLESPACE_NAME       BYTES NEXT_EXTENT---------- ---------------------------------------- -----------SYSTEM     SYSTEM                 393216     1048576通过上面的这条语句,我们查到了这个用于rollback 的system segment 存在与system 表空间。 默认情况下,只有一个segment,并且它还比较小,所以,如果使用system 段来存储undo records。肯定会影响数据库的性能。 所以Oracle 是建议使用Undo tablespace 来管理undo records。1.2 当undo_management设置成AUTO时使用UNDOtablespace来管理回滚段。 这个时候,我们将有多个undo segment,并且这些segment 是存放在UNDO 表空间里的。 这样对DB的性能就会提高。SYS@anqing2(rac2)> select segment_name,tablespace_name, header_file, header_block,bytes  from dba_segments where segment_type="TYPE2 UNDO"; SEGMENT_NAME    TABLESPACE_NAME HEADER_FILEHEADER_BLOCK      BYTES--------------- --------------- ----------------------- ----------_SYSSMU1$       UNDOTBS1                  2            9 107806720_SYSSMU2$       UNDOTBS1                  2           25 111411200_SYSSMU3$       UNDOTBS1                  2           41 120586240_SYSSMU4$       UNDOTBS1                  2           57 100990976_SYSSMU5$       UNDOTBS1                  2           73 112721920_SYSSMU6$       UNDOTBS1                  2           89 117243904_SYSSMU7$       UNDOTBS1                  2          105 106233856_SYSSMU8$       UNDOTBS1                  2          121 155975680_SYSSMU9$       UNDOTBS1                  2          137 184287232_SYSSMU10$      UNDOTBS1                  2          153 149356544_SYSSMU11$      UNDOTBS2                  5            9     131072 SEGMENT_NAME    TABLESPACE_NAME HEADER_FILEHEADER_BLOCK      BYTES--------------- --------------- ----------------------- ----------_SYSSMU12$      UNDOTBS2                  5           25     131072_SYSSMU13$      UNDOTBS2                  5           41     131072_SYSSMU14$      UNDOTBS2                  5           57     131072_SYSSMU15$      UNDOTBS2                  5           73     131072_SYSSMU16$      UNDOTBS2                  5           89     131072_SYSSMU17$      UNDOTBS2                  5          105     131072_SYSSMU18$      UNDOTBS2                  5          121    131072_SYSSMU19$      UNDOTBS2                  5          137     131072_SYSSMU20$      UNDOTBS2                  5          153     13107220 rows selected. 通过以上SQL的查询结果,我们可以看出,每个节点有10个undo segment来存放undo records。以上我们是通过dba_segment 表查看的结果。 也可以通过v$rollstat和v$rollname 两个视图来查看信息。 这2个视图会显示所有rollback 段的信息。 包括system段和undo段。SQL> col name format a15SQL> select s.usn,n.name,s.extents,s.hwmsize,s.status from v$rollstat s, v$rollname n wheres.usn=n.usn;        USNNAME               EXTENTS    HWMSIZESTATUS---------- --------------- -------------------- ---------------         0SYSTEM                   6     385024ONLINE         1_SYSSMU1$                3    7659520ONLINE         2_SYSSMU2$                3    9691136ONLINE         3_SYSSMU3$                4    7462912ONLINE         4_SYSSMU4$                3   76668928ONLINE         5_SYSSMU5$                4    8511488ONLINE         6_SYSSMU6$                3    7462912ONLINE         7_SYSSMU7$                3   33480704ONLINE         8_SYSSMU8$                3    8577024ONLINE         9_SYSSMU9$                3    7462912ONLINE        10_SYSSMU10$               3   13754368ONLINE 11 rows selected.1.3 查看事务当前使用的undo segment可以通过v$transaction 视图来确认事务当前使用的undo segment信息。 确定undo segment之后,就可以进行相关的dump 操作。 关于v$transaction 视图的说明,参考官方文档: http://download.oracle.com/docs/cd/E11882_01/server.112/e17110/dynviews_3114.htm#REFRN30291部分说明如下:
ADDRRAW(4 | 8)Address of the transaction state object
XIDUSNNUMBERUndo segment number
XIDSLOTNUMBERSlot number
XIDSQNNUMBERSequence number
UBAFILNUMBERUndo block address (UBA) filenum
UBABLKNUMBERUBA block number
UBASQNNUMBERUBA sequence number
UBARECNUMBERUBA record number
STATUSVARCHAR2(16)Status
 --查看当前的SID信息SYS@anqing2(rac2)> select sid fromv$mystat where rownum=1;SID----------147SYS@anqing2(rac2)> update ta set name="dave"where name="ora_rowscn";474 rows updated. --查看v$transaction中正在使用的回滚段号SYS@anqing2(rac2)> selectxidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from v$transaction;   XIDUSN    XIDSLOT     XIDSQN    UBABLK     UBAFIL     UBAREC---------- ---------- ---------- -------------------- ----------       11         23       1010         12          5          9--xidusn:undo segment number --xidslot:slot number--xidsqn:sequence number--ubafil:undo block address (uba) filenum--ubablk:uba block number--ubarec:UBA record number其中UBA的格式为:DBA.seq#.rec#,关于UBA的这部分内容, 在我有关itl 的那篇文章里有说明:Orace ITL(InterestedTransaction List) 说明 http://www.linuxidc.com/Linux/2011-08/40284.htm--通过xidusn号和v$rollname确定正在使用的undo segment nameSYS@anqing2(rac2)> select usn,name from v$rollname where usn=11;       USN NAME----------------------------------------        11 _SYSSMU11$ --commit之后,对应的事务信息就没有了。 SYS@anqing2(rac2)> commit;Commit complete.SYS@anqing2(rac2)> selectxidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from v$transaction;no rows selectedSYS@anqing2(rac2)>
  • 1
  • 2
  • 下一页
Oracle datafile block 格式 说明ORA-600 [4194] 说明相关资讯      undo 
  • Oracle 11g undo_retention 以及  (05月28日)
  • undo表空间使用率  (07/23/2015 16:29:56)
  • undo表空间概述  (02/24/2015 20:32:43)
  • Oracle中利用undo进行数据的恢复操  (11/27/2015 09:31:30)
  • undo表空间修复小结  (07/08/2015 08:43:13)
  • Oracle 11gR2 Database UNDO表空间  (01/29/2015 11:30:59)
本文评论 查看全部评论 (0)
表情: 姓名: 字数