第一部分 - 背景 - 5 - Oracle 的体系结构

Oracle 基于客户 - 服务器结构。Oracle 服务器由 数据库 (原始数据加上日志和控制文件)和 实例(服务器上负责存取数据库的进程和系统内存)组成。一个实例仅能与一个数据库相连。数据库由 逻辑结构物理结构 组成,逻辑结构如数据库模式,物理结构包括形成 Oracle 数据库的文件。

Oracle 的逻辑数据库结构

在逻辑层,Oracle 包含表空间模式数据块 以及 区间 / 段

表空间

一个 Oracle 数据库被划分为若干个逻辑存储单元,称为表空间(tablespace)。可以用表空间将相关的逻辑结构组织在一起。例如,表空间会把一个应用程序的所有对象组织在一起,以简化某些管理操作。

每个 Oracle 数据库都包含一个名为 SYSTEM 的表空间,它是在创建数据库时自动生成的。SYSTEM 表空间通常会包含整个数据库的系统目录表(在 Oracle 中,称为 数据字典)。一个小型数据库可能只需要一个 SYSTEM 表空间,但最好在创建一个表空间,用以与数据字典分开存放用户数据,从而减少字典对象和模式对象因同名数据文件带来的冲突。

一个创建表空间的语句:

CREATE TABLESPACE user_data
DATAFILE 'DATA3.ORA' SIZE 100K
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

然后可以通过如下语句将表与指定的表空间相连:

CREATE TABLE PropertyForRent (propertyNo VARCHAR2(5) NOT NULL, ...)
TABLESPACE user_data;

如果在创建新表时没有指定表空间,则会用到创建用户账户时与用户相连的默认空间。

用户、模式和模式对象

用户(有时称为用户名)是数据库中定义的一个名称,他可以连接或访问对象。模式 是模式对象的一个命名集合,如表、视图、索引、簇集和过程,它与特定的用户相连。模式和用户的概念有助于 DBA 管理数据库的安全。

为了对数据库进行存取,用户必须首先运行一个数据库应用程序(如 Oracle Forms 或 SQL*Plus),然后用数据库中已经定义的一个用户名来连接。在创建一个数据库用户时,将会相应地为该用户创建一个同名的模式。在默认状态下,一旦用户与数据库相连接,用户就可以对模式中的所有对象进行存取。因为用户只与同名模式相连,所以 “用户” 和 “模式” 这两个词可以互换(注意,表空间与模式之间不存在任何关系:在统一模式中的对象可以放在不同的表空间中,一个表空间也可以保存不同模式中的对象)。

数据块、区间和段

数据块 是 Oracle 可使用,或者说可分配的最小存储单元。一个数据块与物理磁盘空间中一定数量的字节相对应。可以在创建 Oracle 数据库时设置数据块的大小。数据块大小可以是操作系统中块大小的倍数(须在系统的最大操作范围内),这样可以避免不必要的 I/O 操作。数据块的结构如下:

  • 标题:包含块地址和段类型等一般信息。
  • 表目录:包含将数据放在此块的表的相关信息。
  • 行目录:包含该数据块中的行的相关信息。
  • 行数据:包含实际的表数据行。行可以跨块存放。
  • 空闲空间:分配给新插入的行或更新行时需要的额外空间。自 Oracle8i 以来,Oracle能自动管理空闲空间,尽管还有一个手动管理选项。

逻辑数据库空间的第二个层次称为 区间(extent)。区间是一定数量的连续数据块,用来存储某种特定类型的信息。区间之上的层次就是段。段是区间的集合,用来存储某个逻辑结构。例如,每个表的数据都存在他自己的数据段中,而每个索引的数据则存在它自己的索引段中。当某个段的现有的区间已满时,就由 Oracle 动态地分配新空间。因为区间是根据需要分配的,所以包含在段中的区间在磁盘上可能连续也可能不连续。

Oracle 数据块、区间和段之间的关系

Oracle 的物理数据库结构

Oracle中主要的物理数据库结构是数据文件、重做日志文件和控制文件。

数据文件

每个 Oracle 数据库都有一个或多个物理数据文件。逻辑数据库结构(如表和索引)中的数据是以数据文件这样的物理形式存储的。一个或多个数据文件形成一个表空间。最简单的 Oracle 数据库可能只有一个表空间和一个数据文件。更复杂的数据库可能会包含四个表空间,每个表空间中有两个数据文件,因此总共有八个数据文件。

重做日志文件

每个 Oracle 数据库都有一个由两个(或更多)重做日志文件所构成的集合,它记录了对数据进行的所有更改,其目的是便于以后的恢复。某个故障可能使得修改了的数据未能永久的写入数据文件,那么可从重做日志中获取这个修改,从而防止丢失工作。

控制文件

每个 Oracle 数据库都有一个控制文件,它包含了所有其他文件(这些文件都参与了数据库的组成)的一个列表,例如,数据文件和重做日志文件。为了更好地对数据进行保护,最好有多个控制文件(可以将多个副本写入多个设备中)。同样,最好也保存多个重做日志文件的副本。

Oracle 实例

