Oracle 官方文档中对体系架构的描述包括这四个部分:

  • 数据库和实例 database and instance
  • 数据库存储结构 database storage structures
  • 数据库实例结构 database instance structures
  • 应用和网络架构 application and networking architecture

数据库存储结构和实例结构要画重点,不管是多租户架构还是传统架构,都是建立在存储结构和实例结构之上。

文档地址:
1 Introduction To Oracle Database: Oracle Database Architecture


数据库服务器是信息管理系统的关键。
总的来说,一个服务器需要可靠的管理多用户环境下大量的数据,这样用户才能并发的访问相同的数据。一个数据库服务器还可以阻止未授权的访问为故障恢复提供高效的解决方案


数据库和实例

一个Oracle数据库服务器包括了一个数据库和至少一个数据库实例。由于实例和数据库是一体的,有时候Oracle数据库这个称呼包括了实例和数据库。严格的说法是:

  • 数据库
    数据库是一系列文件的集合,这些文件保存在磁盘上,数据保存在这些文件里。数据文件可以独立于数据库实例而存在。从Oracle21c开始,数据库特别指代CDB( multitenant container database),PDB(pluggable database)或者应用容器(application container)中的数据文件
  • 数据库实例
    实例是管理数据文件的内存结构集合的名称。一个数据库实例包含了共享内存区,又叫做系统全局区(SGA),和一系列的后台进程。 数据库实例可以独立于数据文件而存在

多租户架构和分片架构解释的不怎么样,有更好的翻译再改。

多租户架构 Multitenant Architecture
多租户架构使Oracle数据库成为CDB。
每个Oracle数据库必须包含或者被包含另外一个数据库。举个例子,一个CDB包含很多个PDB,一个应用容器包含很多应用PDB,一个PDB包含于CDB或者应用容器,一个应用容器包含在CDB中。
从Oracle21c开始,多租户架构是唯一支持的架构。在以前的发行版本中,Oracle 还支持非CDB数据库。

  • CDBs
    一个CDB包含了一个或多个用户创建的PDB和应用容器。
    在物理层面,CDB是一系列的文件:控制文件,在线重做日志文件和数据文件。数据库实例管理这些文件,从而构成了CDB。
    如下图所示,一个CDB和关联数据库实例的结构:

  • PDBs
    PDB是模式,模式对象和非模式对象的可移动集合,在应用端展示为一个独立的数据库。
    在物理层面,每个PDB有自己的数据文件。CDB包含所有的PDB数据文件,PDB只包含各自的数据文件。此外,CDB还包含系统数据文件,这些文件保存了CDB的元数据信息。
    可以通过拔出PDB来移动或者归档PDB。一个拔出的PDB包含了PDB的数据文件和元数据文件。一个拔出的PDB是不可用的,除非插入到CDB里。
    下图展示了一个叫做MYCDB的CDB:

  • 应用容器 Application Containers
    应用容器是可选的,用户创建的基于CDB的容器,用于保存一个或多个应用的数据和元数据。
    在这里,一个应用(也叫做主应用定义)是命名的,有版本的数据和元数据集合,这些数据保存在应用root下。举个例子,类似于PDB,应用可以包括表、视图、用户账号、PLSQL程序包的定义信息。
    此外,一个应用容器可以作为特定应用的CDB存储在CDB中。应用容器,比如CDB自身,可以包含多个应用PDB,并且这些PDB之间可以共享元数据和数据。在物理层面,应用容器有自己的数据文件,就像PDB。
    举个例子,SaaS可以使用多个应用PDB部署,每个对应一个用户,但是这些用户共享应用元数据和数据。
    另外,如下图所示,sales_app是归属应用root 的应用模型。在应用PDB中, cust1_pdb只包括属于客户1的销售数据,cust2_pdb只包括属于客户2的销售数据。插入,拔出,克隆和其他PDB级别的操作对于单个客户PDB都是可以进行的。

