Oracle 数据库概述

常用的Oracle数据库版本

目前市场上用的比较多的是Oracle Database 10g/11g,以及Oracle database 12c。

Oracle Database 10g/11g

g代表网格。网格可以将许多独立的、模块化的硬件和软件组件连接在一起,并根据商业需求的变化而进行重组。

可以通过以下两个方面来区分网格计算和其他计算方式(如主机或客户机模式)【1】:

  • 虚拟:相互独立的资源按照类型组织在一个池中,供用户使用。这种方式打破了资源提供者和用户之间的硬编码联系,系统可以根据特定的需要自动准备资源,而用户不需要了解整个过程;
  • 提供:用户通过虚拟层申请资源,由系统来决定如何满足用户的特定需求,从而对系统进行整体的优化。

Oracle的网格计算能力主要体现在以下几个方面:

  1. 存储网格(Automatic Storage Management):oracle 11g 的自动存储管理(ASM)特性提供了数据库和存储之间的一个虚拟层,这样多个磁盘可以被看做是一个单独的磁盘组,在保证数据库在线的情况下,磁盘可以动态的加载或移除。
  2. 数据库网格(Real Application Clusters):oracle实时应用集群(RAC)可以使一个数据库运行在网格的多个节点上,将多个普通计算机的处理资源集中使用。Oracle在跨计算机分配工作负载的能力方面具有独特的灵活性,因为它是唯一不需要随工作进程一起对数据进行区分和分配的数据技术。
  3. 应用程序网格(Oracle Streams):Oracle Streams用于共享信息。共享信息的一个单元称为message。Stream将这些message从一个数据库发送到另一个数据库。
  4. 网格控制(Enterprise Manager Grid Control):Enterprise Manager 是一个系统管理软件,用于对Oracle IT infrastructure进行集中监控,并对其生命周期进行管理。这里,IT infrastructure不仅包括oracle数据库,WebLogic Server,以及在这些服务器上部署的web应用,还支持其他非oracle 的产品,包括 IBM WebSphere Application Server, Microsoft SQL Server, Juniper Networks NetScreen Firewall, 等等。

Oracle database 12c

c表示云计算:这是一个体系结构上的变化,即可插拔的数据库(PDB)。

12c.png

12c之前的体系架构

Oracle RDBMS(Relational databases Management system),又称为Oracle服务器。对于一个Oracle RDBMS来说,从静态角度看,即假设这个系统没有运行,我们所能看到的和这个数据库相关的无非就是几个基于操作系统的物理文件。从动态的角度来看,也就是说这个数据库系统运行起来了,能够对外提供服务了,那就意味着数据库系统启动了自己的一个实例。

从静态和动态的角度来看,Oracle服务器是由Oracle实例和Oracle数据库组成。并且,对于一个Oracle数据库,可以有多个实例(进程),这一点和包括DB2在内的其他数据库是不同的。

综上所述:
Oracle服务器 = 实例(动态) + 数据库(静态)

Oracle体系结构

上一节提到,Oracle服务器由动态的实例和静态的数据库构成,听起来比较抽象,具体来说实例主要维护了Oracle Server的内存池和后台进程,而数据库主要表现为一系列的文件,即:

  • 实例 = 内存池 + 后台进程
  • 数据库 = 数据文件 + 控制文件 +日志文件 + 。。。

Oracle服务器是如何为他们建立起体系以便对外部提供服务的呢?这里主要讨Oracle的体系结构。对于实例,主要是关注内存结构(对应内存池)和进程结构(对应后台进程)。对于数据库的各个文件,暂时将其统称为“数据库文件”,稍后将展开讨论,主要关注于存储结构。

oracle_infra.png

如图所示,Oracle体系 = 内存结构 + 进程结构 + 存储结构。

内存结构

SGA_PGA.png

Oracle数据库的内存结构主要包括两部分,SGA和PGA。

  • SGA(Shared Global Area):系统全局区,包括数据库缓冲区高速缓存,重做缓存区和各种池。是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信息。如果多个用户连接到同一个数据库实例,在实例的SGA中,数据可以被多个用户共享。当数据库实例启动时,SGA的内存被自动分配;当数据库实例关闭时,SGA内存被回收。
  • PGA:程序全局区,又称作private global area。数据库进程的内存,每个服务进程session都有一个PGA。
  • 缓冲区高速缓存(Buffer Cache):读数据后就会将数据放在缓冲区内高速缓存,节约了IO开销。目前很多系统的瓶颈就在IO,缓冲区高速缓存解决了这个问题。有四种状态:已连接(正在被使用),干净(完全相同),空闲(未使用),脏数据(内存中的数据被修改)。
  • 共享池:SQL编译后的执行计划缓存。共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域。
  • 重做日志缓冲区:业务执行完成后,日志可以记录下来,以便备份恢复。
  • Java池:主要用于Java语言开发,一般来说不低于20M。其大小由java_pool_size来确定,可以动态调整。
  • 大型池:Large Pool,用于数据库备份工具--恢复管理器(RMAN:Recovery Manager)。
  • 流池:在数据库中,管理员可以在 SGA 内配置一个被称为流池(Streams Pool)的内存池供 Oracle 数据流(Stream)分配内存。

