Tablespace(表空间):表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都放在指定的表空间中,但主要存放的对象是表,所以称为表空间。

默认的系统表空间:system、sysaux、temp、undo、user

segments(段)

段是表空间的重要组织机构,段是指占用文件空间的统称,或数据对象使用的空间集合;段可以有表段、索引段、回滚段、临时段和高速缓存段。

段的类型:

聚簇  cluster

表  table

表分区  table partition

索引  index

索引分区  index partition

lob分区  lob partition(lob子分区 lobsub partition、lob索引 lob index、lob 段 lob segment)

嵌套表  nested table

回滚段  roll back

Table :

对于一个只有几百条几千条数据,一个学校的学生成绩表,那么一张表就是一个 segments 。

Table partition : 如果一张表非常大,里面存储了几千万条、上亿条记录,那么对这一张表进行操作,效率就非常低了。分区表是将大表的数据分成称为分区的许多小的子集。假如一张表是存放几亿条数据,那么这么多条记录是有规律的,可以基于某一个字段将其分开。那么可以根据某一字段类型分区,每个分区实际上就是一个独立的表,但在逻辑上这些分区又同属于一张表。

如果一张表是普通的表,只占一个 segments;如果一张表是 partition 的表,可能占用多个 segments。

Cluster :

Oracle 中普通的表称为堆表(heap table),堆表中的数据是无序存放的,往往在使用一段时间后,数据就变得非常无序。比如:索引中相同的 key 对应的数据存放在不同的 block 中,这时,如果要通过索引查询某个 key 的数据,就需要访问很多不同的 block,代价非常高。 我们发现很多表与表,他们的数据有相关性,因为我们访问一个表里的数据,往往要访问另一些表里的数据。我们可以把这些数据物理上存储在一块。

Index

索引是与表和聚集相关的一种选择结构,就当于我们一本书的目录,可以快快速的定位某章某节的页数。索引可以建立在一个表的一列或多列上,那就可以大大提高对表的查询。那么一个 index 也可能会占一个多个 segments 。

Index-organized table :

索引组织表(IOT),就是存储在一个索引结果中的表。存储在堆中的表是无组织的(也就是说,只要有可用的空间,数据可放在任何地方)。对你的应用来说,IOT 表和一个“常规”表并无差别。使用堆组织表时,我们必须为表和表主键上的索引分别留出空间。而 IOT 不存在主键的空间开销,因为索引就是数据,数据就是索引。

IOT 带来的好处不仅节约磁盘空间的占用,更重要的是大幅度降低了 I/O,减少了访问缓冲区 缓存(尽管从缓冲区缓存获取数据比硬盘要快得多,但缓冲区缓存并不是免费,而且也绝不是廉价的。每个缓冲区缓存获取都需要缓冲区缓存的多个闩(shuān),而闩是串行化设备,会限制应用的扩展能力)

Index partition

对于 table 有 partition ,那么对一个大的 index 有也 partition 。

分区所引可以分为全局分区索引与本地分区索引,其中本地索引又可以分为本地前缀索引和本地非前缀索引。 本地索引的分区和其对应的表分区数量相等,因此每个表分区都对应着相应的索引分区。使用本 地索引,不需要指定分区范围因为索引对于表而言是本地的,当本地索引创建时,Oracle 会自动 为表中的每个分区创建独立的索引分区。全局索引以整个表的数据为对象建立索引,索引分区中的索引条目既可能是基于相同的键值但是 来自不同的分区,也可能是多个不同键值的组合。全局索引既允许索引分区的键值和表分区键值 相同,也可以不相同。全局索引和表之间没有直接的联系,这一点和本地索引不同。

Undo segment 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使 用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可 以存放多个事务的回滚信息。

Temporary segment

当 Oracle 处理一个查询时,经常需要为SQL语句的解析与执行的中间结果(intermediate stage) 准备临时空间。Oracle 会自动地分配被称为临时段(temporary segment)的磁盘空间。例如, Oracle 在进行排序操作时就需要使用临时段。当排序操作可以在内存中执行,或 Oracle 设法利用 索引时,就不必创建临时段。

LOB segment

Large object(LOB)大大的对象,我们知道数据库不但可以存数据,有些可以存储视频声音图 片等文件,对于这种类型的文件一个大小几 MB,几十 MB 很正常。当然,有些数据库是不支持 LOB 数据块的,可以在表里存一个指针,来指向某个文件下的视频声音文件。

Nested table

嵌套表,表中表,和 LOB 思想很类似,就是在表里存一个指针,指针指向另外一张表。

段的创建:

