Internal
2005-04-21
Control SCN of Undo Segments
在回滚段头有一个重要的数据结构称为:Control SCN.
这个SCN是最近一个被重用的事务槽的SCN(重用是按事务的先后顺序重用的)。如果Control SCN比查询的Snapshot SCN新,那么Oracle不会试图去构造前镜像,而是马上返回ORA-01555错误,因为这个UNDO信息肯定已经被覆盖了。
这个Control SCN也会被用于delayed logging cleanout的提交SCN(仅当历史事务的UNDO信息已经被覆盖),在ITL中这个SCN被标记为U,代表"upper bound commit".
我们来看一下这个数据结构:
参考:
http://www.ixora.com.au/q+a/cr.htm
这个SCN是最近一个被重用的事务槽的SCN(重用是按事务的先后顺序重用的)。如果Control SCN比查询的Snapshot SCN新,那么Oracle不会试图去构造前镜像,而是马上返回ORA-01555错误,因为这个UNDO信息肯定已经被覆盖了。
这个Control SCN也会被用于delayed logging cleanout的提交SCN(仅当历史事务的UNDO信息已经被覆盖),在ITL中这个SCN被标记为U,代表"upper bound commit".
我们来看一下这个数据结构:
SQL> create table ud ( n number );
Table created
SQL> insert into ud values(1);
1 row inserted
SQL> insert into ud values(2);
1 row inserted
SQL> commit;
Commit complete
SQL>
SQL> select * from ud;
N
----------
1
2
SQL> update ud set n=1000 where n=2;
1 row updated
SQL> select * from ud;
N
----------
1
1000
SQL> select xidusn,xidslot,xidsqn,ubablk,ubafil,ubarec from v$transaction;
XIDUSN XIDSLOT XIDSQN UBABLK UBAFIL UBAREC
---------- ---------- ---------- ---------- ---------- ----------
2 30 11407 251 2 10
SQL> select usn,name from v$rollname where usn=2;
USN NAME
---------- ------------------------------
2 _SYSSMU2$
SQL> alter system dump undo header '_SYSSMU2$';
System altered
检查trace文件(摘录): TRN CTL:: seq: 0x02cd chd: 0x002e ctl: 0x0018 inc: 0x00000000 nfb: 0x0000
mgc: 0x8201 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
uba: 0x008000fb.02cd.0a scn: 0x0000.0e21169a
这里TRN CTL部分的scn就是前面我们所说的Contrl SCN.参考:
http://www.ixora.com.au/q+a/cr.htm
历史上的今天
- 2020-04-21 Oracle 20c 新特性:表空间缺省加密算法的增强
- 2012-04-21 DTCC 2012 数据库技术大会记
- 2011-04-21 DELETE、TRUNCATE与高水位线(HWM)
- 2010-04-21 Oracle等待事件:inactive session是什么?
- 2009-04-21 沧海桑田 - 记 纵贯线 2009 北京演唱会
- 2008-04-21 Resin、Apache、PHP与404错误
- 2008-04-21 美丽的京剧 美丽的晋剧
- 2007-04-21 在Oracle University大学演讲
- 2007-04-21 悼念我的第一次淘宝购物经历
- 2006-04-21 IT168约以100万美元收购ITPUB
- 2006-04-21 李白手书真迹-上阳台
据说 undo header会发生一致读,来获得control scn;那么这个 TRN CTL 结构 应该没有这么简单。