ITPub博客

首页 > 数据库 > Oracle > Oracle数据块的组成

Oracle数据块的组成

原创 Oracle 作者:Samcle_赵捷轩 时间:2013-12-13 16:27:30 0 删除 编辑

Oracle数据块的组成

 

1. 数据块的基本结构

块中存放表的数据和索引的数据,无论存放哪种类型的数据,块的格式都是相同的,块由块头(header/Common and Variable),表目录(Table Directory),行目录(Row Directory),空余空间(Free Space)和行数据(Row Data)五部分组成,如下图所示

 

2.各组成部分的含义

块头(header/Common and Variable):存放块的基本信息,如:块的物理地址,块所属的段的类型(是数据段还是索引段)。

表目录(Table Directory):存放表的信息,即:如果一些表的数据被存放在这个块中,那么,这些表的相关信息将被存放在“表目录”中。

行目录(Row Directory):如果块中有行数据存在,那么这些行的信息将被记录在行目录中。这些信息包括行的地址等。

行数据(Row Data):是真正存放表数据和索引数据的地方。这部分空间是已被数据行占用的空间。

空余空间(Free Space):空余空间是一个块中未使用的区域,这片区域用于新行的插入和已经存在的行的更新。


3.行连接和行迁移

行链接(Row Chaining):如果我们往数据库中插入一行数据,这行数据很大,以至于一个数据块存不下一整行,Oracle就会把一行数据分作几段存在几个数据块中,这个过程叫行链接。 
如果一行数据是普通行,这行数据能够存放在一个数据块中;如果一行数据是链接行,这行数据存放在多个数据块中。


行迁移(Row Migrating):
数据块中存在一条记录,用户执行UPDATE更新这条记录,这个UPDATE操作使这条记录变长,这时候,Oracle在这个数据块中进行查找,但是找不到能够容纳下这条记录的空间,无奈之下,Oracle只能把整行数据移到一个新的数据块。原来的数据块中保留一个“指针”,这个“指针”指向新的数据块。被移动的这条记录的ROWID保持不变。 

 

无论是行链接还是行迁移,都会影响数据库的性能。Oracle在读取这样的记录的时候,Oracle会扫描多个数据块,执行更多的I/O!

 

4. dump数据块

创建表空间:

 


创建表:

 

添加数据:

提交数据:

  

获得表数据块所在位置:

 

 查找表中的行所在数据块:

 


dump数据块:

 
dump文件路径:

 

dump文件内容:

 

 

 

 

 

 


 


 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29379127/viewspace-1063245/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: oracle数据库SCN
请登录后发表评论 登录
全部评论

注册时间:2013-12-11

  • 博文量
    4
  • 访问量
    25334