阐述oracle的体系结构,Oracle数据库逻辑体系结构详解

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

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

d1a9d207bf6ac034db5d922f5a78f8a9.png

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

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

39d8ad7ca0f054f525f17688af7fcf00.png

表空间分类:

永久表空间 :存储数据库中需要永久化存储的对象,比如二维表、视图、存储过程、索引。

临时表空间 :存储数据库的中间执行过程,如:保存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数据库相关内容请关注职坐标Oracle数据库频道。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle如何规则显示,Oracle语句优化规则汇总

Oracle sql 性能优化调整1. 选用适合的ORACLE优化器ORACLE的优化器共有3种:a. RULE (基于规则)b. COST (基于成本)c. CHOOSE (选择性)设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST&#x…

手机版数据库oracle,用手机管理及维护MySQL,Oracle等数据库

sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换1. 处理 sql server 导出的 datetime 类型的字段 在进行sql server向mysql等其他数据进行迁移数据时,会发现使用sql server导出的datetim…

PHP如何读取excel文,PHP-php如何读取excel?

我前几天刚好也用到了PHP读取Excel我用的是phpexcel最新的版本。下面是代码require_once ./PHPExcel/PHPExcel.php;$_ReadExcel new PHPExcel_Reader_Excel2007();//为了可以读取所有版本Excel文件if(!$_ReadExcel->canRead(PATH./.$_data[path])) $_ReadExcel new PHPExc…

小青蛙oracle跟踪,Oracle 存储过程:游标

一、认识游标什么是游标?游标是数据库的一种数据类型,它用来管理从数据源(表,视图等)获取到的数据结果集,可以想象成一个游动的光标(指针),指向一个结果集,通过游标的移动逐行提取每一行的记录,…

linux使用设备文件的目录,Linux系统下的/dev目录

dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。下面学习啦小编给大家分享详解Linux系统下的/dev目录,欢迎阅读:详解Linux系统下的/dev目录:在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设…

linux解锁文件.user.ini,Linux下解决网页服务器权限和.user.ini无法删除的问题

解决网页服务器权限问题在linux环境下搭建Nginx/apache网页服务器,在尝试访问页面时都会遇到这个问题,提示没有写入权限,或者必须访问网页服务器权限。这源自于linux对于权限的限制比较严格。所以网上无数的解决方法,无外乎一个提…

linux内核 lts长期演进,Linux Kernel 4.19 和 5.4 生命周期延长至 6 年

近日,Linux 内核开发及维护者 Greg Kroah-Hartman 宣布将 Linux 内核 4.19 和 5.4 版本的生命周期终止(EOL)支持从两年延长到六年,分别延长至 2024 和 2025 年。在这期间,它们能够继续向后移植 bug 并获得一些重要的安全修复程序。Linux 内核…

linux pipe 文件,Linux系统常用指令、管道(pipe)、文件查找(find)

//在3~4个目录层次中间查找passwd文件find / -mindepth 3 -maxdepth 4 -name passwd//查找文件名中含有”an”的文件find ./ -name “*an*” -type f//查找大于7K的文件find ./ -size 7k//查找小于100字节的文件,c表示字节find ./ -size -100c-name 文件名字 //直接…

stm32运行linux,新出的STM32F750成功运行Linux

本帖最后由 ICZOOM 于 2018-12-20 15:28 编辑前段时间ST推出了Value Line的STM32F750和H750两个系列,看了一下选型表,F750有LQFP144封装,正好适合我的STM32 linux板子。于是,双十一买了几片。同时,我对我的linux板做了…

linux如何运行qt源码,Linux/Ubuntu下编译Qt4.8.2源码

本人所用的系统为Ubuntu 14,所下载的QT源码版本为4.8.2。以下是编译QT源码的基本步骤:2.解压代码输入指令: tar zxvf qt-everywhere-opensource-src-4.8.2.tar.gz,解压出QT源代码。3.执行./config生成makef…

linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”

内核启动流程相关的内容让很多热爱linux的小伙伴既爱又恨,因为这是了解linux系统基本构造的良好过程同时由于其本身复杂且底层,脑子中的脉络不是很清晰,本文就总结了一些优秀博文,以自己的理解来解构一下。本文的环境是CentOS 6.8…

linux brctl命令,Linux中brctl命令起什么作用呢?

摘要:下文讲述Linux中brctl的功能说明,如下所示;brctl命令功能:用于对以太网的网桥进行配置brctl命令的语法格式:brctl [参数] -----常用参数说明------addbr:创建网桥delbr:删除网桥addif:将网卡接口接入网桥delif:删除网桥接入的网卡接口sh…

linux文件编辑命令详细整理,Linux文件编辑命令vi详细说明

目录1、引言2、vi命令与vim命令3、vi命令使用3.1一般模式3.2编辑模式(重点)3.3命令行模式1、引言相信有很多程序员朋友,在长时间不操作linux系统或者初学linux命令时,都有跟我有一样的疑惑。这个vim命令与vi命令有什么区别?不都是编辑器么&am…

linux wifi ip,Linux环境下使用WIFI模块:使用DHCP工具动态获得IP地址

使用DHCP工具动态获得IP地址实验版本及下载地址DHCP:dhcp-4.4.1.tar.gz链接: [https://www.isc.org/downloads/]编译安装DHCP配置编译选项解压完成后进入DHCP根文件目录,输入配置指令./configure --hostarm-linux ac_cv_file__dev_randomyes --with-rand…

linux 硬盘空间监控,Linux服务器硬盘空间监控

#*************************************************************************# Author : 清风# CreateDate : 2015/6/12 15:30:13# Description : this script is mointoring the linux disk capacity, if disk used more than 90%,then it wi…

linux nifi指定jdk,nifi在arm架构启动不了,怎么办?

问题描述nifi启动报错问题出现的平台版本及自己尝试过哪些方法arrch64、在服务器上编译过相关代码粘贴代码文本(请勿用截图)ERROR [main] org.apache.nifi.NiFi Failure to launch NiFi due to java.util.ServiceConfigurationError: org.apache.nifi.processor.Processor: Pro…

linux内核更新 2.6.38,Linux内核 2.6.38版本预计到四月初完成

【IT168 技术】Linux版本2.6.37发布整整14天之后,Linus Torvalds发布了内核2.6.38的第一测试版,正式版预计将在三月底或四月初完成。在此版本中,开发周期的合并窗口已经结束,Torvalds集 成这个版本的大多数变化到主要开发分支的源…

Linux指令lunch,linux命令 launch是什么命令?

lunch 吧?类似于choosecombo,选择编译编译参数的。执行source build/envsetup.sh才有。其实我也不是特别了解。我觉得应该是在envsetup.sh里定义的。不知道你用过choosecombo没有,跟那个是类似的。$ source build/envsetup.shincluding devic…

linux创建a1的硬链接a2,Linux命令-重定向和软硬链接

echo功能说明:显示文字. 语 法:echo [-ne][字符串] 或 echo [–help][–version]参数:   -n 不要在最后自动换行重定向>是定向输出到文件,如果文件不存在,就创建文件;如果文件存在,就将其…

linux shell 博客,【博客侠】Linux Shell脚本系列:开始上手(1)

看标题大家应该知道,这是一个关于 Linux Shell 脚本的系列文章。通过本系列文章希望帮助 Linux 初学用户快速开始上手编写 Shell 脚本,能够利索的对脚本进行测试和使用。在接下来的首篇文章中,我们将介绍什么是 Shell,有哪些 Linu…