oracle数据段详解
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;
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数据段详解的更多相关文章
- Oracle 数据泵详解
一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...
- 转:Oracle 数据泵详解
一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...
- Oracle数据泵详解
一.EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)的作用 1)实现逻辑备份和逻辑恢复. 2 ...
- oracle 数据泵 详解
导出数据 1)按用户导 expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dir logfile=expdp.log ...
- oracle表分区详解
原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...
- Oracle权限管理详解
Oracle权限管理详解 转载--CzmMiao的博客生活 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级. ...
- Oracle表空间详解
Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...
- Oracle建立全文索引详解
Oracle建立全文索引详解1.全文检索和普通检索的区别 不使用Oracle text功能,当然也有很多方法可以在Oracle数据库中搜索文本,比如INSTR函数和LIKE操作: SELECT *FR ...
- [转载]oracle 高水位线详解
一.oracle 高水位线详解 出处: https://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html 一.什么是水线(High Wa ...
随机推荐
- Ubuntu:系统信息查询
造冰箱的大熊猫@cnblog 2018/3/14 1.查询系统信息(uname) uname命令返回与系统相关的信息,如下所示. $ uname -a Linux IBM-T60 4.13.0-36- ...
- JavaScript复制内容到剪贴板
移动端 需要复制内容到剪贴板时, clipborad.js 不支持ios微信版浏览器,可配合使用 execCommand 使其兼容, 完成一键复制淘口令的功能. 注意使用clipborad.js时,i ...
- poj 3050 Hopscotch DFS+暴力搜索+set容器
Hopscotch Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2774 Accepted: 1940 Description ...
- 『ZJOI2019 D2T2』语言
~~ 话说,本题考场想出三只\(log\)的暴力做法,被卡成暴力了.~~ 题目分析 首先考虑枚举每一个点,计算这个点可以和多少点进行交易. 将所有经过该点的路径\(s,t\)拿出,那么这些极远的\(s ...
- apt-get build-dep命令详解
apt-get build-dep命令详解 - 星星之火的Blog - CSDN博客 https://blog.csdn.net/starflame/article/details/7416311 ...
- Spring Boot教程(三十三)使用Redis数据库(1)
Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, So ...
- js判断是否是app,及版本号
判断是否是android,ios,qq,wetchat export const Config = {}; Config.ua = navigator.userAgent.toLowerCase(); ...
- 2018-2019-2 20165215《网络对抗技术》Exp10 Final Windows本地内核提权+Exploit-Exercises Nebula学习与实践
目录 PART ONE :Windows本地内核提权 漏洞概述 漏洞原理 漏洞复现 windbg调试本地内核 查看SSDT表和SSDTShadow表 查看窗口站结构体信息 利用Poc验证漏洞 漏洞利用 ...
- 卸载apache
1.查看httpd相关软件包 rpm -qa|grep httpd 2.卸载命令, “rpm -e 软件或服务名” 如果出现类似“httpd >= 2.2.0 is needed by (ins ...
- Log4j rootLogger根配置以及4种日志级别
Log4j 根配置语法 log4j.rootLogger = [ level ] , appenderName, appenderName, … 把指定级别以上的日志信息输出到指定的一个或者多个位置 ...