12
返回列表 发新帖
楼主: hqs4500

如何查询某行的scn

[复制链接]
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
11#
发表于 2003-7-2 10:14 | 只看该作者

呵呵

如果你真正地动手看看
你会发现你的这个猜想更是站不住脚的!
如果你要去研究 oracle internal ,你就要知道怎么样去通过实验的办法来证实或者推翻你的猜想
如果你觉得你的猜想中有矛盾的或者不合理的地方,99.9999% 是你理解错误而不是oracle有问题

因为,如果已经提交,那ITL 就已经可以被覆盖了
所以,根本不会出现ITL你说的情况,在这样的例子下,始终只存在着一个 ITL ,而不会存在多个
至于行上的  ITL 信息,会被清掉的

test  for you !

SQL> create table itl( a number) ;

Table created.

SQL> insert into itl select rownum from t where rownum < 11;

10 rows created.

SQL> commit;

Commit complete.

SQL>  exec show_space('itl');
Free Blocks.............................1
Total Blocks............................16
Total Bytes.............................131072
Unused Blocks...........................14
Unused Bytes............................114688
Last Used Ext FileId....................3
Last Used Ext BlockId...................1378
Last Used Block.........................2

PL/SQL procedure successfully completed.

SQL>  alter system dump datafile 3 block 1379;

Block header dump:  0x00c00563
Object id on Block? Y
seg/obj: 0x68fc  csc: 0x00.272a3b5  itc: 1  flg: O  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x1    xid:  0x0005.040.00000117    uba: 0x0080233e.01f9.11  --U-   10  fsc 0x0000.0272a3b7

data_block_dump
===============
tsiz: 0x1fb8
hsiz: 0x26
pbl: 0x070c6c44
bdba: 0x00c00563
flag=-----------
ntab=1
nrow=10
frre=-1
fsbo=0x26
fseo=0x1f7c
avsp=0x1f38
tosp=0x1f38
0xe: pti[0]        nrow=10        offs=0
0x12: pri[0]        offs=0x1f7c
0x14: pri[1]        offs=0x1f82
0x16: pri[2]        offs=0x1f88
0x18: pri[3]        offs=0x1f8e
0x1a: pri[4]        offs=0x1f94
0x1c: pri[5]        offs=0x1f9a
0x1e: pri[6]        offs=0x1fa0
0x20: pri[7]        offs=0x1fa6
0x22: pri[8]        offs=0x1fac
0x24: pri[9]        offs=0x1fb2
block_row_dump:
tab 0, row 0, @0x1f7c
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 02
tab 0, row 1, @0x1f82
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 03
tab 0, row 2, @0x1f88
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 04
tab 0, row 3, @0x1f8e
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 05
tab 0, row 4, @0x1f94
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 06
tab 0, row 5, @0x1f9a
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 07
tab 0, row 6, @0x1fa0
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 08
tab 0, row 7, @0x1fa6
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 09
tab 0, row 8, @0x1fac
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 0a
tab 0, row 9, @0x1fb2
tl: 6 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 2]  c1 0b
end_of_block_dump
End dump data blocks tsn: 2 file#: 3 minblk 1379 maxblk 1379



SQL> update itl set a = -1 where a = 1;  

1 row updated.

SQL> commit;

Commit complete.

SQL>  alter system dump datafile 3 block 1379;

Block header dump:  0x00c00563
Object id on Block? Y
seg/obj: 0x68fc  csc: 0x00.272a3b8  itc: 1  flg: O  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x1    xid:  0x0006.03b.00000173    uba: 0x00800a04.032b.0e  --U-    1  fsc 0x0000.0272a3ba

data_block_dump
===============
tsiz: 0x1fb8
hsiz: 0x26
pbl: 0x070c6c44
bdba: 0x00c00563
flag=-----------
ntab=1
nrow=10
frre=-1
fsbo=0x26
fseo=0x1f75
avsp=0x1f38
tosp=0x1f38
0xe: pti[0]        nrow=10        offs=0
0x12: pri[0]        offs=0x1f75
0x14: pri[1]        offs=0x1f82
0x16: pri[2]        offs=0x1f88
0x18: pri[3]        offs=0x1f8e
0x1a: pri[4]        offs=0x1f94
0x1c: pri[5]        offs=0x1f9a
0x1e: pri[6]        offs=0x1fa0
0x20: pri[7]        offs=0x1fa6
0x22: pri[8]        offs=0x1fac
0x24: pri[9]        offs=0x1fb2
block_row_dump:
tab 0, row 0, @0x1f75
tl: 7 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 3]  3e 64 66
tab 0, row 1, @0x1f82
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 03
tab 0, row 2, @0x1f88
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 04
tab 0, row 3, @0x1f8e
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 05
tab 0, row 4, @0x1f94
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 06
tab 0, row 5, @0x1f9a
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 07
tab 0, row 6, @0x1fa0
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 08
tab 0, row 7, @0x1fa6
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 09
tab 0, row 8, @0x1fac
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 0a
tab 0, row 9, @0x1fb2
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 0b
end_of_block_dump
End dump data blocks tsn: 2 file#: 3 minblk 1379 maxblk 1379



SQL> update itl set a = -2  where a = 2;

