`
trophy
  • 浏览: 176844 次
  • 性别: 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 truncate恢复

    block type=0×23 (ASSM segment header block) block format=0×02 (oracle 8 or 9) block rdba=0×02800578 (file#=10, block#=1400) scn=0×0000.00286f2d, seq=4, tail=0×6f2d2304 block checksum value=0×0=0...

    oracle高级面试50问

    4. 解释data block , extent 和 segment的区别(这里建议用英文术语)  解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库...

    Oracle面试问题-技术篇

    4.解释data block , extent 和 segment的区别(这里建议用英文术语) 解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象...

    Oracle 10G笔记

    第一节课 1. 数据库发展概况 网状数据库 关系数据库 对象数据库 2. 关系数据库特点 数据完整性 数据安全性 ...7. 逻辑结构(块block、盘区extent、段segment、表空间tablespace、数据文件datafile)

    ORACLE中段的HEADER_BLOCK示例详析

    最近在学习段(segment)、区间(extent)时,对段的HEADER_BLOCK有一些疑问,本文记录一下探究的实验过程以及相关总结,,如有不对的地方,敬请指出。以SCOTT.EMP表为例(下面测试环境为Oracle Database 10g ...

    oracle DCSI402 表空间和事务管理

    After completing this lesson, you should be able to do the following: • Describe the segment header structures • Explain the components of Free List and ... Describe extent map block structures

    oracle9i优化设计与系统调整

    §1.3.1 数据块(data block) 28 §1.3.2 区间(extent) 28 §1.3.3 段(segment) 28 §1.4 SQL语句处理 29 §1.4.1 SQL语句处理顺序 29 §1.4.2 COMMIT语句处理顺序 32 §1.5 共享池 33 §1.6 块缓存(数据高速缓冲...

    Oracle面试题 oracle学习题

    4. 解释data block , extent 和 segment的区别(这里建议用英文术语) 5. 给出两个检查表结构的方法 6. 怎样查看数据库引擎的报错 7. 比较truncate和delete 命令 8. 使用索引的理由 9. 给出在STAR SCHEMA中的两种...

    oracle恢复工具-FY_Recover_Data

    首先要停止数据库, 将这个表所在的表空间的文件拷贝出来, 因为Oracle在Truncate只时将相应Segment的第一个块格式化掉了, 而后面的都还存在, 到下次用时到才真正地重新格式化. 下面来讲一个Truncate表后进行恢复的...

    ORACLE9i_优化设计与系统调整

    §1.3.2 区间(extent) 28 §1.3.3 段(segment) 28 §1.4 SQL语句处理 29 §1.4.1 SQL语句处理顺序 29 §1.4.2 COMMIT语句处理顺序 32 §1.5 共享池 33 §1.6 块缓存(数据高速缓冲区) 33 §1.7 数据库写入进程 34 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视...

    第5课 Oracle数据结构(一).pdf

    空间(tablespace)--Oracle中最大 ...� 段(segment)--Oracle中所有占用空 间的对象的总称 � extent-- 段的组成单位 � 数据块(data block)-- extent的组成单 位,是Oracle存储和数据操作的最小单 位

    Oracle基础知识

    select tablespace_name,initial_extent,next_extent,contents,logging,extent_management,allocation_type from dba_tablespaces order by tablespace_name; 2、查看表空间物理文件的名称及大小 column db...

    Orcal创建表空间

    Orcal创建表空间 脚本。... 'E:\Oracle\MEDEXECGTYY.dbf' SIZE 20480M AUTOEXTEND OFF LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL FLASHBACK ON;

    oracle逻辑结构分析

    oracle的逻辑结构包括表空间(tablespace),段(segment),区(extent),数据块(data block) oracle数据库在逻辑上是由多个表间组成的,表空间中存储的对象叫段,比如数据段,索引段,和回退段。段由区组成,区是磁盘...

    收获不知Oracle

    3.2.5.5 逻辑结构之SEGMENT 98 3.2.6 逻辑结构之二次体会 100 3.2.6.1 BLOCK的大小与调整 100 3.2.6.2 PCTFREE参数与调整 101 3.2.6.3 PCTFREE与生效范围 102 3.2.6.4 EXTENT尺寸与调整 103 3.2.7 逻辑结构之三次...

    数据库建库指令

    CREATE TABLESPACE jyzx DATAFILE 'jyzx' SIZE 500M AUTOEXTEND ON NEXT 50M MAXSIZE unlimited LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT AUTO ...

    oracle-dmt-lmt-mssm-assm

    dmt,lmt是管理segment中的extent的,而mssm和assm是管理extent中的block的。 需要说明的时不论在dmt还时lmt下都可以使用mssm,而在dmt下只能使用mssm,而下面要介绍的assm只在lmt下才支持。

    Toad 使用快速入门

    如可以定义CTRL+SHIFT+D:弹出所有PLSQL Block的类型,可以自己选择。 9. 可以在一个集成开发环境里面,一边编码,一边调试,不用多处切换 10. 方便的同时打开多个存储过程,通过页面快速切换 11. 快速编译存储...

    ora分析脚本

    -i instance# append # to ORACLE_SID -sid <sid> set ORACLE_SID to sid -top # limit some large queries to on # rows - repeat <interval> |forever> Repeat an coomand <count> time. Sleep <interval> ...

Global site tag (gtag.js) - Google Analytics