请先移步从底向上了解DML操作http://www.itpub.net/thread-1283537-1-1.html

从底向上第一篇--了解DML操作

从底向上第二篇--了解行迁移

从底向上第三篇--了解index的compress

从底向上第四篇--了解行链接

从底向上第五篇--了解表的压缩属性

从底向上第六篇--compress for oltp真正压缩的阈值触发条件

从底向上第七篇--超255列表的存储

从底向上第八篇--伪造基于ASSM表空间的数据块

在上一篇从底向上了解DML操作的帖子里,描述了insert、update、delete操作,在block里是如何进行的。

这篇来介绍行迁移。

上篇的最后,block里剩下3条记录,id分别为C50B(1000000000),C103(2),C104(3)

前两个的text列长度都已经是4000了,如果我们修改最后一个列的长度为4000,那么3*4000肯定大于8192的block大小,这时会发生什么呢?

SQL> update tt set text=lpad('a',4000) where id=3;

已更新 1 行。

提交完成。

SQL> alter system dump datafile 1 block 134578;

系统已更改。

7702290 00000000 00000000 00000000 0202002C  [............,...]

77022A0 A0FE0BC5 2020200F 20202020 20202020  [.....           ]

77022B0 20202020 20202020 20202020 20202020  [                ]

Repeat 248 times

7703240 20202020 00012061 B30D4200 64630000  [    a ...B....cd]

7703250 2C676665 C1020200 0FA0FE03 20202020  [efg,........    ]

7703260 20202020 20202020 20202020 20202020  [                ]

Repeat 248 times

77041F0 20202020 20202020 61202020 1F760604  [           a..v.]

Block header dump:  0x00420db2

Object id on Block? Y

seg/obj: 0xbf1e  csc: 0x00.e1f74  itc: 2  flg: O  typ: 1 - DATA

fsl: 0  fnx: 0x0 ver: 0x01

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x0002.001.000001c1  0x008010ad.011f.3f  --U-    1  fsc 0x0005.000e1f76

0x02   0x0003.01b.000001c1  0x00800eeb.00a6.2d  C---    0  scn 0x0000.000e1ca0

data_block_dump,data header at 0x770225c

===============

tsiz: 0x1fa0

hsiz: 0x18

pbl: 0x0770225c

bdba: 0x00420db2

76543210

flag=--------

ntab=1

nrow=3

frre=-1

fsbo=0x18

fseo=0x40

avsp=0x28

tosp=0x2d

0xe:pti[0]        nrow=3        offs=0

0x12:pri[0]        offs=0x40

0x14:pri[1]        offs=0xff7

0x16:pri[2]        offs=0xfe9

block_row_dump:

tab 0, row 0, @0x40

tl: 4009 fb: --H-FL-- lb: 0x0  cc: 2

col  0: [ 2]  c5 0b

col  1: [4000]

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61

tab 0, row 1, @0xff7

tl: 4009 fb: --H-FL-- lb: 0x0  cc: 2

col  0: [ 2]  c1 03

col  1: [4000]

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61

tab 0, row 2, @0xfe9

tl: 9 fb: --H----- lb: 0x1  cc: 0

nrid:  0x00420db3.0

end_of_block_dump

还记得H是什么意思么?

H        Head of row piece

呵呵,发生行迁移了,这里只是存了这行记录的头信息,那各位又要问了,真正的数据哪去了呢?答案就在nrid:0x00420db3.0,您又问了,这个乱起八糟的东西又是啥捏?那我们就要看一下当前的block bdba了,0x00420db2,0x00420db3=0x00420db2+1,也就是下一个块里。那.0又是什么意思呢?我们先放一下,先看看下一个块的内容。

SQL> conn / as sysdba

已连接。

SQL> alter system dump datafile 1 block 134579;

系统已更改。

4E53180 A0FE04C1 2020200F 20202020 20202020  [.....           ]

4E53190 20202020 20202020 20202020 20202020  [                ]

Repeat 248 times

