转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
oracle block 格式         ★★★★

oracle block 格式

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2178 更新时间:2009/4/22 22:08:00


信息参考:  www.ixora.com.au
特别感谢 overtime 大哥对我的无私的帮助和对我一直鼓励支持我的网友
这些资料是没得到oracle 支持的 所以不能保证信息的正确性 请谨慎使用
科技无限 随便转载

oracle 8.1.7         8k block          windows xp   
create table t(n number);
insert into t values(1);   --- 从 dbms_rowid 中看出table t 的数据在datafile 4 的第3个 block 上
alter system dump datafile 4 block 3;
下面是 dump 的文件的信息
还可以用下面的语句然后再用上面的 dump 语句看内存中 block 的2进制存储格式
但这内存中的2进制格式和datafile中block数据表示的顺序会略有不同可能是内存寻址的缘故吧
ALTER SESSION SET EVENTS ''''10289 trace name context forever, level 1'''';
ALTER SESSION SET EVENTS ''''10289 trace name context off'''';
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     下面的是 udump 目录下面 dump 文件的信息

-----------------------  第一部分

buffer tsn: 7 rdba: 0x01000003 (4/3)
scn: 0x0000.000802a5 seq: 0x01 flg: 0x02 tail: 0x02a50601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data

--- buffer tsn:         数据文件对应的 tablespace 的 number   这只是dump文件中记录的数据而已
---                                               block 中是没有记录 tablespace 的 number 的
--- rdba:    4 bytes    datafile 中 block 的地址  标示的第几个 block
--- scn:     6 bytes    system change number
--- seq:     1 byte     A sequence number incremented for each change to a block at the same SCN
---                        A new SCN is allocated if the sequence number wraps.
---                        同一个SCN影响这个block中的行数大于 254 行就会为这个事务分配一个新的SCN
---                        如下面的操作就可能引起同一个SCN但影响的同一个block 中的行超过254行
---                        "delete from table_name" 
---                        影响的行数(最大254) 是用从 0x01 到 0xfe 表示的
---                        当这个byte 的数据为 0xff 的时候标志这个 block 坏调了---> ora-01578
--- flg:     1 byte     1 = virgin block
---                     2 = last change to the block was for a cleanout operation
---                     4 = checksum value is set
---                     8 = temporary data
---                     这是一个可以组合的值 也就是说有为 6 的时候是 2,4 两种情况的组合
--- tail:    4 bytes    这是记录在 block 的最后面的 4 bytes 的数据
---                         dump文件中只是把他写在了前面而已
--- frmt:    1 byte     oracle 8 以后看见的都是 0x02
--- chkval:  2 bytes    在 init 文件中设置了 db_block_checksum=true 才有值
--- type:    1 byte     这个 block 的类型 这里主要看 0x06 这种 因为这种是用来存用户数据的
---                         其他的类型可以参考http://www.ixora.com.au/notes/cache_block_types.htm

-----------------------  第二部分
Block header dump:  0x01000003
 Object id on Block? Y
 seg/obj: 0x614a  csc: 0x00.802a3  itc: 1  flg: O  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01
     
--- seg/obj: 4 bytes    这里是16进制的 对应 sys.obj$.obj# 数据字典的数据
--- csc:     6 bytes    The SCN at which the last full cleanout was performed on the block
--- itc:     1 byte     下面的Itl事务条的个数 8.1.7的文档上面说可以使用 INITRANS 在建表的时候
---                       限制这个值的大小(max 255超过会报ORA-02207) 但要考虑block 的空间是否够
---                       表在8i中 INITRANS default为1 ,  9.2.0中 INITRANS default为2
---                       Yong Huang 说有些时候发生ORA-00060可以把表的 INITRANS 设置大点
---                       ixora 上说当block的空间不够创建一个ITL的时候一样可能引起ORA-00054
--- flg:     2 bytes    0 indicates that the block is on a freelist. Otherwise the flag is -
---                       9i 的ASSM 的情况下这个值为 E
---                       ixora 上说他占用 2 bytes 但我下面的试验和他的结果有一定的出入
---                       我观察到的情况是 :
---                               Object id on Block? Y
---                               flg: O
---                               ver: 0x01
---                            上面的3项是用同一个 byte 来表示的
--- typ:     1 byte     1 为 table ; 2 为 index.  oracle进行查询的时候是根据 obj$表中的情况来
---                       判断对象的类型的,不是根据这个typ。也就是说如果有一个表但改变表中block
---                       的这个标志位,一样可以查询出数据来,但dump block 时会出错,如下面的ora
---                       ORA-00600: 内部错误代码,自变量: [4555], [0], [], [], [], [], [], []
---                       错误中的 [0] 就是typ对应的数据
--- fsl:     1 byte     Index to the first slot on the ITL freelist.  ITL TX freelist slot
--- fnx:     4 bytes    自由列表中下一块的地址 Null if this block is not on a freelist
---                       有数据例如: fnx: 0x1000029
--- ver:     1 byte     format (version) 这个数据没有看到相关的文档介绍 从ixora上说是占用1byte
---                       但我从下面的2进制文件中看到的有不同 下面有介绍
--- unused:  4 bytes    在这里还有4 bytes 的空闲的空间 但在上面的 dump 文件上是没显示出来的
---                        这个unused 的4 bytes是 ixora 上面的说法
---     9i 的 ASSM 的 " fsl: 0  fnx: 0x0 ver: 0x01 "这一段数据的情况已经改变了

-----------------------  第三部分
 Itl           Xid                  Uba                      Flag  Lck        Scn/Fsc
0x01   xid:  0x0003.045.000000b4    uba: 0x0080170a.00c7.36  --U-    1  fsc 0x0000.000802a5

--- 这是 oracle 用来记录事务信息的部分  这里显示的只有一个ITL条 有多少个ITL条是可以动态增加的
--- 只要 block 中的空间足够  可以定义初始化的 ITL 条的个数 用 INITRANS 这storage 参数
--- 这里有多少个 ITL 可以从上面 "第二部分" 的 "itc:" 看出来
--- 这部分牵扯 roll

[1] [2] [3] [4]  下一页


[系统软件]EXP-00008: ORACLE error 904 encountered的解决方…  [常用软件]PB7 连接 Oracle 的配置方法
[Web开发]oracle Export and Import 简介  [Web开发]ADO访问Oracle结果集的心得
[JAVA开发]JDBC+Hibernate将Blob数据写入Oracle  [JAVA开发]J2EE应用中与Oracle数据库的连接
[JAVA开发]Oracle Application Serve_  [其他]HP-UXrx2600B.11.22Uia64安装oracle9i9.2foria64手…
[其他]在RedhatEnterpriseserver3上安装oracle9iR2的注意…  [其他]PROC++批量导入导出ORACLE数据库表
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台