Oralce学习之逻辑结构
逻辑结构就是Database中的数据文件的组织结构。
表空间(TABLESPACE)、段(SEGMENT)、区(EXTENT)、块(BLOCK)
TABLESAPCE:系统表空间,回滚表空间,临时表空间(SMON进程要负责的部分),用户表空间。
SEGMENT:和用户建立的table相对应。
EXTENT:他的存在是对BLOCK与SEGMENT之间大小差异的一种缓冲,优化。
BLOCK:数据库中存储的最小的结构,有整数倍的OS的数据块组成。(OS的块为0.5KB,Oracle的一般为8KB)
OK,微观看过了,来宏观看一下数据库的组成:
1、数据块头包含数据块的概要信息,如块地址,数据块所属的段和类型
2、表目录保存插入的数据所属的表的信息
3、行目录存放插入的行的地址
4、可变空间就是freespace,在数据进行插入,更新时可能会需要额外的空间,就从这边来。
5、行数据区呢,就是存储具体的行或者索引的信息,占了数据块的绝大部分空间。
1,2,3部分,也就是数据块头、表目录区、行目录区没有存储具体的数据,而是存着用于管理的信息,称为管理开销(overhead)。一般为84--107B。
基本的块就是这样,当create一个table时,系统会建立一个segment(前面说过table其实就是对应segment),并且会分配一定的初始空间也就是一些块,当插入数据,初始空间(initial extent)不够用的时候,会自动再分配给新的incremental extent(扩展段),这也验证了段(extent)是一个逻辑上的过渡,缓冲segment和block的鸿沟。
前面是说table的内部,那外部呢,会有一个归属,就是tablespace。
(当然这些表空间,段,区,块的大小以及管理方式都是可以设置的,在后面的例子中说明)此为用户表空间。
那系统表空间就是为系统服务的区域。临时表空间呢,顾名思义,把数据表空间的数据那部分出来操作之用。回滚表空间,当然是用来缓存即将使用的数据,如果又不需要了就rollback掉。
举个小栗子:
create tablespace tbs_test1
datafile 'D:code\oracle\oradata\demodb\DEMO.dbf' size 10M
autoextend on next 20M maxsize 40M
extent management local
uniform size 10M
segment space management auto
Datafile :存放数据的文件 size:初始大小
Autoextend:自动扩展以及最大尺寸
Extent management:区的管理方式
Uniform:扩展区的大小
Segment:段的管理