4E54120 20202020 02013C61 1A02C102 64636261  [    a<......abcd>

4E54130 68676665 6C6B6A69 706F6E6D 74737271  [efghijklmnopqrst]

4E54140 78777675 013C7A79 02C10202 6362611A  [uvwxyz<......abc>

4E54150 67666564 6B6A6968 6F6E6D6C 73727170  [defghijklmnopqrs]

4E54160 77767574 3C7A7978 C1020201 62611A02  [tuvwxyz<......ab>

4E54170 66656463 6A696867 6E6D6C6B 7271706F  [cdefghijklmnopqr]

4E54180 76757473 7A797877 0202013C 611A02C1  [stuvwxyz<......a>

4E54190 65646362 69686766 6D6C6B6A 71706F6E  [bcdefghijklmnopq]

4E541A0 75747372 79787776 02013C7A 1A02C102  [rstuvwxyz<......>

4E541B0 64636261 68676665 6C6B6A69 706F6E6D  [abcdefghijklmnop]

4E541C0 74737271 78777675 002C7A79 02C10202  [qrstuvwxyz,.....]

4E541D0 63626103 0202002C 610302C1 002C6362  [.abc,......abc,.]

4E541E0 02C10202 63626103 0202002C 610302C1  [.....abc,......a]

4E541F0 002C6362 02C10202 63626103 1F760602  [bc,......abc..v.]

Block header dump:  0x00420db3

Object id on Block? Y

seg/obj: 0xbf1e  csc: 0x00.e1f74  itc: 3  flg: O  typ: 1 - DATA

fsl: 0  fnx: 0x0 ver: 0x01

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x000a.002.0000014e  0x00801017.008c.2f  C---    0  scn 0x0000.000e1c59

0x02   0x0002.001.000001c1  0x008010ad.011f.3e  --U-    1  fsc 0x0000.000e1f76

0x03   0x0000.000.00000000  0x00000000.0000.00  C---    0  scn 0x0000.00000000

data_block_dump,data header at 0x4e52274

===============

tsiz: 0x1f88

hsiz: 0x1c

pbl: 0x04e52274

bdba: 0x00420db3

76543210

flag=--------

ntab=1

nrow=5

frre=1

fsbo=0x1c

fseo=0xf02

avsp=0xfbd

tosp=0xfbd

0xe:pti[0]        nrow=5        offs=0

0x12:pri[0]        offs=0xf02

0x14:pri[1]        sfll=2

0x16:pri[2]        sfll=3

0x18:pri[3]        sfll=4

0x1a:pri[4]        sfll=-1

block_row_dump:

tab 0, row 0, @0xf02

tl: 4015 fb: ----FL-- lb: 0x2  cc: 2

hrid: 0x00420db2.2

col  0: [ 2]  c1 04

col  1: [4000]

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61

end_of_block_dump

先看看,这个块的bdba: 0x00420db3,OK,看来是找对地方了。对照看一下这条记录的标志----FL--,没有H标志。再看看,还有一个hrid: 0x00420db2.2,OK,这下搞清楚.代表什么意思了,其实,就是bdba.row#,根据这个,就可以向下或向上链接了。

SQL> alter system dump datafile 1 block 134579;

系统已更改。

SQL> analyze table tt compute statistics;

表已分析。

SQL> select t.chain_cnt

2    from user_tables t

3   where t.table_name='TT';

CHAIN_CNT

----------

1

统计信息也显示这个表有一个行产生了链接。

尝试解决一下:

SQL> alter table tt move tablespace users;

表已更改。

SQL> select t.header_file,t.header_block from dba_segments t

2   where t.segment_name='TT';

HEADER_FILE HEADER_BLOCK

----------- ------------

4        11

SQL> conn / as sysdba

已连接。

SQL> alter system dump datafile 4 block 12;

系统已更改。

SQL> alter system dump datafile 4 block 13;

系统已更改。

SQL> alter system dump datafile 4 block 14;

系统已更改。

Block 12:

4E53250 2C000000 C5020200 0FA0FE0B 20202020  [...,........    ]

4E53260 20202020 20202020 20202020 20202020  [                ]

Repeat 248 times

4E541F0 20202020 20202020 61202020 22CB0602  [           a..."]

Block header dump:  0x0100000c

Object id on Block? Y

seg/obj: 0xbf1f  csc: 0x00.e22ca  itc: 3  flg: E  typ: 1 - DATA

brn: 0  bdba: 0x1000009 ver: 0x01 opc: 0

inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x0008.007.000001c5  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

data_block_dump,data header at 0x4e5227c

===============

tsiz: 0x1f80

hsiz: 0x14

pbl: 0x04e5227c

bdba: 0x0100000c

76543210

flag=--------

ntab=1

nrow=1

frre=-1

fsbo=0x14

fseo=0xfd7

avsp=0xfc3

tosp=0xfc3

0xe:pti[0]        nrow=1        offs=0

0x12:pri[0]        offs=0xfd7

block_row_dump:

tab 0, row 0, @0xfd7

tl: 4009 fb: --H-FL-- lb: 0x0  cc: 2

col  0: [ 2]  c5 0b                                                        -- 1000000000

col  1: [4000]

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61

end_of_block_dump

Block 13:

4E53250 2C000000 C1020200 0FA0FE03 20202020  [...,........    ]

4E53260 20202020 20202020 20202020 20202020  [                ]

Repeat 248 times

4E541F0 20202020 20202020 61202020 22CB0602  [           a..."]

Block header dump:  0x0100000d

Object id on Block? Y

seg/obj: 0xbf1f  csc: 0x00.e22ca  itc: 3  flg: E  typ: 1 - DATA

brn: 0  bdba: 0x1000009 ver: 0x01 opc: 0

inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x0008.007.000001c5  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

data_block_dump,data header at 0x4e5227c

===============

tsiz: 0x1f80

hsiz: 0x14

pbl: 0x04e5227c

bdba: 0x0100000d

76543210

flag=--------

ntab=1

nrow=1

frre=-1

fsbo=0x14

fseo=0xfd7

avsp=0xfc3

tosp=0xfc3

0xe:pti[0]        nrow=1        offs=0

0x12:pri[0]        offs=0xfd7

block_row_dump:

tab 0, row 0, @0xfd7

tl: 4009 fb: --H-FL-- lb: 0x0  cc: 2

col  0: [ 2]  c1 03                                                        -- 2

col  1: [4000]

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61

end_of_block_dump

Block 14:

4E53250 2C000000 C1020200 0FA0FE04 20202020  [...,........    ]

4E53260 20202020 20202020 20202020 20202020  [                ]

Repeat 248 times

4E541F0 20202020 20202020 61202020 22CB0602  [           a..."]

Block header dump:  0x0100000e

Object id on Block? Y

seg/obj: 0xbf1f  csc: 0x00.e22ca  itc: 3  flg: E  typ: 1 - DATA

brn: 0  bdba: 0x1000009 ver: 0x01 opc: 0

inc: 0  exflg: 0

Itl           Xid                  Uba         Flag  Lck        Scn/Fsc

0x01   0x0008.007.000001c5  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

0x03   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

data_block_dump,data header at 0x4e5227c

===============

tsiz: 0x1f80

hsiz: 0x14

pbl: 0x04e5227c

bdba: 0x0100000e

76543210

flag=--------

ntab=1

nrow=1

frre=-1

fsbo=0x14

fseo=0xfd7

avsp=0xfc3

tosp=0xfc3

0xe:pti[0]        nrow=1        offs=0

0x12:pri[0]        offs=0xfd7

block_row_dump:

tab 0, row 0, @0xfd7

tl: 4009 fb: --H-FL-- lb: 0x0  cc: 2

col  0: [ 2]  c1 04                                                -- 3

col  1: [4000]

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20

20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61

end_of_block_dump

move tablespace 后,数据空间重新进行了分配。没有了行迁移的情况。

SQL> analyze table tt compute statistics;

表已分析。

SQL> select t.chain_cnt

2    from user_tables t

3   where t.table_name='TT';

CHAIN_CNT

----------

0

[本帖最后由 sundog315 于 2010-6-25 14:50 编辑]

oracle向上移一行,从底向上第二篇--了解行迁移相关推荐

  1. oracle 存储过程 胡勇,Oracle SQL:经典查询练手第二篇

    本文与大家共同讨论与分享ORACLE SQL的一些常用经典查询,欢迎大家补充,同时你认为有那些经典的也可分享出来.在本文中,对每一个问题,你要是认为有什么更好的解决方法也欢迎你及时提出.交流与分享才能 ...

  2. ORACLE SQL: 经典查询练手第二篇

    本文使用的实例表结构与表的数据如下: scott.emp员工表结构如下: SQL> DESC SCOTT.EMP; Name     Type         Nullable Default  ...

  3. ORACLE SQL:经典查询练手第二篇

    本文使用的实例表结构与表的数据如下: scott.emp员工表结构如下: SQL> DESC SCOTT.EMP; Name     Type         Nullable Default ...

  4. oracle17502,[推荐]ORACLE SQL:经典查询练手第二篇(不懂装懂,永世饭桶!)

    --------1. 找出EMP表中的姓名(ENAME)第三个字母是A 的员工姓名.---------SQL>SELECTENAMEFROMSCOTT.EMPWHEREENAMELIKE'__A ...

  5. IDEA 快捷键 代码上移一行 下移一行 快捷键 try catch 块 快捷键

    文章目录 前言 快捷键 常用 [调试部分.编译] [重构] [查找] 前言 写代码的时候看到大神的一些帅气的操作,于是拷贝整理了一下,主要是为了方便自己查阅. 快捷键 常用 按键 功能 Ctrl+Al ...

  6. 初学Python——文件操作第二篇

    前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...

  7. vim 高级使用技巧第二篇

    上篇我贴上了我使用的vim配置及插件配置.有这些东西仅仅能是一个脚本堆积.无从谈高效的代码阅读开发. 以下我们就来写常常使用的命令,就从配置F系列快捷键開始吧. F+ n 快捷键配置 F1基本上时帮助 ...

  8. [老老实实学WCF] 第二篇 配置WCF

    老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: [csharp] view plaincopyprint? ...

  9. elk 第二篇 , 为elk加入redis, 替换下beats(个人感觉不错2)

    为elk加入redis, 替换下beats 这是elk的第二篇文章 编译安装日志分析平台 elk + filebeat elk支持多种输入输出方法 ,本文章主要描述通过redis做队列中间件 ,缓解e ...

最新文章

  1. [日志]保证让你一天不困的方法
  2. 怎么修改存储路径_修改桌面文件默认存储位置的正确方式及注意事项
  3. css 右上角 翻开动画_css简单动画(transition属性)
  4. IPC\DVS\DVR与NVR之间的区别
  5. linux下使用python3_Linux上python3的安装和使用
  6. 7nfs客户端没权限_Ant design pro v4-服务器菜单和路由权限控制
  7. 通信行业力推零信任标准,蔷薇灵动微隔离首批获证
  8. python中io中的+模式_Python----文件的IO操作
  9. ERP 趣读 【转】
  10. Html辅助方法(分页、下拉框)
  11. 金九银十,23届秋招信息超全汇总表!各大名企优质岗位持续更新中···
  12. python秒杀脚本 拼多多_点击劫持漏洞之理解 python打造一个挖掘点击劫持漏洞的脚本...
  13. 如何将 Laravel 数据表里的数据导出成 Seeder 文件
  14. 当数学题加上了程序员思想
  15. Spring 事件发布机制@EventListener源码深度解析
  16. MockFlow线框图、原型软件
  17. WARNING: One of the plugins you are using supports Java 8 language features. To try the support buil
  18. 算法系列之十八:用天文方法计算二十四节气(下)
  19. faiss(2):理解product quantization算法
  20. 谷歌的云计算是什么样子的?

热门文章

  1. 为什么上传的格式是mp4在网页上无法播放是什么原因呢?
  2. CAD错误以及解决方案
  3. sql求中位数、四分位数
  4. 反编译 APKTool 逆向助手
  5. 夏季工作如何提效 联想M7615DNA了解一下
  6. 响应式pbootcms教程资讯新闻博客类网站模板
  7. Cesium-源码修改-gltf增加纹理贴图改变3dtiles外观
  8. php验证码大全(实例分享),php图片验证码的例子
  9. 免费 SSL 安全证书
  10. 使用原生table合并单元格