Oracle之体系结构

Oracle数据库的体系结构包括逻辑和物理存储结构。逻辑结构涉及数据块、数据区、段、表空间等,其中数据块是最小存储单位,包含头部信息、表目录、行目录等。物理结构由数据文件、控制文件、日志文件等组成。表空间如SYSTEM、SYSAUX、USERS等用于存储不同类型的数据库对象。后台进程如DBWR、LGWR、PMON等协同工作以保证数据库的正常运行。
摘要由CSDN通过智能技术生成

Oracle数据库的体系结构的分类

逻辑存储结构

数据块Data Blacks

数据块是Oracle数据库中最小的存储单位,可以存放表数据,索引数据等。
数据块由块头、表目录、行目录、空余空间和行数据五部分组成

头部信息区

头部信息区:它存放的是整个数据块的引导信息,起到引导系统读取数据的作用并不存放实际数据。
有块头、表目录、行目录

块头

存放数据块的基本信息,如块的物理地址、快的所属类型

表目录

存放表的相关信息。如果数据块中存储的数据是表数据,则表目录中存储有关这些表的信息。

行目录

如果数据块有行数据存在,则这些行的信息被行目录记录。如行的地址

存储区

用于存放真实的数据。由空闲空间、行数据构成

空余空间

未被使用的区域,用于新行的插入和已经存在行的更新。

行数据

存放表数据和所云数据的地方,这部分空间已被数据行所占用。

数据区Extent

数据区是由一组连续的数据块构成的存储结构。是Oracle数据库最小的分配单位Oracle就是以数据区为单位进行存储控件的扩展,使用数据区的目的是用来保存特定数据类型的数据。
当一个段中的所有空间被使用完后,oracle系统将自动为该段分配一个新的数据区。
一个oracle对象包含至少一个数据区。

数据段Segment

段是有一个或多个数据区构成,它不是存储空间的分配单位,而是一个独立的逻辑存储结构
用于存储表、索引等占用空间的数据对象,Oracle也把这种占用空间的数据对象统称为段。
一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时,Oracle将为他创建一个段
段是为特定的数据对象(表、索引、回滚等)分配的一系列数据区。段内包含的数据去可以不连续,并且可以跨越多个文件

数据段

保存表中的数据记录。在创建数据表时,oracle系统将为表创建数据段。

索引段

保存用于提高系统性能的索引数据。一旦建立索引,系统自动创建一个以该索引的名字命名的索引段

回滚段

保存回滚条目,即待回滚的数据

临时段

当执行创建索引、查询等操作时,Oracle可能会使用一些临时存储空间,用于暂时性的保存解析过的查询语句以及在排序过程中产生的临时数据。由临时表空间分配

表空间TableSpace

是数据库中的基本逻辑结构,一系列数据文件的集合
Oracle数据库最大的逻辑划分区域,通常存放数据表、索引、回滚段等数据对象
表空间(逻辑存储结构)与数据文件(物理存储结构)对应,一个表空间有一个或多个数据文件组成,一个数据文件只属于一个表空间;
Oracle数据的存储空间在逻辑上表现在表空间,在物理上表现为数据文件

SYSTEM系统表空间

用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等

SYSAUX辅助表空间

充当SYSTEM的辅助表空间,降低SYSTEM表空间的负荷,主要鵆出数据字典以外的数据对象。

UODO撤销表空间

用于存储撤销信息的表空间。

USERS用户表空间

用于存放各种数据对象,如表、索引、用户等数据对象。

TEMP临时表空间

用于存放临时数据的表空间,比如当数据发生排序产生的临时数据,就存放在临时表空间中。

物理存储结构

Oracle数据库的物理结构是由众多文件组成的

数据文件

用于存储数据的文件

系统数据文件

用于存放特殊的用户数据和Oracle系统本身的数据,如用户建立的表名、列名及字段类型等,这些数据被存放在系统表空间所包含的数据文件中

撤销数据文件

隶属于撤销表空间。存放待回滚的旧数据。

用户数据文件

存放用户应用系统的数据,这些数据包括与应用系统有关的所有信息。

控制文件

控制文件是一个二进制文件,他记录了数据库的物理结构,其中主要包含数据库名、数据文件与日志文件的名字和位置等信息。控制文件一般在Oracle系统安装时或创建数据库时自动创建由于控制文件存放有数据文件、日志文件等的相关信息,因此,Oracle实例在启动时必须访问控制文件。只有控制文件正常,实例才能加载并打开数据库;但若控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动

日志文件:

记录对数据所做的修改,对数据库所做的修改几乎都记录在日志文件中。在出现问题时,可以通过日志文件得到原始数据。

重做日志文件(Redo Log File)

重做日志文件用来记录数据库所有发生过的更改信息(修改、添加、删除等信息)及由Oracle内部行为(创建数据表、索引等)而引起的数据库变化信息。

归档日志文件(Arichive Log File)

服务器参数文件:SPFILE(Server parameter File):

二进制文件,用来记录Oracle数据库的基本参数信息(数据库名、控制文件所在路径、日志缓冲大小等)

密码文件

Oracle系统用于验证dba权限的二进制文件,当远程用户以dba身份连数据库时,要用密码文件验证。

警告文件

它用来记录Oracle系统的运行信息和错误信息。

跟踪文件

后台进程跟踪文件

