Oracle数据库体系结构(Oracle Database Architecture
)
结合第四大章和第五大章,个人认为这是非常重要的章节,值得反复的研读。什么都不说,先上图:
这是一张值的每天都去看一眼的图,就像武林秘籍中的总纲,把Oracle数据库的精髓都已包含在内。要掌握Oracle Database,首先要理解两个基本概念:数据库和实例。
■ 数据库
所谓数据库就是磁盘上一系列文件的集合,主要包括数据文件、在线日志、控制文件等。
■ 数据库实例
所谓数据库实例就是内存中的程序映像,用来管理数据库。其中最主要的一块内存区域叫做SGA(System Global Area)和一系列后台进程。
数据库和实例是互不依赖的,它们可以分别单独存在。
数据库的存储结构
物理存储结构
■ 数据文件(Data files)
每个数据库包含一个或多个数据文件,这是真正存储数据的地方,像表、索引等数据都是存储在数据文件里。
■ 控制文件(Control files)
控制文件存储了数据库的元数据,包括数据库名、创建时间、数据文件路径、重做日志路径、当前重做日志的序号、检查点信息等等。由于控制文件很重要,因此控制文件可以有多份拷贝。
■ 在线重做日志文件(Online redo log files)
在线重做日志是由2个或更多的文件组成的,用来记录数据库中的所有变更,以重做记录(redo entries,或者redo log records)的形式记录到文件中。
当然,除了以上3类主要的文件外,数据库还包含其它也很重要的文件,如参数文件(parameter file),归档日志文件(archived redo log file)、备份文件(backup files)等。
逻辑存储结构
■ 块(Data blocks)
块是Oracle数据库的最小分配单元,一个块对应特定的字节,默认是8K。
■ 区(Extents)
区是多个逻辑上连续的块组成的存储区域。
■ 段(Segments)
段是多个区组成的存储区域,数据库创建对象(user objects)后就会为其分配相应的段,如表、索引等。
■ 表空间(Tablespaces)
一个数据库就是由多个表空间组成的,一个表空间可以包含1个或多个数据文件。
简单点说,多个物理存储区(如扇区)组织成块,块再组织成区,区再组织成段,段再组织成表空间,表空间由1个或多个数据文件组成,通过这样的设计来达到高效、灵活的存储管理的目的。
实例结构
数据库进程
■ 客户端进程(Client processes)
如应用程序,SQL*Plus等,通常运行在单独的客服机上。
■ 后台进程(Background processes)
用来完成各种维护工作,如脏数据写入磁盘、写重做日志、清理异常终止的进程等等。
■ 服务器进程(Server processes)
和客户端进程进行交互,完成客户端的请求。
内存结构
Oracle数据库实例的内存区域主要分为两大块:
■ SGA(System Global Area)
SGA是数据库实例最大的一块内存区域,包含数据库的数据(缓存)和控制信息。SGA由众多的组件构成,如数据缓存(buffer cache),共享池(share pool)等,12.1.0.2以后,还可以包含内存列存储(In-Memory Column Store)。
■ PGA(Program Global Areas)
是一个进程专享的内存区域,其它进程不能访问。后台进程也有PGA,由于后台进程的PGA一般都很小,所以我们讲PGA时,通常指的是服务器进程的PGA。
应用和网络架构
应用架构
支持两种常见的应用架构:
C/S架构(client/server architecture)
多层架构(multitier architecture)
网络结构
应用程序或者其它客户端通过Oracle Net Service来与Oracle数据库进行交互。Oracle Net Service包含两大组件:
■ Oracle Net
创建客户端和数据库间的会话,会话创建后提供客户端和数据库之间的数据交换。
■ Oracle Net Listener
监听并分配连接请求,当连接创建后,就没它什么事了。
Oracle网络服务方式有专用服务器连接和共享服务器连接两种。
多租户架构
Oracle 12c引入的一个很重要的新特性是多租户,关于多租户我们后续详细讨论。