Oracle dump undo 说明

红尘浪子 2012-08-01

一. undo 的一些准备知识

在之前的文章里有对undo segment 有说明:

1.1 当undo_management被设置成MENUAL时使用系统回滚段, 即将undo records 记录到SYSTEM 表空间下的SYSTEM段。

SQL> col segment_name format a10

SQL> 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     131072

20 rows selected. 

通过以上SQL的查询结果,我们可以看出,每个节点有10个undo segment来存放undo records。

以上我们是通过dba_segment 表查看的结果。 也可以通过v$rollstat和v$rollname 两个视图来查看信息。 这2个视图会显示所有rollback 段的信息。 包括system段和undo段。

SQL> col name format a15

SQL> 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

部分说明如下:

ADDR

RAW(4 | 8)

Address of the transaction state object

XIDUSN

NUMBER

Undo segment number

XIDSLOT

NUMBER

Slot number

XIDSQN

NUMBER

Sequence number

UBAFIL

NUMBER

Undo block address (UBA) filenum

UBABLK

NUMBER

UBA block number

UBASQN

NUMBER

UBA sequence number

UBAREC

NUMBER

UBA record number

STATUS

VARCHAR2(16)

Status

 

--查看当前的SID信息

SYS@anqing2(rac2)> select sid fromv$mystat where rownum=1;

SID

----------

147

SYS@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

--通过xidusn号和v$rollname确定正在使用的undo segment name

SYS@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 selected

SYS@anqing2(rac2)>

相关推荐