SGA由Oracle实例维护。

进程结构

pro.png
  • 客户端进程:客户端进程由应用程序或Oracle工具创建维护,大多数环境中都由单独的计算机来运行客户端环境。在数据库用户请求连接到Oracle服务器时启动。
  • 服务器进程:服务器进程与客户端进程通信,可以连接到Oracle实例,它在用户建立会话时启动。
  • 后台进程:在启动Oracle实例时启动。整合了多种功能,以异步方式执行IO操作,并监控其他数据库进程,以提供更大的并行度,达到更好的性能和可靠性。

其中,后台进程由Oracle实例维护。

数据库的物理结构与内存结构之间的交互要通过后台进程来完成。数据库的后台进程包含两类,一类是必须的,一类是可选的:

  • 必须的后台进程:
    |--DBWn(Database Writer):数据库写入
    |--PMON(Process Moniter):进程监控
    |--LGWR(Log Writer):日志写入
    |--SMON(System Moniter):系统监控
    |--RECO(Recovery):恢复
    |--CKPT(Chekpoint):检查点
  • 可选的后台进程:
    |--ARCn(Archiver):归档
    |--LCKn(Lock):锁
    |--Dnnn(Dispatcher):调度
    |--......


    pro_db.png

    这里重点讨论DBWn,CKPT,LGWR,SMON和ARCn。

  • DBWn
    该进程将数据缓冲区(Database Buffer Cache)的数据写入数据文件(Data files),是负责数据缓冲区管理的一个后台进程。当数据缓冲区中的一数据被修改后,就标记为,DBWR进程将数据缓冲区中数据写入数据文件,保持数据缓冲区的干净。由于数据缓冲区的数据被用户修改并占用,空闲数据缓冲区会不断减少,当用户进程要从磁盘读取数据块到数据缓冲区却无法找到足够的空闲数据缓冲区时,DBWR将数据缓冲区内容写入磁盘,使用户进程总可以得到足够的空闲数据缓冲区。
    DBWn可以是多个,因为数据文件可能会很大,所以需要多个进程。
  • LGWR
    将日志数据从日志缓冲区写入磁盘日志文件组。数据库在运行时,如果对数据库进行修改则产生日志信息,日志信息首先产生于日志缓冲区(Redo Log Buffer)。当日志达到一定数量时,由LGWR将日志数据写入到日志文件组(Redo Log files),再经过日志切换,由归档进程(ARCn)将日志数据写入归档日志文件(前提是数据库运行在归档模式下)。数据库遵循写日志优先原则,即在写数据之前先写日志。
  • ARCn
    数据库运行在归档模式时,在日志切换之前,由ARCn进程将日志信息写入磁盘,也就是自动备份在线日志(Archived Log files)。
  • CKPT
    CKPT周期性的触发DBWn,默认情况下3秒钟一次,检查结果写入控制文件(Control files)。运行CKPT时,系统对全部数据文件(Data files)及控制文件(Control files)文件头的同步信号进行修改,以保证数据库的同步。
  • SMON
    在实例崩溃,实例启动时执行实例恢复,并负责在session断开时回收资源。


    pro_file_SGA.png

存储结构

可以从两个角度理解Oracle数据库的存储结构。

  1. 从逻辑结构上说,由大到小,可以分为数据库、表空间、段、区和数据块。
  2. 从物理结构上说,由大到小,可以分为物理文件(控制文件、数据文件、重做日志文件、参数文件、归档文件、备份文件、口令文件,预警和跟踪日志文件)和OS块。


    storage.JPG
  • 表空间vs数据文件
    一个表空间中包含一个或多个数据文件。
    一个数据文件仅归属于一个表空间。
  • 段、区和块
    段存在于表空间。
    段由区的集合构成。段是通过增加更多的区来变大的。一个段中的各个区可以分别在多个数据文件中。
    区是数据块的集合。一个区只能在一个数据文件中。
    数据块会映射到磁盘块。数据块是Oracle IO操作的最小单位,包含一行或多行数据。组成区的块是连续的。
  • 方案
    Schema,又称为database objects container, 是数据库对象(如tables,views,stored procedures等)的逻辑集合。对于一个大型的企业应用,最好针对不同的目的,使用不同的schema。比如,把HR相关的tables放在HR schema,账号相关的tables放在Accounting schema。一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。Schema是数据库对象的逻辑归属和分类,表空间是数据库对象的物理和实际存放位置【2】。
  • SYSTEM 和 SYSAUX 表空间
    SYSTEM 和 SYSAUX 表空间是必须存在的表空间。
    这些表空间必须是在创建数据库时创建的。
    这些表空间必须联机。
    SYSTEM表空间用于核心功能。(例如,数据字典)
    辅助的SYSAUX表空间用于附加的数据库组件(例如,Enterprise Manager Repository)。
    不要在SYSTEM 和 SYSAUX 表空间内建表。

【1】网格结构
【2】oracle数据库的逻辑构成(表空间,schema,user,段,区,块)

其他参考文档:
Oracle 11g体系结构
详解Oracle架构、原理、进程
Oracle数据库体系结构(内存结构和进程结构)
Oracle存储——逻辑结构

你可能感兴趣的:(Oracle 数据库概述)