分片架构 Sharding Architecture
Oracle分片是基于跨多个PDB的水平数据分区的数据库扩展技术。应用视角中PDB池是一个逻辑数据库。
OLTP应用分片的主要好处是线性扩展性,容错机制,地理数据分布。分片非常合适部署在Oracle云中。与实施分片的NoSQL数据存储不同,Oracle分片在不牺牲企业RDBMS的情况下提供分片的好处。
在分片架构中,每个CDB都部署在单独的服务器中且有自己的本地资源,如CPU,内存,闪存或磁盘。可以指定PDB分片。不同于CDB,PDB分片由单个逻辑数据库组成,这叫做分片数据库。不能够把相同的分片数据库放在同一个CDB中。然而,在同一个CDB中,一个PDB可以在一个分片数据库中,另一个PDB可以在另一个分片数据库中。
水平分区包括跨分片切分数据库,所以每个分片包含了相同表的相同列,但是有不同的行集。一张用这种方式切分的表叫做分片表。如下图所示,一张分片表水平切分成三片,每一片都位于一个CDB的不同PDB。

一个使用场景就是跨多个CDB分发用户账号数据。举个例子,用户ID为28459361 准备查询自己的数据。如下图展示了可能的架构。用户请求首先路由到连接池,连接池(网络监听器)定向请求到合适的PDB分片,这个PDB分片包括了那个客户的所有数据。


数据库存储结构

数据库存储可以从物理结构和逻辑结构两个角度去理解。

物理结构是在操作系统层面可以看到的。举个例子,操作系统如linux,可以使用ls和ps命令查看数据库文件和数据库进程。一个SQL语句可以在Oracle数据库中列出库里所有的表,但是操作系统无法这样查看数据库的表。

数据库存储结构包括物理结构和逻辑结构。由于物理结构和逻辑结构是独立的,管理物理结构的时候并不影响管理逻辑结构。举个例子,重命名数据文件(物理结构)的时候并不会对保存在这数据文件中的表(逻辑结构)重命名。

  • 物理结构。数据库的物理结构就是存储数据的文件。执行 CREATE DATABASE命令的时候,一个CDB被创建了。如下的物理文件被创建了:

    • 数据文件 data files
      每一个CDB都至少包含一个数据文件,这个数据文件保存了所有的数据库数据。数据库的逻辑结构,比如表和索引,都存放在这个数据文件中。
    • 控制文件 control files
      每一个CDB都有一个控制文件。控制文件包含数据库的元数据信息,元数据信息描述了数据库的物理结构,包括数据库名称和数据文件的名称及路径。
    • 在线重做日志文件 online redo files
      每一个CDB都有在线重做日志,这是两个或更多在线重做日志文件的组合。一个在线重做日志文件由重做条目(也焦作重做日志记录)组成,记录了所有对数据的变更操作。

当在CDB中执行 CREAE PLUGGABLE DATABASE命令的时候,就创建了一个PDB。不同于CDB,PDB只包含专用数据文件集。PDB没有专用控制文件和在线重做日志文件,这些文件是在CDB中的所有PDB共享的。
CDB中其他具有重要功能的文件包括:参数文件和网络文件。备份和恢复功能需要的文件是备份文件和归档重做日志文件。

  • 逻辑结构。逻辑结构使Oralce能够对磁盘空间进行细粒度的控制。有如下结构:

    • 数据块
      Oracle数据库的数据最小的存储逻辑单元是数据块。数据块对应磁盘上特定数量的字节。

    • 区是逻辑上连续的数据块,用于存储特定类型的信息。

    • 段是用户对象(比如表或者索引)、撤销数据、临时数据所在区的集合。
    • 表空间
      数据库被切分成叫做表空间的逻辑存储单元。表空间是段的逻辑容器。每个表空间至少包含一个数据文件。

数据库实例结构

Oracle数据库使用内存结构和进程管理和访问CDB。所有的内存结构在构成RDBMS的计算机的主内存中。
当应用程序连接到CDB或者PDB的时候,应用程序连接的是数据库实例。数据库实例通过分配内存区和启动进程来服务应用程序,内存区包括除了SGA之外的其他内存区,进程包括除了后台进程之外的其他进程。

Oracle 数据库进程
进程process是操作系统运行一系列程序步骤的机制。一些操作系统使用job,task或者thread来描述进程。

