Oracle数据库体系结构介绍

一、关系型数据库基础知识

1. 数据模型

数据模型主要分为层次模型、网状模型、关系模型3种;

关系模型是目前使用最普遍的模型,是关系型数据库的理论基础;关系型数据库是建立在关系模型基础上的数据库;
关系模型以二维表来描述数据,每张表有多个字段列和记录行,每个字段列有固定的类型属性(如数字、字符、日期等类型);

在关系数据模型中,关系可以看成由行和列交叉组成的二维表格,包括如下内容:

1、元组——表中的行,可以用来标识实体集中的一个实体;表中任意两行不能相同。
2、 属性——表中的列,给每一列起个名称即为属性名,表中的属性名不能相同。
3、域——列的取值范围,同列具有相同的域,不同的列也可以有相同的域。
4、 主键或复合主键——能唯一标识表中不同行的属性或属性组(即多个属性的组合)。

2. 数据文件

二维表格中存储的数据信息,通常以物理文件的形式存储在磁盘上,这种物理文件称为数据文件;

3. 数据库管理系统(DBMS)

数据库管理系统(DBMS)是指用户与磁盘上的数据文件进行交互所使用的数据库软件;

二、Oracle体系结构

1. Oracle基本概述Oracle数据库系统中有3个重要概念:

1、实例(Instance)——一组Oracle后台进程以及在服务器中分配的共享内存区域
2、数据库(Database)——由基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等组成的物理文件集合;
3、数据库服务器(Database Server)——指安装了数据库管理系统的服务器,用于存储和管理数据;

实例用于管理和控制数据库;一个实例在其生存期内只能装载和打开一个数据库;数据库为实例提供数据;一个数据库可以被多个实例装载和打开;数据库的主要功能就是存储数据;

2. Oracle存储结构

Oracle存储结构分为逻辑存储结构和物理存储结构;

2.1. 逻辑存储结构

Oracle的逻辑存储结构是一种层次结构,主要由表空间、段、数据区和数据块等概念组成;

①数据块(data block) 是Oracle逻辑存储结构中最小的逻辑单位,也是执行数据库输入/输出操作的最小存储单位;
—通过v$parameter数据字典可查询Oracle标准数据块的大小:

select name,value from v$parameter where name = 'db_block_size' ;

数据块中可以存放表数据、索引数据和簇数据等,无论存放哪种类型的数据,其结构都是相同的,都由下面5部分组成:

块头:存放数据块的基本信息,如块的物理地址、块所属的段的类型。
表目录:存放表的相关信息。如果数据块中存储的数据是表数据,则表目录中存储有关这些表的相关信息;
行目录:如果块中有行数据存在,则这些行的信息将被记录在行目录中。这些信息包括行地址等;
空余空间:块中未使用的区域,用于新行的插入和已经存在的行的更新;
行数据:用于存放表数据和索引数据的地方;

块头、表目录、行目录这3部分组合起来称为头部信息区;头部信息区中不存放数据,而是存放整个块的引导信息,起到引导系统读取数据的作用;空余空间和行数据共同构成块的存储区,用于存放真正的数据记录;

②数据区(extent也可称作数据扩展区) 是由一组连续的Oracle数据块构成的Oracle存储结构,一个或多个数据块组成一个数据区,一个或多个数据区再组成一个段(segment);在Oracle数据库中,分配存储空间就是以数据区为单位;

③段(segment) 是由一个或多个数据区构成的,它不是存储空间的分配单位,而是一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的数据对象;一个段只属于一个特定的数据对象,每当创建一个具有独立段的数据对象时,Oracle就将为它创建一个段;
段又分为以下4种类型:

数据段:数据段中保存的是表中的数据记录
索引段:索引段中包含了用于提高系统性能的索引回滚段
回滚段(也可称作撤销段)中保存了回滚条目,Oracle将修改前的旧值保存在回滚条目中
临时段:当执行创建索引、查询等操作时,Oracle可能会使用一些临时存储空间,用于暂时性地保存解析过的查询语句以及在排序过程中产生的临时数据

