网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle备份与恢复案例二.
.关于Oracle 8.1.7安装时出现故障.
.Oracle 10月份发表的一系列漏洞.
.Oracle数据库中索引的维护.
.ORACLE坏块(ORA-01578)处理方法.
.AIX 5L上安装RAC的遭遇.
.转贴 oracle的调优.
.教你JBuilder2005+JBOSS+Oracle9.
.PLSQL单行函数和组函数详解.
.如何用简易方法查找Oracle版本信.
.Oracle数据库备份与恢复的三种方.
.linux下的应用开发起步--简化蚂蚁.
.用Oracle解析函数快速检查序列间.
.Use orabm To test system CPU.
.ORACLE 学习笔记一之数据库的导入.
.一些常用的计划脚本(1).
.10g新特性expdp与传统exp的速度比.
.删除一个Oracle用户的对象.
.standby利用并行恢复提高归档恢复.
.一些 schema 的常用脚本归类介绍.

关于block中行数据的存储与空间重组三

发表日期:2008-2-9


SQL>  update tn set b = lpad('sd',999);   10 rows updated.   SQL> commit;   Commit complete.   SQL>  alter system dump datafile 3 block 1955;   System altered.   SQL>   update tn set b ='QQqqqqq';   10 rows updated.   SQL> commit;   Commit complete.   SQL>  alter system dump datafile 3 block 1955;   System altered.   首先更新到让记录发生了行迁移,然后再更新回来,因为这时数据太大,就不把发生迁移后的数据全部贴出来,给个再更新回来的结果   Block header dump:  0x00c007a3   Object id on Block? Y   seg/obj: 0x66b7  csc: 0x00.1891ba5  itc: 1  flg: O  typ: 1 - DATA       fsl: 1  fnx: 0x0 ver: 0x01     Itl           Xid                  Uba         Flag  Lck        Scn/Fsc 0x01   xid:  0x0004.047.000000e7    uba: 0x00800618.00df.08  --U-   11  fsc 0x1b2e.01891ba7   data_block_dump =============== tsiz: 0x1fb8 hsiz: 0x28 pbl: 0x0ba76c44 bdba: 0x00c007a3 flag=----------- ntab=1 nrow=11 frre=7 fsbo=0x28 fseo=0x2f6 avsp=0x3d0 tosp=0x1efe 0xe:pti[0]  nrow=11  offs=0 0x12:pri[0]  offs=0x35c -------位置都发生了变化 0x14:pri[1]  offs=0x34b 0x16:pri[2]  offs=0x33a 0x18:pri[3]  offs=0x329 0x1a:pri[4]  offs=0x318 0x1c:pri[5]  offs=0x307 0x1e:pri[6]  offs=0x2f6 0x20:pri[7]  sfll=-1 0x22:pri[8]  offs=0x7f0 0x24:pri[9]  offs=0x7da 0x26:pri[10]  offs=0x760 block_row_dump: tab 0, row 0, @0x35c tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 1, @0x34b tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 03 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 2, @0x33a tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 04 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 3, @0x329 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 05 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 4, @0x318 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 06 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 5, @0x307 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 07 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 6, @0x2f6 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 14 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 8, @0x7f0   -------------- 从row  8  ---  row 10  的记录已经迁移到新的block中,这里保留的是新块的物理位置 tl: 9 fb: --H----- lb: 0x1 cc: 0 nrid:  0x00c007a4.0   ------------ 迁移到了 block编号为 0x00c007a4 的块中的 row 0 (本块为 0x00c007a3) tab 0, row 9, @0x7da tl: 9 fb: --H----- lb: 0x1 cc: 0 nrid:  0x00c007a4.1  迁移到了 block编号为 0x00c007a4 的块中的 row 1  (本块为 0x00c007a3) tab 0, row 10, @0x760 tl: 9 fb: --H----- lb: 0x1 cc: 0 nrid:  0x00c007a4.2   迁移到了 block编号为 0x00c007a4 的块中的 row 2 (本块为 0x00c007a3) end_of_block_dump End dump data blocks tsn: 2 file#: 3 minblk 1955 maxblk 1955   SQL> insert into tn values(1,1,1);   1 row created.   SQL> commit;   Commit complete.   SQL>  alter system dump datafile 3 block 1955;   System altered.   再插入记录,我们看看位置,我们发现该块并没有被插入记录,记录是插入到了 另外一个块(虽然该块现在空间使用率并不高)   这是因为在update的时候先脱离了freelist然后又回到freelist了,排在了 block 1956 之后   Block header dump:  0x00c007a3   Object id on Block? Y   seg/obj: 0x66b7  csc: 0x00.1891ba5  itc: 1  flg: O  typ: 1 - DATA       fsl: 1  fnx: 0x0 ver: 0x01     Itl           Xid                  Uba         Flag  Lck        Scn/Fsc 0x01   xid:  0x0004.047.000000e7    uba: 0x00800618.00df.08  --U-   11  fsc 0x1b2e.01891ba7   data_block_dump =============== tsiz: 0x1fb8 hsiz: 0x28 pbl: 0x0ba76c44 bdba: 0x00c007a3 flag=----------- ntab=1 nrow=11 frre=7 fsbo=0x28 fseo=0x2f6 avsp=0x3d0 tosp=0x1efe 0xe:pti[0]  nrow=11  offs=0 0x12:pri[0]  offs=0x35c 0x14:pri[1]  offs=0x34b 0x16:pri[2]  offs=0x33a 0x18:pri[3]  offs=0x329 0x1a:pri[4]  offs=0x318 0x1c:pri[5]  offs=0x307 0x1e:pri[6]  offs=0x2f6 0x20:pri[7]  sfll=-1 0x22:pri[8]  offs=0x7f0 0x24:pri[9]  offs=0x7da 0x26:pri[10]  offs=0x760 block_row_dump: tab 0, row 0, @0x35c tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 1, @0x34b tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 03 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 2, @0x33a tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 04 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 3, @0x329 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 05 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 4, @0x318 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 06 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 5, @0x307 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 07 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 6, @0x2f6 tl: 17 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 14 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 8, @0x7f0 tl: 9 fb: --H----- lb: 0x1 cc: 0 nrid:  0x00c007a4.0 tab 0, row 9, @0x7da tl: 9 fb: --H----- lb: 0x1 cc: 0 nrid:  0x00c007a4.1 tab 0, row 10, @0x760 tl: 9 fb: --H----- lb: 0x1 cc: 0 nrid:  0x00c007a4.2 end_of_block_dump End dump data blocks tsn: 2 file#: 3 minblk 1955 maxblk 1955   SQL> insert into tn select 1,1,1 from all_objects where rownum < 1001;   1000 rows created.   SQL> commit;   Commit complete.   SQL>  alter system dump datafile 3 block 1955;   System altered.   SQL>   再插入1000条记录,我们发现其中600条插到了 block 1956中,而本块只插入了400条,这是因为freelist中的顺序问题   并且我们发现,本块中原来存在的记录已经完全重新组织过,物理位置都因为insert而发生了变化   也就是说Oracle 的 block中的记录物理位置是可能重组的,但不变的是 行号,这个行号和物理位置记录在  前部,供通过   rowid 查询的时候快速定位   Block header dump:  0x00c007a3   Object id on Block? Y   seg/obj: 0x66b7  csc: 0x00.1891bab  itc: 1  flg: O  typ: 1 - DATA       fsl: 0  fnx: 0x0 ver: 0x01     Itl           Xid                  Uba         Flag  Lck        Scn/Fsc 0x01   xid:  0x0006.01e.000000f2    uba: 0x00801660.00da.14  --U-  400  fsc 0x0000.01891bad   data_block_dump =============== tsiz: 0x1fb8 hsiz: 0x346 pbl: 0x0ba76c44 bdba: 0x00c007a3 flag=----------- ntab=1 nrow=410 frre=-1 fsbo=0x346 fseo=0xf86 avsp=0xc40 tosp=0xc40 0xe:pti[0]  nrow=410  offs=0 0x12:pri[0]  offs=0x1fa7   先前的7条记录物理位置已经发生变化但是行号没有改变 0x14:pri[1]  offs=0x1f96   先前的7条记录物理位置已经发生变化但是行号没有改变 0x16:pri[2]  offs=0x1f85   先前的7条记录物理位置已经发生变化但是行号没有改变 0x18:pri[3]  offs=0x1f74   先前的7条记录物理位置已经发生变化但是行号没有改变 0x1a:pri[4]  offs=0x1f63   先前的7条记录物理位置已经发生变化但是行号没有改变 0x1c:pri[5]  offs=0x1f52   先前的7条记录物理位置已经发生变化但是行号没有改变 0x1e:pri[6]  offs=0x1f41   先前的7条记录物理位置已经发生变化但是行号没有改变 0x20:pri[7]  offs=0x18b4   该行号已经被新的记录插入 0x22:pri[8]  offs=0x1f38   该行迁移发生的记录没有发生变化,这是因为这样不用更新索引 0x24:pri[9]  offs=0x1f2f   该行迁移发生的记录没有发生变化,这是因为这样不用更新索引 0x26:pri[10]  offs=0x1f26   该行迁移发生的记录没有发生变化,这是因为这样不用更新索引 0x28:pri[11]  offs=0x18be   新插入的记录 0x2a:pri[12]  offs=0x18c8   新插入的记录 0x2c:pri[13]  offs=0x18d2   新插入的记录 0x2e:pri[14]  offs=0x18dc   新插入的记录 0x30:pri[15]  offs=0x18e6   新插入的记录 0x32:pri[16]  offs=0x18f0   新插入的记录 0x34:pri[17]  offs=0x18fa   新插入的记录 0x36:pri[18]  offs=0x1904   新插入的记录 ……………………………………………………   省略掉一些 block_row_dump: tab 0, row 0, @0x1fa7 tl: 17 fb: --H-FL-- lb: 0x0 cc: 3 col  0: [ 2]  c1 02 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 1, @0x1f96 tl: 17 fb: --H-FL-- lb: 0x0 cc: 3 col  0: [ 2]  c1 03 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 2, @0x1f85 tl: 17 fb: --H-FL-- lb: 0x0 cc: 3 col  0: [ 2]  c1 04 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 3, @0x1f74 tl: 17 fb: --H-FL-- lb: 0x0 cc: 3 col  0: [ 2]  c1 05 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 4, @0x1f63 tl: 17 fb: --H-FL-- lb: 0x0 cc: 3 col  0: [ 2]  c1 06 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 5, @0x1f52 tl: 17 fb: --H-FL-- lb: 0x0 cc: 3 col  0: [ 2]  c1 07 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 6, @0x1f41 tl: 17 fb: --H-FL-- lb: 0x0 cc: 3 col  0: [ 2]  c1 14 col  1: [ 7]  71 71 71 71 71 71 71 col  2: [ 2]  70 70 tab 0, row 7, @0x18b4 tl: 10 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 1]  31 col  2: [ 1]  31 tab 0, row 8, @0x1f38 tl: 9 fb: --H----- lb: 0x0 cc: 0 nrid:  0x00c007a4.0 tab 0, row 9, @0x1f2f tl: 9 fb: --H----- lb: 0x0 cc: 0 nrid:  0x00c007a4.1 tab 0, row 10, @0x1f26 tl: 9 fb: --H----- lb: 0x0 cc: 0 nrid:  0x00c007a4.2 tab 0, row 11, @0x18be tl: 10 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 1]  31 col  2: [ 1]  31 tab 0, row 12, @0x18c8 tl: 10 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 1]  31 col  2: [ 1]  31 tab 0, row 13, @0x18d2 tl: 10 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 1]  31 col  2: [ 1]  31 tab 0, row 14, @0x18dc tl: 10 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 1]  31 col  2: [ 1]  31 tab 0, row 15, @0x18e6 tl: 10 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 1]  31 col  2: [ 1]  31 tab 0, row 16, @0x18f0 tl: 10 fb: --H-FL-- lb: 0x1 cc: 3 col  0: [ 2]  c1 02 col  1: [ 1]  31   省略掉后面重复的数据   结论   1: 当block中开始插入数据的时候,正常插入   2:当删除记录后的空间,假如新插入的数据能容纳进去,则重用   3: 当更新的时候,假如 row 长度没有增加,则位置不变,假如长度增加,则被迁移到整个块的最前记录之前(靠近 block header 一侧)   4:当发生行迁移的时候,在原物理位置保留 迁移后的 block位置和 row number   5:当block重新返回freelist 再插入记录的时候,可能发生block数据的重组(row number不变但是物理位置发生变化),到底什么时候重组,有待进一步考证

上一篇:OC4J 10g 10.1.3 数据源中的连接高速缓存 人气:1323
下一篇:Oracle9i初始化参数中文说明 人气:835
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