在这里,thread等同于process。Oracle 数据库实例包含如下进程:

  • 客户端进程
    应用程序或者Oracle工具创建和维护这些进程,用于运行软件代码。大多数环境下,每台计算机有独立的客户端进程。
  • 后台进程
    后台进程整合了为每个客户端提供功能的Oracle数据库程序。后台进程异步执行IO和监控其他Oracle数据库的进程,以提高数据库的并行度、性能和可靠性。
  • 服务端进程
    服务端进程用于和客户端进行通信,并和数据库交互以满足客户端的需求。

Oracle进程包括服务端进程和后台进程。在大多数环境下,Oralce进程和客户端进程运行在独立的计算机中。

数据库实例内存结构
Oracle 数据库为程序代码、多用户共享的数据、每个连接用户的私有数据区创建和使用内存结构。

数据库实例包含如下内存结构:

  • 系统全局区(SGA)
    在数据库实例中,SGA是一组包含数据和控制信息的共享内存结构。 SGA的组件包括数据库高速缓存区,共享SQL区等。SGA可以包含内存列式存储区,用于在内存中以列式存储填充数据。
  • 程序全局区(PGA)
    PGA是服务器或者后台进程中包含数据和控制信息的内存区。访问PGA的进程是独立于其他进程的。每个服务器进程或者后台进程有各自的PGA。

应用和网络架构

为了完全利用现有计算机系统和网络的优势,Oracle数据库使进程结构在数据库服务器和客户端程序之间分离开来。运行RDBMS的计算机处理数据库服务器的功能,运行应用程序的计算机处理数据的交互和展示。

应用架构
应用架构是数据库应用连接到Oracle 服务器的计算环境。最常见的是C/S(客户端/服务端)架构和多层架构。

  • C/S架构
    在C/S架构中,客户端应用程序初始化数据操作请求到数据库服务器。服务器运行Oracle数据库软件并处理并发、共享访问数据的功能。服务端接收和处理客户端发起的请求。
  • 多层架构
    在多层架构中,一个或多个应用服务器处理不同的操作功能。一个应用服务器包含了很大一部分的应用逻辑,提供数据访问连接给客户端,并处理查询请求。通过这种方式,可以降低数据库的负载。应用服务器可以作为客户端和多台数据库之间的接口,提供额外的安全等级。
    面向服务架构(SOA)是多层架构的一种,应用功能封装在服务里。SOA服务通常作为Web服务实现。Web服务通过HTTP访问,基于XML的标准语言(例如WSDL,SOAP)。Oracle数据库在传统多层架构中或者SOA环境中可以作为Web服务。
    简单Oracle文件访问(SODA)是SOA的一种形式,这种形式可以访问存储在数据库中的数据。SODA是设计成无模式应用开发环境,不需要非常了解关系数据库特征或语言,比如SQL和PLSQL。你可以在Oracle数据库中创建和存储文件集,检索和查询文件及,而不需要知道这些文件集是怎么保存的。SODA for REST使用REST(representational state transfer)架构风格来实现。

Oracle网络服务架构
Oracle网络服务是数据库和网络通信协议之间的接口,用于分布式进程和数据库。
通信协议定义了数据在网络上是怎么被传输和接收的。Oracle网络服务支持主流网络通信协议,包括TCP/IP,HTTP,FTP和WebDAV。
OracleNet,Oracle网络服务的一个组件,建立和维护客户应用成和和数据库服务之间的网络会话。网络会话建立之后,Oracle Net扮演了客户端和数据库服务器之间的数据载体,交换两者之间的信息。基于在网络上的每台计算机都有部署,Oracle Net可以完成这些通信工作。
网络服务中一个重要的组件是OracleNetListener(简称监听器),运行在网络上的数据库的一个进程。客户端应用程序发送连接请求给监听器,监听器为数据库处理这些请求。当一个连接建立之后,客户端和数据库直接通信。

最常见的配置Oracle数据库服务客户端请求的方式是:

  • 专用服务架构
    每个客户端进程连接到专用服务进程。进程在客户端会话生命周期内是非共享的。每个新的会话都会分配一个专用服务进程。
  • 共享服务架构
    数据库使用连接池在多个会话里共享服务进程。客户端进程和分发器进行通信,分发器可以把许多客户端进程连接到一个数据库实例而不需要为每个客户端分发专用进程。