1 row updated.

SQL> commit;

Commit complete.

SQL>  alter system dump datafile 3 block 1379;

Block header dump:  0x00c00563
Object id on Block? Y
seg/obj: 0x68fc  csc: 0x00.272a3bb  itc: 1  flg: O  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x1    xid:  0x0007.060.0000012c    uba: 0x00800c04.01d9.1a  --U-    1  fsc 0x0000.0272a3bd

data_block_dump
===============
tsiz: 0x1fb8
hsiz: 0x26
pbl: 0x070c6c44
bdba: 0x00c00563
flag=-----------
ntab=1
nrow=10
frre=-1
fsbo=0x26
fseo=0x1f6e
avsp=0x1f38
tosp=0x1f38
0xe: pti[0]        nrow=10        offs=0
0x12: pri[0]        offs=0x1f75
0x14: pri[1]        offs=0x1f6e
0x16: pri[2]        offs=0x1f88
0x18: pri[3]        offs=0x1f8e
0x1a: pri[4]        offs=0x1f94
0x1c: pri[5]        offs=0x1f9a
0x1e: pri[6]        offs=0x1fa0
0x20: pri[7]        offs=0x1fa6
0x22: pri[8]        offs=0x1fac
0x24: pri[9]        offs=0x1fb2
block_row_dump:
tab 0, row 0, @0x1f75
tl: 7 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 3]  3e 64 66
tab 0, row 1, @0x1f6e
tl: 7 fb: --H-FL-- lb: 0x1 cc: 1
col  0: [ 3]  3e 63 66
tab 0, row 2, @0x1f88
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 04
tab 0, row 3, @0x1f8e
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 05
tab 0, row 4, @0x1f94
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 06
tab 0, row 5, @0x1f9a
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 07
tab 0, row 6, @0x1fa0
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 08
tab 0, row 7, @0x1fa6
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 09
tab 0, row 8, @0x1fac
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 0a
tab 0, row 9, @0x1fb2
tl: 6 fb: --H-FL-- lb: 0x0 cc: 1
col  0: [ 2]  c1 0b
end_of_block_dump
End dump data blocks tsn: 2 file#: 3 minblk 1379 maxblk 1379

使用道具 举报

回复
论坛徽章:
48
娜美
日期:2016-11-25 10:31:35宝马
日期:2014-01-28 09:04:04阿斯顿马丁
日期:2014-01-22 15:03:55奥迪
日期:2013-10-25 14:33:53劳斯莱斯
日期:2013-10-11 14:28:46宝马
日期:2013-09-29 12:56:56问答徽章
日期:2013-09-26 10:44:48Jeep
日期:2013-09-09 10:52:59茶鸡蛋
日期:2013-06-27 15:31:59茶鸡蛋
日期:2013-03-14 16:32:43
12#
 楼主| 发表于 2003-7-3 08:46 | 只看该作者

还是不明白,容我最后一问

biti:
你开始说行的scn从对应的itl中得到,你的实验说明第2行update时覆盖了第1行对应的itl(0x01),那么这时如何获得第1行的scn呢?
谢谢你的耐心。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
13#
发表于 2003-7-3 09:09 | 只看该作者

o

SCN是用来保证一致性读的,如果该 记录 明确已经commit了这个时候可以清除其  ITL ,当再有查询来查到该记录的时候如果并且 commit SCN 小于 查询 SCN,已经不用 consistent reads
如果这时还要去搜寻 ITL  以明确是否需要从回滚段取数据  或者 产生 delay  block  cleanout,这完全是没有必要的浪费 CPU 资源的行为,没有这个必要



若 commit SCN 大于查询SCN 则需要 产生 consistent reads ……

参考内容:
http://218.75.125.211/bin/ut/top ... p;bpg=2&age=100

使用道具 举报

回复
论坛徽章:
48
娜美
日期:2016-11-25 10:31:35宝马
日期:2014-01-28 09:04:04阿斯顿马丁
日期:2014-01-22 15:03:55奥迪
日期:2013-10-25 14:33:53劳斯莱斯
日期:2013-10-11 14:28:46宝马
日期:2013-09-29 12:56:56问答徽章
日期:2013-09-26 10:44:48Jeep
日期:2013-09-09 10:52:59茶鸡蛋
日期:2013-06-27 15:31:59茶鸡蛋
日期:2013-03-14 16:32:43
14#
 楼主| 发表于 2003-7-3 09:46 | 只看该作者

实在不好意思

呵呵,
不比较scn,如何知道无需consistent read?

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
15#
发表于 2003-7-3 09:57 | 只看该作者

oracle 已经能确保不需要 consistent reads

所以就不用比较 SCN 了(因为实际情况已经明确不需要consistent reads了)

为什么非要比较了SCN 再去判定是否需要  consistent READS 呢?

能省的步骤就省!

为什么不需要比较SCN ? 假设你修改某个块的时候发现某行数据已经提交
你说是不是可以就确信 在你访问之后的所有会话来访问的时候已经不需要 consistent reads 了?
如能确信这点(事实上这是正确的),那你是不是可以抹去 ITL (scn),让后面的来访问的会话根本没必要去消耗这个CPU的代价?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表