Oracle 实例由 Oracle 进程和对数据库中的信息进行存取所需的共享内存组成,其中,Oracle 使用共享内存对数据和索引进行高速缓存,并对共享程序代码进行存储。共享内存可以划分为不同的内存结构,其中最基本的就是系统全局区(System Global Area, SGA)和程序全局区(Program Global Area,PGA)。

  • 系统全局区
    SGA 是共享内存的一片区域,用来存储某个 Oracle 实例的数据和控制信息在 Oracle 实例开始时分配 SGA,关闭时回收 SGA。SGA中的信息由下列内存结构组成,其中的每个结构都有固定的大小,并且都在实例启动时创建:

    • 数据库高速缓冲区
      它包含了数据库最近使用过的数据块。这些数据块可以是已修改但还没写入磁盘的数据(脏块),也可以是没被修改过的数据,还可以是修改后已写入磁盘的数据(干净块)。存储最近使用过的数据块可以使大多数活跃的数据缓冲在内存,从而减少I/O,提高系统的性能。

    • 共享池
      它包含了一些共享的内存结构,如库高速缓存(library cache)中的共享 SQL 区和数据字典中的内部信息。共享 SQL 区中包含 SQL 查询的分析树和执行规划。如果多个应用程序都用到了同一个 SQL 语句,那它们都能对共享 SQL 区进行存取,从而减少了所需的内存数量,也减少了查询处理所需的分析和执行时间。

    • 大池
      这是一片可选的内存区,用于大片内存分配(例如,缓冲恢复管理器(RMAN)的大量 I/O 内容)。

    • Java 池
      这片区域存储所有会话专有 Java 代码和 Java 虚拟机内的数据。

    • 流池
      这片区域用于存储缓冲的队列消息并为 Oracle 流提供内存。Oracle流使信息流(如数据库事件和数据库变化)能被管理并潜在的传播到其他的数据库。

    • 固定 SGA
      这是一个内部管理区,它包含各种各样的数据,如关于数据库状态和 Oracle 实例的信息,以及 Oracle 进程间通信的信息,比如锁信息等。

  • 程序全局区
    PGA 是共享内存的一片区域,用来存储一个 Oracle 进程的数据和控制信息。PGA 由 Oracle Database 在一个 Oracle 进程开启时创建。每个服务器进程和后台进程都有一个 PGA。其大小和内容由 Oracle 服务器的安装选项决定。

  • 客户进程
    每个客户进程都代表一个客户与 Oracle 服务器的一个连接(例如,使用 SQL*Plus 或是 Oracle Forms 应用程序)。客户进程操纵着用户输入、与 Oracle 服务进程的通信及显示客户所需的信息,如果需要,还可以将这些信息转换为更有效的形式。

  • Oracle 进程
    Oracle (服务器)进程根据客户需求执行相应功能。Oracle 进程可以分成两类:服务器进程(处理相连的用户进程所发出的请求)和后台进程(执行异步 I/O,并提供了更大并行性,从而提高了系统的性能和可靠性)。图中给出了如下的后台进程:

Oracle 体系结构
  • 数据库写回器(DBWR)
    DBWR 进程负责将已修改的(脏的)数据块从 SGA 高速缓存区写回到磁盘的数据文件中。一个 Oracle 实例至多有 10 个 DBWR 进程,从 DBW0 ~ DBW9 依次命名,用来处理多个数据文件的 I/O 。Oracle 采用了一种称为先写日志的技术,这就意味着,每当需要释放缓冲区时,DBWR 进程就会批量的执行写出,而不用等到事务的提交点。

  • 日志写回器(LGWR)
    LGWR 进程负责将日志从日志缓冲区写回到重做日志文件中。

  • 检查点(CKPT)
    检查点是一个事件,在这个事件中,所有已修改的数据库缓冲区都会由 DBWR 写回到数据文件中。CKPT 进程负责通知最近的检查点一致。CKPT 进程是可选的,如果将其省略,则由 LGWR 进程来完成它的工作。

  • 系统监视器(SMON)
    当实例从一个出错点重新开始时,由 SMON 进程负责对系统事故进行恢复。因系统崩溃而终止的事务的恢复也包括在内。SMON 还充当了数据库的磁盘碎片整理程序,它可以将数据文件中的空闲区间进行整合。

  • 进程监视器(PMON)
    PMON 进程负责跟踪对数据库进行存取的用户进程,并在系统崩溃后对其进行恢复。它将清除所有的一流资源(如内存),并释放由故障进程所加的锁。

  • 归档器(ARCH)
    当在线的重做日志文件被写满时,由 ARCH 进程负责将它们复制到归档器上。系统最多可设定10个 ARCH 进程,依次命名为 ARC0 ~ ARC9。其余的归档器进程可以在有读写指令时由 LWGR 启动。

  • 恢复器(RECO)
    RECO 进程负责清除出错的或者是挂起的分布事务。

  • 锁管理服务器(LMS)
    如果采用了 Oracle Real Application Cluster 选项,则由 LMS 进程负责实例间的加锁操作。

  • 闪回写和恢复写(FWRW)
    当设置闪回或遇到保证还原点,FWRW 进程将闪回数据写入闪回恢复区的闪回数据库日志。闪回工具使管理员和用户能回看和操纵单个 SQL 语句、段和服务的累加的统计数据。MMON 进程负责包括每小时收集一次统计信息并产生一个 AWR 快照在内的许多工作。

  • 易处理性监控 Lite(MMNL)
    这个进程负责将 SGA 中 Active Session History(ASH)缓冲区里的统计数据写入磁盘。当 ASH 满时 MMNL 写入磁盘。

在前面的描述中大多使用了 “进程” 这个词,目前一些系统会在实现中用线程取代进程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容