12c中多租户架构的描述

往前翻了一下12c,18c,19c的文档,最早的多租户架构是在12c中发布的。
Multitenant Architecture
从Oracle12c开始,多租户架构(the multitenant architecture)使得Oracle数据库可以作为多租户容器数据库(a multitenant container database (CDB))。

CDB是单独的物理数据库,可以包含0个,1个或者多个可插拔数据库(PDB)。PDB是模式,模式对象和非模式对象的可移动集合,在Oracle客户端中显示为非CDB数据库。非CDB数据库是不包含PDB的传统数据库。

从12c开始,创建数据库的时候必须指定CDB或者传统数据库。类似于USB接口,传统数据库可以作为PDB插入CDB中。把数据从PDB迁移到传统数据库中,需要使用Oracle 数据泵。
通过合并多台计算机上部署的多台物理独立数据库单台计算机上部署的单台物理数据库,多租户架构提供如下优点:

  • 降低硬件成本
  • 简单且快速的移动数据和代码
  • 简单管理和监控物理数据库
  • 数据和代码解耦
  • 独立PDB管理员(只管理名下的PDBs)和CDB管理员(管理整个CDB)的职责

非CDB架构示意图:包含hrdb和salesdb

整合成CBD架构示意图:单独的hrdb和salesdb变为hrpdb和salespdb

MYCDB在物理上是一个Oracle数据库,只有一个实例(在OracleRAC oracle ral application cluster 中可以有多个实例),也只有一组数据文件,跟传统数据数一样。
MYCDB包括两个PDB:hrpdb和salespdb。这些PDB只面向他们各自的应用程序,跟整合成CDB之前一样。管理CDB或者CDB里面的PDB,CDB管理员能够以root用户登录CDB,CDB中包括了所有PDB的模式,模式对象和非模式对象。
CDB和传统数据库有不同的架构,除非另行说明,这篇手册默认说明传统数据库架构。


19c中多租户架构优点的描述

Benefits of the Multitenant Architecture

多租户架构解决了一系列非CDB架构的传统数据库带来的问题。
大企业可能会使用上百甚至上千台数据库,这些数据库运行在不同的平台和物理服务器上。现代服务器可以负载比以前服务器能负载的更大的工作量。一个数据库可能只使用了服务器硬件的一部分资源。这样就会浪费硬件资源和人力资源。
通过整合在多台计算机上的多台物理数据库单台计算机上一个数据库,这种多租户架构有如下优点:

  • 降低硬件成本
  • 简单且快速的移动数据和代码
  • 简单管理和监控物理数据库
  • 数据和代码解耦
  • 独立PDB管理员(只管理名下的PDBs)和CDB管理员(管理整个CDB)的职责

管理优点如下:

  • 通过插拔PDB可以简便的升级数据和代码
  • 在PDB上开发后可以在插到CDB前进行简单的测试
  • 闪回单个PDB到之前的SCN版本
  • 在PDB的级别设置内存资源和IO限制
  • 通过应用程序容器可以安装、升级、管理主应用程序定义,应用程序容器是归属root的一堆PDB。