④表空间: Oracle使用表空间(tablespace)将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段(即segment)等数据对象,任何数据对象在创建时都必须被指定存储在某个表空间中;表空间(属逻辑存储结构)与数据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间;所有的数据库对象都存放在指定的表空间中;主要存放的是表,所以称作表空间;Oracle数据的存储空间在逻辑上表现为表空间,而在物理上表现为数据文件;

Oracle默认创建的主要表空间:

SYSTEM表空间(系统表空间)——用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等;
–通过dict查看数据库中数据字典的信息:

select * from dict;

–通过v$fixed_view_definition查看数据库中内部系统表的信息

select * from v$fixed_view_definition;

SYSAUX表空间——充当SYSTEM的辅助表空间,降低了SYSTEM表空间的负荷,主要存储除数据字典以外的其他数据对象。SYSAUX表空间一般不存储用户的数据,由Oracle系统内部自动维护;
UODO表空间(撤销表空间)——用于存储撤销信息的表空间;当用户对数据表进行修改操作(包括插入、更新、删除等操作)时,Oracle系统自动使用撤销表空间来临时存储修改前的旧数据;
USERS表空间(用户表空间)——是Oracle建议用户使用的表空间,可以在这个表空间上创建各种数据对象。例如,创建表、索引、用户等数据对象。

2.2. 物理存储结构

物理存储结构用于展示Oracle在操作系统中的物理文件组成情况;
Oracle数据库的文件构成:
①数据文件(.DBF)——数据文件是一个二进制文件,用于保存用户应用程序数据和Oracle系统内部数据的文件,包括表、视图、索引等对象,每个数据库至少包含一个数据文件,也可以包含多个数据文件,Oracle在创建表空间的同时会创建数据文件;
–查询dba_data_files或v$datafile数据字典,来查看已创建的数据文件

select file_name,tablespace_name from dba_data_files;

–查询dba_temp_files或v$tempfile数据字典,查看临时文件的信息

select file_name,tablespace_name from dba_temp_files;

②控制文件(.CTL)——控制文件是一个二进制文件,记录数据库的名称、数据库的数据文件存放位置等信息,一个控制文件只能属于一个数据库,如果控制文件丢失,这个数据库就无法操作,控制文件是Oracle数据库的关键组件之一,用于维护数据库的物理结构,由Oracle自动维护和管理;
–查询v$controlfile数据字典,查看Oracle系统的控制文件信息

select name from v$controlfile;

③日志文件(.LOG)——Oracle日志文件是Oracle数据库存储信息的重要文件,主要用来存储数据库变化的操作信息。这些日志文件可以记录数据库的更改,并且可以用于数据库恢复;

–查询v$logfile视图了解Oracle系统的日志文件信息

select member from v$logfile;

两个主要的日志文件:

Redo log(重做日志)——存放数据库的更改信息;
Archivelog(归档日志)——存放redo log的历史备份;
–通过v$database视图查看当前Oracle系统是否采用归档模式

select dbid,name,log_mode from v$database;

上述查询语句中的log_mode有以下3种模式:

noarchivelog表示未开启归档模式;
archivelog表示开启自动归档模式;
manual表示开启手动归档模式;

④服务器参数文件(SPFILE)——服务器参数文件(server parameter file,SPFILE,即参数文件)是二进制文件,用来记录Oracle数据库的基本参数信息(如数据库名、控制文件所在路径、日志缓冲大小等);
–通过查询视图v$parameter查看服务器参数

select name,value,ismodified from v$parameter;

⑤密码文件、警告文件和跟踪文件密码文件是Oracle系统用于验证sysdba权限的二进制文件,当远程用户以sysdba或sysoper连接到数据库时,一般要用密码文件验证。警告文件(即警告日志文件)是一个存储在Oracle系统目录下的文本文件(名称通常为alert_orcl.log),它用来记录Oracle系统的运行信息和错误信息。

–在v$parameter视图中查看当前实例的警告文件的路径

select name, value from v$parameter where name = 'background_dump_dest';