在表、索引等创建的过程中(在 11gR2 中,段的创建要等到第一条数据被插入时),事实上即 在创建段,从 user_segment 可以查看已创建的段

 
创建一个基本表,查看所分配的段
SQL> create table test(id number,name varchar2(20));

然后查询

SQL> select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments;

你会发现没有数据,插入一条数据试一下

SQL> insert into test(id,name) values(1,'test');

然后在查询

SQL> select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments;

这个时候,你会查到数据了。

在 11gR2 中,只有插入数据后才会分配段空间,或者在 11g 中只要插入一条数据或者在创建表时指定 segment creation immediate 即可得到相同效果。

而 10g 中,创建表就会分配一个段空间。

创建一个带主键的表,查看所分配的段

SQL> create table test(id number primary key) segment creation immediate;

然后查询段

SQL> select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments;
 
创建一个有 lob 字段的表,查看所分配的段

SQL> create table test3(id number primary key, describe clob, comment blob) segment creation immediate;

然后查询段

SQL> select segment_name,segment_type,tablespace_name,bytes,blocks,extents from user_segments;
 

由此可见,test1 只创建一个表的段,test2 创建了一个表段以及一个索引段,test3 创建了一个表段、一 个索引段、2 个 lobindex,2 个 lobsegment。

结论:创建一个表时,表的信息及数据可能会分散到多个段之中,每个段保存着一部分信息,而段由区组成,区由 oracle 块组成,oracle 块由操作系统组成。

创建一个新段时,默认由 1 个区、8 个块组成,共计 8K*8 空间,默认情况下 oracle 块大小为 8k.

oracle数据段详解的更多相关文章

  1. Oracle 数据泵详解

    一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...

  2. 转:Oracle 数据泵详解

    一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...

  3. Oracle数据泵详解

    一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...

  4. oracle 数据泵 详解

    导出数据 1)按用户导 expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dir logfile=expdp.log ...

  5. oracle表分区详解

    原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...

  6. Oracle权限管理详解

    Oracle权限管理详解 转载--CzmMiao的博客生活 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级. ...

  7. Oracle表空间详解

    Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...

  8. Oracle建立全文索引详解

    Oracle建立全文索引详解1.全文检索和普通检索的区别 不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作: SELECT *FR ...

  9. [转载]oracle 高水位线详解

    一.oracle 高水位线详解 出处: https://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html 一.什么是水线(High Wa ...

随机推荐

  1. scanf的格式化字符串的匹配规则

    1.对于空白字符:空格.tab.回车等,scanf将忽略输入字符串的空白字符,直到下一个非空白字符,(并回放该非空白字符), 若该非空白字符与格式化字符串匹配,则读入 若该非空白字符与格式化字符串不匹 ...

  2. mac 强行关掉php

    sudo pkill -INT -o php-fpm//重启php sudo php-fpm //mac brew安装的php可以使用这个开启brew services start homebrew/ ...

  3. su: Authentication failure 的解决方法

    su命令不能切换root,提示su: Authentication failure 原因是 没有设置过 root密码 sudo passwd root 会提示输入密码 重新输入密码 下次再su的时候只 ...

  4. Linux shell - `dirname $0` 定位到运行脚本的相对位置

    例1. 在/home/admin/test/下新建test.sh内容如下: cd `` echo `pwd` 然后返回到/home/admin/执行 sh test/test.sh 运行结果: /ho ...

  5. SRS之接收推流线程:recv

    SrsPublishRecvThread.SrsRecvThread.SrsReusableThread2.SrsThread 之间的关系图 1. recv 线程函数:SrsThread::threa ...

  6. LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)

    题目描述 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 ...

  7. mysql字符串函数:FIND_IN_SET()使用方法详解

    语法: FIND_IN_SET(str,strlist) 第一个参数str是要查找的字符串. 第二个参数strlist是要搜索的逗号分隔的字符串列表. 假如字符串str 在由N 子链组成的字符串列表s ...

  8. android 实例-弱引用示例 Handler正确使用方法

    实际问题 android 习惯性问题:在使用handler的时候喜欢使用内部类形式. private final Handler handler = new Handler(){ @Override ...

  9. CentOS6.5 64位下装Docker

    试装,仅仅是做个记录. [root@localhost ~]# sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' > ; > [do ...

  10. 微信小程序之生成二维码

    最近项目中涉及到小程序的生成二维码,很是头疼,经过多次摸索,整理出了自己的一些思想方法,如有不足,欢迎指正. 首先完全按照小程序的结构依次填坑. pages--index.wxml <view ...