`

(转)oracle数据库的整体结构

阅读更多

数据库的结构关系
 
  其实,我前面一篇讲表空间的时候就介绍了数据库的结构,只是那个图只是简单的层次关系,这张图片看上去挺封复杂的,只要关注几个概念就行了。
Database(数据库)

      数据库是按照数据结构来组织、存储和管理数据的仓库。
 
Tablespaces(表空间)

      表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的对象是表, 所以称作表空间。  www.2cto.com 

Segments (段)

      段是表空间的重要组织结构,段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。
 
extents (盘区)

       是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。第一个段是由一个或多个盘区组成。当一段中间所有空间已完全使用,oracle为该段分配一个新的范围。


Data Block (数据块):

      是oralce 管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,其大小可不同于操作系统的标准I/O块大小。
 
(Storage Clause Precedence)存储规范优先

 

Oracle 在存储控制上可以分为三个方式

        oracle缺省级别、表空间级别、段级别,可以理解中央、省级、县级。从中央到地方的法规条例。比如为了发展经济,对于招商引资的规范。中央规定可以实行招商引资,某省比较穷,为了吸引投资商,规定降低企业所得税。某县为了吸引资源,可以规定对于投资商土地免费使用5年,不征收土地使用税。那么某投资商来本县后首先适用县级规定。
具体规定:
1、不管你在哪个层面上修改存储方式,修改的参数是对未来要分配的存储extents (盘区)起作用。
2、一些参数只能在指定的级别上进行修改。有些参数只能表空间级别设置,有些参数只能在段级别设置。
 
Types of segments (段的类型)             
   因为关于表空间的一些基本知识我在另一节里做过专门介绍,这里我们认识一下段都有哪些常见类型。

 Table :
  对于一个只有几百条几千条数据,一个学校的学生成绩表,那么一张表就是一个segments 。
 Table partition :
  如果一张表非常大,里面存储了几千万条、上亿条记录,那么对这一张表进行操作,效率就非常低了。分区表是将大表的数据分成称为分区的许多小的子集。假如一张表是存放中国13亿人口信息的表,那么这么多条记录是有规律的,可以基于某一个字段将其分开。那么可以根据省级行政区可以划分34个分区,每个分区实际上就是一个独立的表,但在逻辑上这些分区又同属于一张表。
如果一张表是普通的表,只点一个segments;如果一张表是partition的表,可能占多个segments。
 
Cluster:
       Oracle中普通的表称为堆表(heap table),堆表中的数据是无序存放的,往往在使用一段时间后,数据就变得非常无序。如下图所示,索引中相同的key对应的数据存放在不同的block中,这时,如果要通过索引查询某个key的数据,就需要访问很多不同的block,代价非常高。
 
      我们发现很多表与表,他们的数据有相关性,因为我们访问一个表里的数据,往往要访问另一些表里的数据。我们可以把这些数据物理上存储在一块。
 
索引Index
      索引是与表和聚集相关的一种选择结构,就当于我们一本书的目录,可以快快速的定位某章某节的页数。索引可以建立在一个表的一列或多列上,那就可以大大提高对表的查询。
那么一个index也可能会占一个多个segments 。
 

Index-organized table :
  索引组织表(IOT),就是存储在一个索引结果中的表。存储在堆中的表是无组织的(也就是说,只要有可用的空间,数据可放在任何地方),IOT中 暗则按主键存储和排序。对你的应用来说,IOT表和一个“常规”表并无差别。使用堆组织表时,我们必须为表和表主键上的索引分别留出空间。而IOT不存在主键的空间开销,因为所引就是数据,数据就是所引。
   IOT带来的好处不仅节约磁盘空间的占用,更重要的是大幅度降低了I/O,减少了访问缓冲区缓存(尽管从缓冲区缓存获取数据比硬盘要快得多,但缓冲区缓存并不是免费,而且也绝不是廉价的。第个缓冲区缓存获取都需要缓冲区缓存的多个闩,而闩是串行化设备,会限制应用的扩展能力)

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思想很类似,就是在表里存一个指针,指针指向另外一张表。
Bootstrap segment
      关于引导段,暂时没找到相关解释。
 
Extent alloc & dealloc(盘区分配与释放)                        
   盘区是段下面的一个存储单位,一个盘区在物理上是一段连续的数据块。
 一个数据文件有一个文件头,点用了若干个数据块,这这个文件头里记录着盘区的分配与释放的信息。在这个文件中有些盘区是被使用的,有些盘区是空闲的。
 
什么时候创建盘区
    创建
    扩展
    改变(改大)
    什么时候释放盘区:
    删除
    改变(改小)
 
Database Block(数据库块)
    最小单位的输入/输出
    数据块由操作系统中的一个或多个块组成
    数据块是表空间的基本单位
    DB_BLOCK_SIZE 文件来表示缺省块的大小
 
查看oracle 块的大小:
    [ora10@localhost dbs]$ strings spfileora10.ora | grep -i db_block
    *.db_block_size=8192  (8KB)
 
    在早期的数据库中,oracle只支持一种数据块的大小。从9i版本支持了改变大小的设置。但也不是任用户随便改动的,规定范围在2KB到32KB之间,必须是倍数增加的,也就是2KB\4KB\8KB\16KB\32KB 五种大小。
  需要注意的是,块大小的设置是在数据库创建时候设置的,一旦设置好是不可更改的。类似于我们磁盘的存储格式,FAT16、FAT32、NTFS.... ,要想改变存储格式只能数数据全部格式化掉。
 
Hearder : 块头记录一些控制信息,帮助oracle定位这个块,块与块之间的串联信息。
Free space :处于重现状态的这空间。
Data :已经写入数据的空间。数据存放数据的方式是自底往上的,就像现实中的一个箱子。

Orcale 是如何管理数据的存储的                                   
 
High-Water Mark

对于一个新建立的表,表中包含很多数据块,water mark 原始指向表中的第一个数据块。
water mark随着插入的数据“向前”移动。当把插入的数据删除掉一些,water mark 并不会“向后”移动。也就是water mark 的位置表示历史的最高水位。
 
那么我们要想插入一些数据时,oralce是按什么样的规则输选择插入位置呢?   首先会先查找灰色的,灰色部分表示就已经插入数据的块,但这些块并不是已经被完全占满了,有些或多或少的都会留下一些空间,关于留空间的规则,后面细说。如果插入一个很小的数据,灰色被占的数据块中可以完全插入的,就会被插在这一部分。
  如果数据比较大,查找了所有被占用块都无法插入,那么将会选择“曾经”插入过数据的空白块进行插入,也就是上图浅灰色部分。
  如果数据非常大,曾经插入数据的空白块都无法插入,那么只好动用从未被插入过数据的空白块进行插入。当然water mark 也就会“向前”移动。
 
下面就来具体分析,每个数据块,是否允许插入数据的规则
  块头(数据块的头)不在百分比的范围内,当剩余空间大于20%的时候,那这个块就是纳入freelist中,当我要插入一条数据时,freelist是会扫描这个块的,检查其它是否可以存放要插入的数据。当小于20%的这间时,说明这个块已经满了,会从freelist中去掉,插入数据时不作为扫描的对象。
  一个小于20%空闲的块会从freelist上摘除,那么一个块在什么情况下会被重新挂到freelist上呢?对于一个已经从freelist上摘除的块,可以能由于删除更新操作,其空间会得到释放,当占用空间小于40%时,也就是空闲空间大于60%时,这个块被有认为是空间的块又会被重现挂到freelist上。

  • 大小: 75.5 KB
  • 大小: 14.6 KB
  • 大小: 43.3 KB
  • 大小: 40.7 KB
  • 大小: 35.9 KB
  • 大小: 29.3 KB
  • 大小: 38.8 KB
  • 大小: 34.7 KB
  • 大小: 6.1 KB
  • 大小: 123.1 KB
分享到:
评论

相关推荐

    oracle数据库体系结构

    数据库体系结构,是一个数据库管理系统,它提供开放、全面、集成的方法进行信息管理。描述了oracle数据库整体架构

    oracle 12c 数据库 教程

    (三)使用 DBCA 创建 Oracle 数据库 21 (四)验证 Oracle Database 12cR2 环境 25 (五)使用 oracle-database-server-12cR2-preinstall 包 25 三、管理数据库实例 27 (一)管理工具 27 (二)初始化参数 27 (三...

    oracle异库同表名的两个数据库中数据合并或数据表结构的修改

    oracle异库同表名的两个数据库中数据合并或数据表结构的修改

    从一个“普通”的Oracle DBA(Oracle数据库管理员)转变为Oracle Applications DBA(Oracle应用程序数据库管理员)

    Oracle Applications DBA(Oracle应用程序数据库管理员)比“普通”的Oracle DBA(Oracle数据库管理员)门槛高了很了很多,不仅要有处理数据库问题的能力,还需要了解整个应用程序的构架,从大处着眼,整体考虑问题...

    Oracle数据库最大可用性体系结构

    现在IT系统中越来越多的部分,包括网络、系统、数据库等,都已经考虑了可用性,...Oracle希望简化为用户商业需求设计正确高可用性体系结构的复杂性。MAA正是提供了一个实现整体高可用性的解决方案,真正实现坚不可摧。

    Oracle数据库课程设计报告(1).pdf

    根据 题目的基本需求,设计系统界面、数据库、编写程序(Oracle),并写出课程设 计报告 1、阅读资料:每个人必须提前阅读教材有关 Oracle、VC、C++、C#应用方 面的内容以及其它相关书籍。 2、需求分析:题目要求达到...

    教室资源管理系统的Oracle数据库设计 .docx

    主要对教室资源管理系统整体设计做一个详细的介绍,包括数据库的创建(需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行与维护等)和教室资源管理系统的编辑、编译、运行、调试、维护等...

    Oracle数据库课程设计报告(1).doc

    设计环境 1.Windows7旗舰版32位 2.Microsoft Visual Studio 2005 3.Oracle 11g 第2章 概要设计 2.1系统需求分析 图书管理系统主要是用oracle数据库进行逻辑处理,实现对图书信息的增删改查,以 及出库入库的管理。...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    1.2.1整体结构 1.2.2物理层次结构 1.2.3逻辑层次结构 1.3 RAC的特点 1.3.1双机并行 1.3.2高可用性 1.3.3易伸缩性 1.3.4低成本 1.3.5高吞吐量 1.4 RAC存在的问题 1.4.1稳定性 1.4.2高性能 1.5 RAC软件 ...

    Oracle数据库设计开发阶段性能优化

    优化Oracle 数据库对提高计算机系统的可用性和效率,具有非常重要的意义, 特别是在Oracle数据库设计开发阶段,对逻辑结构和物理结构进行有效的优化设计,创建一个规划布局合理的数据库,可以获得最小的系统开销,能从...

    Oracle精髓(第4版)

    racle产品、选项、数据结构、Oracle数据库11的整体架构以及早期版本(Oracle数据库10g、Oracle数据库9i和Oracle数据库8i)的简单说明。如何安装、运行、管理、监控、联网和调整Oracle——包括企业管理器(EM)以及...

    Oracle体系结构PPT

    系统地讲解Oracle体系结构,有助于初学者整体了解和把握Oracle服务器。

    基于Oracle的电力空间数据库开发与研究

    针对电力地理信息系统空间数据的特点, 对空间数据进行数据建模, 提出了空间数据库 的设计思想, 并利用Oracle 9i , 对空间数据库整体结构进行设计

    oracle体系结构.doc

    描述oracle体系结构的经典教程,你可以有如下收获 1、 理解ORACLE 实例的组成 2、 理解ORACLE 数据库的组成 3、 理解ORACLE内存结构的组成 4、 理解后台进程的作用与分工 ...6、 理解ORACLE的整体构架

    oracle 体系结构.doc

    在本章里你可以了解以下内容 1、 理解ORACLE 实例的组成 2、 理解ORACLE 数据库的组成 3、 理解ORACLE内存结构的组成 4、 理解后台进程的作用与分工 5、 理解数据库的物理文件与对应的逻辑...6、 理解ORACLE的整体构架

    网上订餐系统数据库设计

    本系统开发使用B/S结构,严格的按照软件工程的思想贯穿系统设计,利用Java语言,以Oracle作为系统数据库,实现网上订餐系统的开发。这些先进的开发思想和技术手段有力地保证了此系统可以安全地、高效地为餐厅的运营...

    Oracle9i中MapInfo空间表整体结构分析.pdf

    Oracle9i中MapInfo空间表整体结构分析.pdf

    ORACLE 体系结构

    ORACLE 体系结构介绍 包括以下内容 1、 理解ORACLE 实例的组成 2、 理解ORACLE 数据库的组成 3、 理解ORACLE内存结构的组成 4、 理解后台进程的作用与分工 5、 理解数据库的物理文件与对应...6、 理解ORACLE的整体构架

    oracle体系结构

    ORACLE 体系结构(Architecture of ORACLE) 在本章里你可以了解以下内容 1、 理解ORACLE 实例的组成 2、 理解ORACLE 数据库的组成 3、 理解ORACLE内存结构的组成 4、 理解后台进程的作用与...6、 理解ORACLE的整体构架

    Oracle 基本管理 宝典系列2

    主要介绍Oracle 数据库体系结构,对ORACLE的整体概览和每个大的组件的介绍

Global site tag (gtag.js) - Google Analytics