注意:随着时间的推移,警告文件会越来越大,数据库管理员应该定期删除警告文件。跟踪文件包括后台进程跟踪文件和用户进程跟踪文件。后台进程跟踪文件用于记录后台进程的警告或错误消息。用户进程跟踪文件用于记载与用户进程相关的信息,它主要用于跟踪SQL语句。通过用户进程跟踪文件,可以判断SQL语句的执行性能。
–在v$parameter视图中查看当前实例用户跟踪文件的路径

select value from v$parameter where name = 'user_dump_dest';

3. Oracle服务器结构

Oracle服务器主要由实例、数据库、程序全局区(PGA)和前台进程组成;

3.1. 系统全局区

系统全局区(system global area,SGA)是所有用户进程共享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用。SGA主要由高速数据缓冲区、重做日志缓冲区、共享池、大型池和Java池等内存结构组成。SGA随着数据库实例的启动被加载到内存中,当数据库实例关闭时,SGA区域将会随之消失。

  • 高速数据缓冲区:存储着Oracle系统最近访问过的数据块(数据块在高速缓冲区中也可称为缓存块);Oracle把高速数据缓冲区分为以下3个部分:

    1. 脏数据区——脏数据区中存储着已被修改过的数据,这些数据等待被写入数据文件中。当一条更新或删除语句对某些数据块中的数据修改后,那么这些数据块就 被标记为“脏”,然后等待提交命令并通过后台进程DBWR将其写入数据文件中。
    2. 空闲区——空闲区中的数据块不包含任何数据,这些数据块可以被写入数据,Oracle可以从数据文件中读取数据块,并将其存储到该区中。
    3. 保留区——保留区包含那些正在被用户访问的数据块和明确保留以作为将来使用的数据块(即缓存块),这些数据块将被保留在缓冲区中。
  • 重做日志缓冲区:用于存储对数据库进行修改操作时所产生的日志信息,这些日志信息在写入重做日志文件中之前,首先存储到重做日志缓冲区中,然后当检查点发生或重做日志缓冲区中的信息量到达一定峰值时,由日志写入(LGWR)进程将此缓冲区的内容写入重做日志文件中。

  • 共享池:是SGA保留的内存区域,用于缓存SQL语句、PL/SQL语句、数据字典、资源锁、字符集以及其他控制结构等。共享池包含库高速缓冲区(library cache)和字典高速缓冲区(dictionary cache)。

    1. 库高速缓冲区是共享池的一部分,主要包括共享SQL区和私有SQL区两个组成部分。库高速缓冲区中存储最近用过的SQL语句、PL/SQL语句的文本和执行计划。
    2. 字典高速缓冲区用于存储Oracle系统内部管理所需要的数据字典信息,如用户名、数据对象和权限等。
  • 大型池:在SGA区中不是必需的内存结构,只有在某些特殊情况下,实例才需要使用大型池来减轻共享池的访问压力,常用的情况有以下几种:

    1. 当使用恢复管理器进行备份和恢复操作时,大型池将作为I/O缓冲区使用。
    2. 当使用I/O Slave仿真异步I/O功能时,大型池将被当作I/O缓冲区使用。执行具有大量排序操作的SQL语句。
    3. 当使用并行查询时,大型池将作为并行查询进程彼此交换信息的地方。
  • Java池:用来提供内存空间给Java虚拟机使用,目的是支持在数据库中运行Java程序包,其大小由java_pool_size参数决定。

  • Oracle流池:用于在数据库与数据库之间进行信息共享。

3.2. 程序全局区

程序全局区(program global area,PGA)又称作用户进程全局区,它的内存区在进程私有区中,而不是在共享区中。PGA是一个全局区,可以把代码、全局变量和数据结构都存储在其中,但区域内的资源并不像SGA一样可被所有的用户进程所共享,而是每个Oracle服务器进程都只拥有属于自己的那部分PGA资源。

在程序全局区中,一个服务进程只能访问属于它自己的那部分PGA资源区,各个服务进程的PGA的总和即为实例的PGA的大小。通常PGA由私有SQL区和会话区组成。

  • 私有SQL区用于存储变量以及SQL语句运行时的内存结构信息,每个用户连接到实例时,都会在实例中创建一个会话。
  • 会话区用于存储用户的会话信息(如登录用户名)。

