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. Java当中的IO流-时间api(下)-上

    Java当中的IO流(下)-上 日期和时间 日期类:java.util.Date 系统时间: long time = System.currentTimeMillis(); public class ...

  2. webpack搭建多页面系统(一):对webpack 构建工具的理解

    为什么使用webpack构建工具? 1.开发效率方面: 在一般的开发过程中,分发好任务后,每个人完成自己单独的页面,如果有的人开发完成之后,接手别人的任务,就有可能造成开发时候的冲突. 如果利用模块化 ...

  3. okHttp3 源码分析

    一, 前言 在上一篇博客OkHttp3 使用详解里,我们已经介绍了 OkHttp 发送同步请求和异步请求的基本使用方法. OkHttp 提交网络请求需要经过这样四个步骤: 初始化 OkHttpClie ...

  4. Ubuntu14.04升级cmake版本的方法

    在Ubuntu14.04用以下命令默认安装的cmake版本为2.8.x,有时我们需要更高版本的cmake,所以需要升级. $ sudo apt-get install cmake 可通过以下命令查询c ...

  5. swift 高级模式匹配 if case

    let age = 22 let sex = "girl" if (sex == "girl" && age >= 18 &&am ...

  6. ControlTemplate in WPF —— Slider

    <!--Slider 样式--> <Style x:Key="StyleForRepeatButton" TargetType="{x:Type Rep ...

  7. MongoDB数据节点基础操作

    1.查看集群中各节点的状态: rs0:PRIMARY> rs.status() 2.查看集群中各节点配置情况: rs0:PRIMARY> rs.conf() 3.主节点降级为从节点: rs ...

  8. hibernate之inverse=true相关配置讲解

      首先inverse=”true”是在双向关联里面使用单向关联没有这个配置 inverse – 标记由哪一方来维护关联关系(双向关联中会用到) inverse默认值为false 如果inverse设 ...

  9. CentOS 安装jdk 1.8

    方法一:手动解压JDK的压缩包,然后设置环境变量   1.在/usr/目录下创建java目录  [root@localhost ~]# mkdir/usr/java [root@localhost ~ ...

  10. app测试自动化操作方法之三

    首先导包: from appium.webdriver.common.touch_action import TouchAction #(导包指针定位滑动手势密码那个) #设置手势密码(前提是在设备上 ...