用于记录后台进程的警告和错误消息。每个后台进程都有对应的进程跟踪文件

用户进程跟踪文件

用于记载与用户进程相关的信息,主要用于跟踪SQL语句

服务器结构

Oracle服务器主要由实例、数据库、程序全局区和前台进程组成
实例(Instance):用来提供管理数据库的功能
数据库(Database):由文件组成,用来储存系统数据

实例:

系统全局区(System Global Area SGA)

使用操作系统的内存资源,是所有用户进程共享的一块内存区域。SGA随着数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA区域也就消失了

高速数据缓冲区(Database Buffer cache):

存放着Oracle系统最近访问过的数据块(数据块在高速缓冲区中也可称为缓存块)。当用户向数据库发出请求时(比如检索某一条数据),如果在高速数据缓冲区中存在请求的数据,则Oracle系统会直接从高速数据缓冲区中读取数据并返回给用户,否则,Oracle系统会打开数据文件读取请求的数据。
便于管理SGA的内存数据,Oracle把高速数据缓冲区分为三个部分

脏数据区:

脏数据区中存放着已被修改过的数据,这些数据等待被写入到数据文件中。

空闲区:

空闲区中的数据块不包含任何数据,这些数据块可以被写入数据,Oracle可以从数据文件中读取数据块,并将其存放到该区中。

保留区:

保留区包含那些正在被用户访问的数据块和明确保留以作为将来使用的数据块(即缓存块),这些数据块将被保留在缓冲区中。

重做日志缓冲区(Redo Log buffer cache)

:重做日志缓冲区用于存放对数据库进行修改操作时所产生的日志信息这些日志信息在写入到重做日志文件之前,首先存放到重做日志缓冲区中,然后,在检查点发生或重做日志缓冲区中的信息量达到一定峰值时,最后由日志写入进程(LGWR)将此缓冲区的内容写入到重做日志文件。

共享池(Shared Pool)

共享池是SGA保留的内存区域,用于缓存SQL语句、PL/SQL语句、数据字典、资源锁、字符集以及其他控制结构等。
共享池包含

库高速缓冲区(Library cache)

主要包括共享SQL区和私有SQL区两个组成部分。库高速缓冲区中存放最近用过的SQL语句、PL/SQL语句的文本和执行计划。当下一次执行相同的SQL语句或PL/SQL语句时,可以直接在库高速缓冲区中找到之前已生成的执行划,而不需要再次解析相同的SQL语句或PL/SQL语句,从而提高系统执行效率。从而实现软解析。

字典高速缓冲区(Dictionary cache)

字典高速缓冲区用于存放Oracle系统内部管理所需要的数据字典信息,例如用户名、数据对象和权限等。

java池:

用来提供内存空间给Java虚拟机使用,目的是支持在数据库中运行Java程序包

大型池(Large pool)

不是必须的内存结构。

后台进程:

使用CPU与内存资源。Oracle后台进程是一组运行于Oracle服务器端的后台程序,是Oracle实例的重要组成部分。后台进程有若干个,他们分工明确各司其职。其中SMON、PMON、DBWR、LGWR和CKPT这5个后台进程必须正常启动,否则将导致数据库实例崩溃。

系统监控进程SMON

系统监控进程是在数据库系统启动时执行恢复工作的强制性进程。比如,在并行服务器模式下,SMON可以恢复另一个处于失败的数据库,使系统切换到另外一台正常的服务器上。

进程监控进程PMON

进程监控进程用于监控其他进程的状态,当有进程启动失败时,PMON会清除失败的用户进程,释放用户进程所用的资源。

数据写入进程(DBWR)

数据写入进程的主要任务是负责将内存中的“脏”数据块回写到数据文件中。但DBWR并不是随时将所有的“脏”数据块都写入数据文件,只有满足一定的条件时,DBWR进程才开始成批量地将“脏”数据块写入数据文件,Oracle这样做的目的是为了尽量减少I/O操作,提高Oracle服务器性能。

日志写入进程LGWR

用于将重做日志缓冲区中的数据写入重做日志文件。

检查点进程CKPT

检查点可以看做一个事件,当检查点事件发生时,CKPT会要求DBWR将某些“脏”数据块回写到数据文件。

程序全局区(Program Global Area)PGA

非共享的内存区域,用于管理用户进程的私有资源。
在程序全局区(PGA)中,一个服务进程只能访问属于它自己的那部分PGA资源区,各个服务进程的PGA区的总和即为实例的PGA区的大小。

私有SQL区

私有SQL区用于存储变量以及SQL语句运行时的内存结构信息,当每个用户连接到实例时,都会在实例中创建一个会话。这些会话可能会在SGA区中创建一个共享SQL区,但在PGA区中可能会创建多个私有SQL区。把一个私有SQL区与对应的共享SQL区合并在一起,就可以获得一条SQL语句的完整缓存数据。

会话区:

会话区用于存放用户的会话信息(如登录用户名)。如果数据库处于共享服务器连接模式下,则会话区将位于SGA区域,而不是PGA中

前台进程

用户进程

用户进程是指那些能够产生或执行SQL语句的应用程序,无论是SQL*Plus,还是其他应用程序,只要是能生成或执行SQL语句,都被称作用户进程。

服务器进程

服务进程就是用于处理用户会话过程中向数据库实例发出的SQL语句或SQL*Plus命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值