3.3. 前台进程

前台进程包括用户进程和服务器进程,它不属于实例的一部分;

  • 用户进程是指那些能够产生或执行SQL语句的应用程序,无论是SQL* Plus,还是其他应用程序,只要是能生成或执行SQL语句,都被称作用户进程。
  • 服务器进程是用于处理用户会话过程中向数据库实例发出的SQL语句或SQL* Plus命令,它可以分为专用服务器模式和共享服务器模式。

3.4. 后台进程

Oracle后台进程是一组运行于Oracle服务器端的后台程序,是Oracle实例的重要组成部分。其中SMON、PMON、DBWR、LGWR和CKPT这5个后台进程必须正常启动,否则将导致数据库实例崩溃。

  • 数据写入(DBWR)进程主要任务是将内存中的“脏”数据块回写到数据文件中。所谓的“脏”数据块是指高速数据缓冲区中被修改过的数据块,这些数据块的内容与数据文件的数据块内容不一致。

  • 检查点(CKPT)进程可以被看作一个事件,当检查点事件发生时,CKPT会要求DBWR将某些“脏”数据块回写到数据文件中。

  • 日志写入(LGWR)进程用于将重做日志缓冲区中的数据写入日志文件中。当LGWR进程写满一个日志文件组而转向写另外一组时,称之为日志切换。

  • 归档(ARCH)进程是一个可选择的进程,只有当Oracle数据库处于归档模式时,该进程才可能起到作用。若Oracle数据库处于归档模式,当各个日志文件组都被写满,在即将被覆盖之前,先由ARCH把即将被覆盖的日志文件中的日志信息读出,然后再把这些“读出的日志信息”写入归档日志文件中;

  • 系统监控(SMON)进程是在数据库系统启动时执行回复工作的强制性进程。

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

  • 锁(LCKN)进程是一个可选进程,在并行服务器模式下可以出现多个锁定进程以利于数据库通信。

  • 恢复(RECO)进程是在分布式数据库模式下使用的一个可选进程,用于数据不一致时的恢复工作。

  • 调度(DNNN)进程是一个可选进程,在共享服务器模式下使用,可以启动多个调度进程。

  • 快照(SNPN)进程用于处理数据库快照的自动刷新,并通过DBMS_JOB包运行预定的数据库存储过程。

以上为Oracle中的若干个典型进程。Oracle的版本不同,其后台进程也不同,默认情况下Oracle会启动200多个后台进程。

–从v b g p r o c e s s 数据字典中查询当前实例的进程信息 s e l e c t n a m e , d e s c r i p t i o n f r o m v bgprocess数据字典中查询当前实例的进程信息 select name,description from v bgprocess数据字典中查询当前实例的进程信息selectname,descriptionfromvbgprocess;

4. 数据字典

数据字典是Oracle存储数据库内部信息的地方,描述了数据库内部的运行和管理情况。例如,一个数据表的所有者、创建时间、所属表空间、用户访问权限等信息都可以在数据字典中查找到。

4.1. Oracle数据字典简介

Oracle数据字典的名称由前缀和后缀组成,使用下画线 “_” 连接,其代表的含义如下:

dba_:包含数据库实例的所有对象信息。
v$:当前实例的动态视图,包含系统管理和系统优化等所使用的视图。
user
:记录用户的对象信息。
gv_:分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图。
all_:记录用户的对象信息及被授权访问的对象信息。

4.2. Oracle常用数据字典

基本数据字典
基本数据字典主要包括描述逻辑存储结构和物理存储结构的数据表,还包括一些描述其他数据对象信息的表,如dba_views、dba_triggers、dba_users等。

常用动态性能视图
Oracle系统内部提供了大量的动态性能视图,之所以说是“动态”,是因为这些视图的信息在数据库运行期间会不断地被更新。动态性能视图以v$作为名称前缀,这些视图提供了关于内存和磁盘的运行情况,用户只能进行只读访问而不能修改它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值