`
trophy
  • 浏览: 178451 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Oracle : block,extent,segment

 
阅读更多

 

    先看Data blocks(也叫逻辑块,oracle块,页)吧,oracle存储数据都是在这些数据块中,一个数据块是磁盘上数据库物理空间一系列物理字节的组成。
    比Data blocks更高一层的逻辑数据块空间是extent,一个extent是由一系列临近的存储信息的数据块组成。
    最高一层的逻辑结构是segment,一个segment是同一表空间extents的一个集合。每一个segment有不同的数据结构。如每一个表的数据就存储在自己的data segment,每一个索引存储在自己的索引段,如果表或者索引是
是分区存储的,那么每一个分区都存储在他们各自的segment中。一个segment和他所有的extent都是在一个表空间中,并且一个segment可以跨越几个数据文件。。

    对于数据库来说,data block是oracle数据库中分配和私用的最小存储单元。但这仅仅对数据库来说,在物理层次,操作系统层次,所有的数据仍旧是按字节存储的。每一个操作系统都有自己的块尺寸(block size),在oracle数据库中,数据块的大小都有参数db_block_size在创建数据库的时候来确定,他的数值应该是操作系统块尺寸的整数倍。
    数据块都有这么几部分组成,块头部分,表目录,行目录,空闲空间,数据这几部分组成。块头主要包含两部分信息:块头地址和segment的类型,是数据表还是索引;表目录主要包含块中有多少行数据。行目录主要包含每一行的物理地址。数据就很明显了,就是这个块包含的数据。这里边最奇妙的就是这个空闲空间,它主要目的就是为varchar这个数据类型准备的,有两个阈值参数pctfree,pctused来控制此数据快移向那一个链表,这两个参数的设定主要目的是为了避免行连接与行迁移,具体的又够一篇文章了,以后再写,^_^。
    在来说extent这个由一系列连续的data blocks组成。每当在数据库中创建一个表,那么分配给表的data segment分配一个包含若干数据库的初始的extent,虽然还没有插进去数据,但初始的extent已经做好了插入数据的准备。如果初始的extent中的数据块已经满了,或者没有空间插入数据,那么他将会增量扩展。当然这只是对于串行执行的情况,对于并发就不合适了。一些存储参数控制着oracle如何为每个段分配可用空间。当你使用create table创建一个表的时候,存储参数会将决定分配多少的可用空间或者限制此表最多可包含多少个extents,如果在创建表的时候没有定义这些参数,那么将采用表空间定义的默认的存储参数。对于插入和删除都很频繁的表,DBA可以通过这个语句来收回无用的extent ,aler table table_name deallocate unused;


    下面来说segment,每一个segment都是一个表空间下有一系列extent组成的逻辑存储结构。如:当数据库用户创建一个表,那么oracle将分配一个或多个extent来组成表的数据段,创建一个索引,oracle也会纷纷extent给索引数据。一般可以分为data segment,index segment,temporary segment。
    当你创建一个非分区并且非聚焦表的时候,或者一个分区表的一个分区,多个表合用的一个聚簇,都将是一个oracle将处理数据的单个data segment。
    而一个index segment ,对于非分区索引,就是create index创建的索引就会分配一个segment来处理数据;分区索引则对每一个分区分配一个segment来处理数据。
    当一个进程查询的时候,oracle常常需要一个临时的工作区存放sql的解析和执行的中间状态,oracle自动分配的磁盘空间temporary segment。特别当内存的排序区不足时,oracle将会分配一个temporary segment。有时候,下面一些语句有时候需要用到temporary segment:
    create index  ....
    select    .... order by ;
    select distinct ....
    select ...... group by 
    select ...... union 
    select ...... intersect
    select ...... minus
    还有就是对一个子查询来说也会用到temporary segment。如果一个查询包含distinct 子句,一个order by ,一个group by,那么就需要两个temporary segment。当创建一个临时表或索引,oracle也会分配一些temporary segment。
    对于temporary segment,oracle只是在一个用户的会话(session)中分配,但sql语句执行结束或者会话断开,将释放所有的temporary segment。分配这些temporary segment的磁盘空间都是在临时表空间,如果没有定义临时表空间,那么默认的临时表空间将是system表空间。对于DBA来说,由于分配和释放这些temporary segment将非常频繁,所以至少要定义一个temporary segment,这样可以避免system表空间的碎片。对于临时表来说,如果多个会话公用一个临时表,那么知道所有的会话全部结束,那才会释放这个临时表分配的temporary segment。

 

 

        区段,当相邻的几个块组合在一起时,就成为一个区段(extent).
段为一组区段构成,可以是不连续的。
表空间,oracle表空间是包含物理数据文件的逻辑实体。表空间存储数据库所有可用数据,并且表空间中的数据都被物理存放在一个或多个文件里。数据文件是oracle格式的操作系统文件。
 
 
感谢作者 天风海雨
 
 

 

 

分享到:
评论

相关推荐

    深入浅出Oracle:DBA入门、进阶与诊断案例

    - **逻辑存储结构**:主要包括表空间(Tablespace)、段(Segment)、区(Extent)和块(Block)。 - **物理存储结构**:由数据文件(Datafile)、重做日志文件(Redolog file)、控制文件(Control file)等组成。 ##### 1.3 ...

    深入浅出Oracle:DBA入门、进阶与诊断案例.pdf

    入门阶段需要学习如何安装Oracle数据库,创建数据库实例,理解各种存储结构,如数据块(data block)、段(segment)和区(extent)。 2. 数据库操作语言:掌握SQL语言的基本语法,包括数据定义语言(DDL)、数据操纵语言...

    oracle学习笔记

    Oracle中主要有以下几种类型的Segment: - **Data Segment**:用于存储表的数据。 - **Index Segment**:用于存储索引的数据。 - **Temporary Segment**:临时段,用于存储临时表的数据或SQL执行过程中产生的临时...

    Oracle数据库DBA面试题50道及答案.pdf

    4. **datablock、extent和segment的区别**: - **datablock**:数据库最小的逻辑存储单元。 - **extent**:由连续的datablock组成,是分配给数据库对象的存储空间。 - **segment**:对象的所有extents的集合。 5...

    Oracle与sql简单优化与锁机制浅析.pptx

    - **Extent**: Extent是Segment的扩展单位,当表或索引需要更多空间时,以Extent为单位进行扩展。每个Extent包含一定数量的Block。 - **Block**: Block是Oracle存储的最小单位,存储数据记录,并包含元数据,如块...

    ORACLE相关语法与命令.docx

    4. 数据块(Data Block):数据库中最小的数据组织单位与管理单位,ORACLE 数据库中的数据存储于数据块中,取值范围 2K-64K 之间。 内存结构 1. 系统全局区(SGA):实例启动时分配该内存区,是 ORACLE 实例的一个...

    oracle数据库知识.pptx

    Oracle数据库的存储结构主要包括Block、Extent、Segment、Tablespace和Database等。Block是最小的I/O单位, extent是一组连续的数据块,Segment是有共同结构的一个或几个区域,Tablespace是一组物理数据的逻辑组合...

    oracle面试题集锦.pdf

    4. data block、extent 和 segment 的区别: data block 是数据库中最小的逻辑存储单元。extent 是连续的 data block 组成的存储单元。segment 是数据库对象拥有的所有 extents 的集合。 5. 检查表结构的方法: ...

    ORACLE数据库面试题解答-DBA数据库管理员JAVA程序员架构师必看.pdf,这是一份不错的文件

    4. data block、extent 和 segment 的区别:data block 是数据库中最小的逻辑存储单元,extent 是连续的 data block,segment 是数据库对象拥有的所有 extents。 知识点:data block、extent、segment、逻辑存储...

    Oracle数据库操作常见错误及解决方案

    3. **调整存储参数**: 如果回滚段竞争严重,可以考虑增加rollback segment的大小,或调整`INITIAL_EXTENT`, `NEXT_EXTENT`, `MIN_EXTENTS`, `PCT_INCREASE`等参数。 4. **评估主机资源**: 确保主机上有足够的裸盘...

    ORACLE数据库学习总结资料.pdf

    * 盘区(segment) * 段(tablespace) * 表空间(datafile) 二、ORACLE 简单查询 SQL * Plus 是 Oracle 数据库的交互式查询工具,用于执行 SQL 命令。常用的 SQL 命令包括: * show user :查看当前连接的用户 ...

    Oracle 20 道面试题及答案.docx

    * Data block、extent和segment的区别:data block是数据库中最小的逻辑存储单元;extent是多个连续的data block组成的物理存储单元;segment是一个数据库对象拥有的所有extents。 * 解释:data block是数据库中最小...

    Oracle 表空间 收缩

    - **区**(Extent):数据库分配给段的最小单位,由一系列连续的数据块组成。 - **数据块**(Data Block):数据库中最小的I/O单元,通常大小为2KB、4KB、8KB等。 #### 三、查询表空间使用情况 在开始任何操作前,...

    oracle面试问题技术篇

    4. **Data Block, Extent, Segment**:Data Block是最小的逻辑存储单位;Extent是一系列连续的Data Block,用于扩展对象的存储空间;Segment是数据库对象(如表或索引)占用的所有Extents的集合。 5. **检查表结构*...

    Oracle 实训资料

    - **段(Segment)**:是在表空间内分配的一组连续的空间,用于存储特定类型的数据(如索引、表等)。 - **区(Extent)**:是由连续的数据块组成的存储区域,是分配给段的基本单位。 - **数据块(Block)**:是数据库中...

    oracle面试题70问及答案.docx

    4. **Data Block, Extent, Segment**: - **Data Block**:数据库的最小逻辑存储单位。 - **Extent**:一组连续的数据块,用于存储对象数据。 - **Segment**:由一个对象的所有extents组成,代表对象在磁盘上的...

    dumping oracle block

    在解析这些转储结果时,你需要理解Oracle的存储结构,如块、区(Extent)、段(Segment)以及表空间(Tablespace)的概念。此外,了解ROWID(Row Identifier)的组成也很关键,因为ROWID是定位数据库中具体行的唯一...

Global site tag (gtag.js) - Google Analytics