以前对数据库的了解大多数是集中在mysql,最近工作里面一直使用的是oracle,虽然说在互联网行业mysql大行其道,但是一些传统行业或者是金融领域还是更加倾向于使用oracle,sqlserver这种大型数据库。为此还是有必要深入了解以下oracle的一些内部机制的。

  有过oracle使用经验的人都知道表空间(tablespace)的概念,表空间其实是一个逻辑概念,它并不实际存在。而与之关系密切的是数据文件(datafile),数据文件是实际存在的,并且和表空间是多对1的关系。其实只知道这些是远远不够的,前段时间遇到一个数据文件超过32G导致的业务问题,才突然醒悟骚年静下心好好学习学习oracle底层的一些概念才是解决问题的王道。首先我们从整体来上了解一下oracle的逻辑体系结构。在这里附上一张百度到的图片。

  图片中展示的oracle的最大的逻辑结构为数据库,其实这里最大的体系结构应该是实例(instance),并且实例和数据库是一对一的关系,这样的话我们可以将上图看作是oracle体系结构中的一个可分割的最大单元。 可以看出数据库可划分的最大单元为表空间,而表空间又由段(segment)组成,段由extent构成,如果再往下分的话是block,oracle中block的概念不同于操作系统中块文件的概念,这个我们后面章节解释。下面我们对上述的一些概念进行一下阐述:

  表空间:表空间是oracle抽象出来的最大的逻辑单元,用于存储数据库对象。和表空间相关的概念为数据文件,可以通过dba_data_files来查看表空间和数据文件的关系。

                    

     表空间分类:

      • 永久表空间:存储数据库中需要永久化存储的对象,比如二维表、视图、存储过程、索引。
      • 临时表空间:存储数据库的中间执行过程,如:保存order by数据库排序,分组时产生的临时数据。操作完成后存储的内容会被自动释放。临时表空间是通用的,所的用户都使用TEMP作为临时表空间。一般只有tmp一个临时表空间,如果还需要别的临时表空间时,可以自己创建。
      • UNDO表空间:保存数据修改前的副本。存储事务所修改的旧址,即被修改之前的数据。当我们对一张表中的数据进行修改的同时会对修改之前的信息进行保存,为了对数据执行回滚、恢复、撤销的操作。

  段: 段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。说到这里有必要提一下表段,因为标段中如果表作为一个分区表,那么表的一个分区占用一个段。

    段分类: 由于oracle中段比较多,这里我们只是简单的说一些比较常见的段。

      • 表段: 表段,故名思意,它是专门用于存储表的信息的数据结构,通常与索引段联合使用。 
      • 分区段:这种段类型用于分区,与表段很相似。分区表由一个或多个表分区段组成,组合分区表则由一个或多个表子分区段组成。  
      • 索引段:这种段类型可以保存索引结构,与mysql类似,在mysql中mysiam存储引擎下索引和数据是分开的,而innodb引擎下是存储在一起的。
      • 索引分区: 类似于表分区,这种段类型包含一个索引的某个片。分区索引由一个或多个索引分区段组成。
      • 临时段: 用于存放临时数据,比如带有order by语句的sql会在临时段内存储数据。
      • 回滚段:回滚段是DBA手动创建的段。Type2 undo段由Oracle自动创建和管理。
      • 还有很多其他的段,感兴趣的大家自行研究一哈。

  区:区是oracle中由块组成的逻辑单元,在10G中只要创建了表的时候就会分配区,而在11G及其之后是当插入数据的时候才会分配区。区的分配则是动态的,当表的容量超过当前区所能承载的范围时就会自动添加新的区。这个内容可以通过dba_extents表查看。

  块: oracle的块是建立在数据库块的基础之上的,通常oracle的块可以是2,4,8,16,32K,是系统块的整数倍,并且定义之后不能被修改。在这里引入一个前段时间遇到的问题: oracle数据文件超过32G导致业务失败的问题。这是因为测试环境上面使用的是smallfile tablespace 模式,所以需要满足以下制约:

   由于Oracle的Rowid中使用22位来代表Block号,这22位最多只能代表2^22-1(4194303)个数据块,而在我们一般情况下使用的数据块大小为8k,所以数据文件的理论大小最大为: 31.9999924G,并且在数据文件超过32G的情况下,唯一能做的就是添加一个datafile。