Oracle21c 官方文档:数据库概述之数据库体系架构相关推荐

  1. django官方文档——使用多个数据库

    使用多个数据库¶ New in Django 1.2: Please, see the release notes 大多数其他文档都假设使用单一数据库,本文主要讨论如何在 Django 中使用多个数据 ...

  2. CGAL 4.11 官方文档 软件包概述 ——胞腔复形与多面体类

    原文链接:https://doc.cgal.org/latest/Manual/packages.html 译文首发:http://blog.csdn.net/duzixi Cell Complexe ...

  3. javafx官方文档学习之二Scene体系学习一

    2019独角兽企业重金招聘Python工程师标准>>> 我的博文小站:http://www.xby1993.net,文章更新以博文小站为主,一般与oschina同步发布 原创文章,转 ...

  4. Floodlight官方文档(一):floodlight架构

    Architecture floodlight不仅仅是一个开放式流量控制器.泛光灯是一个开放式流量控制器("floodlight控制器")和一系列的应用程序建立在floodligh ...

  5. 基于docker安装部署Zabbix及使用,自动发现、日志监控报警及参照官方文档遇到的问题(图文)

    目录 一.相关原理 (1)概述 (2)Zabbix 功能 (3)Zabbix 概述 (4)zabbix监控架构详解 二.主要步骤 (一)工具/环境准备 (二)docker安装及测试 (三)docker ...

  6. Mybatis官方文档及使用简记

    Mybatis官方文档及使用简记 数据库建表 入门案例 无mapper类最传统的用法 使用mybatis generator 使用mybatis-generator mybatis-spring整合 ...

  7. 教你如何阅读Oracle数据库官方文档

    < Ask Oracle官方原创 > Oracle 官方文档 数量庞大,而且往往没有侧重点,让oracle新手看起来很费力.但是,仍有很多Oracle使用者认为任何oracle学习资料都比 ...

  8. ZooKeeper官方文档学习笔记01-zookeeper概述

    纠结了很久,我决定用官方文档学习 ZooKeeper概述 学习文档 学习计划 ZooKeeper:分布式应用程序的分布式协调服务 设计目标 数据模型和分层名称空间 节点和短命节点 有条件的更新和监视 ...

  9. Apache Storm 官方文档 —— Trident API 概述

    转载自并发编程网 – ifeve.com本文链接地址: Apache Storm 官方文档 -- Trident API 概述 窗口部分的内容是我自己翻译的 Trident 的核心数据模型是" ...

  10. 【多媒体编解码】Openmax IL (一)官方文档概述

    OpenMax IL 概述 PS:被博客主要是对官方文档前三章的学习于记录. 官网文档请移步: https://www.khronos.org/openmax/ Openmax 框架图: openma ...

最新文章

  1. 【数据结构】二叉树的应用。
  2. 安卓app 获取view的id_隐私保护问题不小 研究表示1325个安卓APP未经授权获取用户数据...
  3. python开方运算符_Pytorch Tensor基本数学运算详解
  4. js 点击侧边栏展示内容_上海SEO优化网站侧边栏一般添加什么内容
  5. 评价viper4android,ViPer4android. FX顶级音效!
  6. MAC使用homeBrew安装Redis
  7. Linux BASH多进程并行处理的方法实现
  8. Ambari集群里操作时典型权限问题put: `/home/bigdata/1.txt': No such file or directory的解决方案(图文详解)...
  9. runtime 的 assemblyIdentity 元素和bindingRedirect 元素
  10. 部署Extmail邮件服务器教程——适用于小白
  11. 被static修饰的map、list GC问题
  12. 如何高效率的学习Web前端,个人经验分享
  13. Python Django 添加首页尾页上一页下一页代码实例
  14. 利用java计算长方形的面积
  15. certbot泛域名证书申请
  16. 金蝶EAS开发 第一弹:了解开发工具与基本使用(上)
  17. html 转图片 wekit实现,HTML5和Webkit实现树叶飘落动画
  18. Docker Swarm学习教程【转载】
  19. 关于产品的一些思考——腾讯之手机安全管家
  20. JDO学习笔记之Sun JDO参考实现篇

热门文章

  1. ODL(C版本)安装过程
  2. [springboot 开发单体web shop] 1. 前言介绍和环境搭建
  3. 国内哪里培训python比较好-最好的Python培训机构是哪家?
  4. Python爬取某宝商品数据案例:100页的价格、购买人数等数据!
  5. 2021年10月世界编程语言排行
  6. 带省略号的比喻句_标点符号往往能引发人们的联想,例如:“省略号像一条漫长的人生道路,等着你去书写它留下的空白。”请以一种标点符号(省略号除外)为描述对象,写一个比喻句,形象地阐发某种生活道理。...
  7. 如何汇总100多个相同模板的电子表格
  8. ldc java_Jvm规范中的LDC_W指令问题?
  9. 【网络安全】威胁情报信息
  10. 【Clemetine】数据挖掘在风险分析中的应用