一. 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部分说明如下:
| 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----------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)>
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)