oracle 逻辑体系结构详解的更多相关文章

  1. Oracle逻辑读详解

    1.物理读(physical read) 当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子: 1.1  第一次 ...

  2. Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  3. oracle表分区详解

    原文来自:http://www.cnblogs.com/leiOOlei/archive/2012/06/08/2541306.html oracle表分区详解 从以下几个方面来整理关于分区表的概念及 ...

  4. Oracle AWR 报告详解

    转自:http://blog.csdn.net/laoshangxyc/article/details/8615187 持续更新中... Oracle awr报告详解 DB Name DB Id In ...

  5. [转]Oracle执行计划详解

    Oracle执行计划详解 --- 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:   ...

  6. Linux内核异常处理体系结构详解(一)【转】

    转自:http://www.techbulo.com/1841.html 2015年11月30日 ⁄ 基础知识 ⁄ 共 6653字 ⁄ 字号 小 中 大 ⁄ Linux内核异常处理体系结构详解(一)已 ...

  7. ORACLE数据库备份与恢复详解

    ORACLE数据库备份与恢复详解 学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!! Oracle的备份与恢复有三种标准的模式,大致分为两 大类,备份恢复(物理上的)以及导入导出(逻 ...

  8. Oracle权限管理详解

    Oracle权限管理详解 转载--CzmMiao的博客生活 Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级. ...

  9. Java从入门到精通——数据库篇Oracle 11g服务详解

    装上Oracle之后大家都会感觉到我们的电脑慢了下来,如何提高计算机的速度呢?我们应该打开必要的服务,关闭没有用的服务.下面是Oracle服务的详解: Oracle ORCL VSS Writer S ...

随机推荐

  1. [转]移动H5前端性能优化指南

    移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...

  2. es5中foreach的用法

    HTML代码: <p id="result"></p> JS代码: var eleResult = document.getElementById(&quo ...

  3. JAX-WS注解

    JAX-WS注解: javax.jws.WebService @WebService应用于类或者接口上面,该类便是一个对外访问WebService,默认情况里面所有的public方法都是可以对外提供访 ...

  4. clone对象的克隆

    用一句简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针. 等多 http:/ ...

  5. iphone配置实用工具iPhone Configuration Utility

    下载地址 http://support.apple.com/kb/DL1466 安装完毕后,在设备->控制台,可以很方便看到报错信息

  6. weex和vue开发环境配置详解(配置系统变量等等)

    本文详细讲解如何搭建weex和vue开发环境 安装java 现在java安装包,网上的安装包都是国外的,很难下载下来 就用这个链接下载,亲测无毒,http://www.wmzhe.com/soft-3 ...

  7. python中引号中有双引号

    #/usr/bin/python import os name = "ABC" #ABC是具体的模块名,产品经理每一次给的模块名字都不一样 os.environ['name'] = ...

  8. CSS——display

    display的主要属性: 1.none: 不显示: 不保留其在页面中的位置,即相当于html文档中没有这个元素: visible:hidden虽然也不显示:但依然保存着他的位置和大小. 2.bloc ...

  9. Eclipse一步一步搭建SSM+Maven

          Eclipse 搭建SSM(Spring.Spring MVC .Mybatis)  利用Maven管理Jar包      一般而言,新的eclipse都已经集成了maven,如果没有那么 ...

  10. 【转载】eclipse如何传递main参数

    转自:http://blog.csdn.net/theblackbeard/article/details/52172048 在命令行窗口可以通过java +程序名 +参数1(空格)参数2(空格).. ...