数据库结构算法
每个运行的Oracle 数据库都与一个Oracle 实例关联。在数据库服务器上启动数据库后,Oracle 软件会分配一个称为系统全局区(SGA) 的共享内存区,还会启动若干个Oracle 后台进程。这种由SGA 和Oracle 进程组成的组合就称为一个Oracle 实例。
启动实例后,Oracle 软件会将实例与特定的数据库关联。这个过程称为装载数据库。而后可打开数据库,使得受权用户可访问数据库。在同一台计算机上能够并发执行多个实例,每个实例只访问它本身的物理数据库。
您能够将Oracle 数据库体系结构看做各类不一样的、相互关联的结构化组件。
Oracle 数据库使用内存结构和进程来管理、访问数据库。全部内存结构都存在于构成数据库服务器的计算机的主存中。进程指的是在这些计算机内存中运行的做业。进程被定义为“控制线程”或操做系统中能够运行一系列步骤的一种机制。 数据库
Oracle 内存结构缓存
与Oracle 实例关联的基本内存结构包括:
• 系统全局区(SGA):由全部服务器进程和后台进程共享
• 程序全局区(PGA):专用于每个服务器进程或后台进程。每个进程使用一个PGA
SGA 是包含实例的数据和控制信息的内存区。
SGA 包含如下数据结构:
• 数据库缓冲区高速缓存:缓存从数据库检索的数据块
• 重作日志缓冲区:高速缓存重作信息(用于实例恢复),直到能够将其写入磁盘中存储的物理重作日志文件
• 共享池:缓存可在用户间共享的各个结构
• 大型池:是一个可选区域,可为某些大型进程(如Oracle 备份和恢复操做、I/O 服务器进程)提供大量内存分配
• Java 池:用于Java 虚拟机(JVM) 中全部特定会话的Java 代码和数据
• Streams 池:由Oracle Streams 使用
经过使用Enterprise Manager 或SQL*Plus 启动实例,能够显示为SGA 分配的内存量。服务器
程序全局区(PGA) 是包含每个服务器进程的数据及控制信息的内存区。Oracle 服务器进程为客户机的请求提供服务。每个服务器进程都有本身专用的PGA,这个PGA 是在服务器进程启动时建立的。由该服务器进程独占对PGA 的访问,PGA 只由对它自身执行操做Oracle 代码读写。
使用动态SGA 基础结构时,能够在不关闭实例的状况下更改数据库缓冲区高速缓存、共享池、大型池和Java 池和Streams 池的大小。
Oracle 数据库使用初始化参数建立并配置内存结构。例如,SGA_TARGET参数用于指定
SGA 可用的总空间量。若是SGA_TARGET设置为0,则会禁用“自动共享内存管理”。数据结构
进程结构并发
调用应用程序或Oracle 工具时,如调用Enterprise Manager 时,Oracle 服务器会经过建立服务器进程来执行应用程序发出的命令。Oracle 服务器还会针对一个实例建立一组后台进程。这些进程不只彼此进行交互操做,还与操做系统进行交互操做,这样能够管理内存结构,经过异步执行I/O 操做将数据写入磁盘,并且还能够执行其它所需的任务。存在哪些后台进程取决于数据库中当前使用的功能。异步
Oracle 实例管理工具
Oracle 数据库服务器由Oracle 数据库和Oracle 实例组成。Oracle 实例由称为系统全局区(SGA) 的内存结构和后台进程构成,这些后台进程能够处理实例运行中涉及的大量后台任务。如下是最多见的后台进程:
• 系统监视器(SMON):出现故障后启动实例时执行崩溃恢复任务
• 进程监视器(PMON):用户进程失败时执行进程清理任务
• 数据库写进程(DBWn):将修改后的块从数据库缓冲区高速缓存写入磁盘中的数据
文件
• 检查点(CKPT):经过更新数据库的全部数据文件和控制文件指出最新的检查点
• 日志写进程(LGWR):将重作日志条目写入磁盘
• 归档进程(ARCn):发生日志切换时将重作日志文件复制到归档存储器spa
服务器进程和数据库缓冲区高速缓存操作系统
处理某个查询时,Oracle 服务器进程会在数据库缓冲区高速缓存中查找它所需的全部数据块。若是未在数据库缓冲区高速缓存中找到数据块,服务器进程会从数据文件中读取数据块,并在数据库缓冲区高速缓存中添加一个副本。由于关于同一数据块的后续请求可能会在内存中找到该数据块,所以,这些请求可能不须要进行物理读操做。Oracle 服务器使用最近用过的算法腾出最近未访问的缓冲区,以便在数据库缓冲区高速缓存中为新数据块提供空间。
缓冲区高速缓存中的缓冲区可能处于如下四种状态之一:
• 已链接:可防止多个会话同时对同一数据块进行写操做。此时,其它会话正等待访问该块。
• 干净:缓冲区现已解除链接,若是没有再次引用当前内容(数据块),该缓冲区是能够当即腾出的候选项。此时,不是缓冲区的内容已与磁盘中存储的数据块内容同步,就是缓冲区中包含块的一致读取(CR) 快照。
• 空闲或未使用:实例刚刚启动,缓冲区为空。此状态与“干净”状态很是类似,不一样之处在于缓冲区还没有使用。
• 灰数据:缓冲区再也不处于已链接状态,可是内容(数据块)已更改,DBWn必须先将内容刷新到磁盘,才能腾出缓冲区。
物理数据库结构
构成Oracle 数据库的文件可分为如下几类:
• 控制文件:包含关于数据库自己的数据(即物理数据库结构信息)。这些文件对数据库而言相当重要。没有这些文件,就没法打开用于访问数据库数据的数据文件。
• 数据文件:包含数据库中的用户数据或应用程序数据。
• 联机重作日志文件:用于进行数据库实例恢复。若是数据库已崩溃但未丢失任何数据文件,那么使用这些文件中的信息能够经过实例恢复数据库。
要成功运行数据库,如下附加文件很是重要:
• 参数文件:用于定义启动实例时如何配置实例。
• 口令文件:用于将用户远程链接到数据库后执行管理任务。
• 备份文件:用于数据库恢复。当因为出现介质故障或因为用户错误而损坏或删除了原始文件时,一般须要还原备份文件。
• 归档日志文件:包含实例生成的数据更改(重作操做)的实时历史记录。使用这些文件和数据库备份能够恢复丢失的数据文件。也就是说,使用归档日志能够恢复还原的数据文件。
• 跟踪文件:每个服务器和后台进程均可以对关联的跟踪文件进行写操做。若是在进程中检测到内部错误,进程就会将关于错误的信息转储到进程的跟踪文件。写入跟踪文件的某些信息专门供数据库管理员使用,另外一些信息则供Oracle 支持服务部门使用。
• 预警日志文件:这些是特殊的跟踪文件,又称为预警日志。数据库预警日志是按时间顺序列出的消息日志和错误日志。Oracle 建议您查看这些文件。
表空间和数据文件
一个数据库可划分为多个逻辑存储单元,这些单元称为表空间,表空间可用于对相关逻辑结构进行分组。每个数据库都按逻辑方式划分为一个或多个表空间。能够为每个表空间显式建立一个或多个数据文件,这样可在表空间中按物理方式存储全部逻辑结构的数据。
注:还能够建立大文件表空间,这种表空间只有一个数据文件,但这个数据文件很是大(最多可包含40 亿个数据块)。传统的小文件表空间(默认值)能够包含多个数据文件,但这些文件不可能这么大。有关大文件表空间的详细信息,请参阅《数据库管理员指南》。
SYSTEM和SYSAUX表空间
每个Oracle 数据库都包含SYSTEM表空间和SYSAUX表空间。这两个表空间是在建立数据库时建立的。系统默认值是建立小文件表空间。也能够建立大文件表空间,这样可经过Oracle 数据库管理超大文件(最大为8 EB)。
表空间的状态能够是联机(可访问)或脱机(不可访问)。打开数据库时SYSTEM表空间始终处于联机状态。这个表空间可存储支持数据库核心功能的表,如数据字典表。
SYSAUX表空间是SYSTEM表空间的辅助表空间。SYSAUX表空间可存储许多的数据库组件,要使全部数据库组件正常运行,该表空间必须处于联机状态。
段、区和块
数据库对象(如表和索引)以段形式存储在表空间中。每一个段包含一个或多个区。区由相邻的数据块组成,这意味着每个区只能够存在于一个数据文件中。数据块是数据库中最小的I/O 单元。
数据库从操做系统(OS) 请求数据块集时,OS 会将数据块集映射到存储设备上的实际文件系统或磁盘块。所以,您没必要了解数据库中任何数据的物理地址。这还意味着一个数据文件能够条带化或镜像在多个磁盘上。
能够在建立数据库时设置数据块的大小。对大多数数据库而言,默认的8 KB 块大小是足够的。当数据库支持拥有大型表和索引的数据仓库应用程序时,最好设置更大的块大小。
当数据库支持执行随机读写的事务处理应用程序时,最好指定更小的块大小。块大小的最大值取决于OS。最小的Oracle 块大小为2 KB,这个值不多使用(在任什么时候候)。
表空间能够有不一样的块大小。可是,这只适用于可移动表空间。有关详细信息,请参阅《数据库管理员指南》。
逻辑和物理数据库结构
Oracle 数据库是按单元处理的数据的集合。数据库的通常用途是存储和检索相关信息。数据库具备逻辑结构和物理结构。
表空间
数据库被分为多个逻辑存储单元,这些单元称为表空间,表空间能够将相关的逻辑结构分组在一块儿。例如,为了简化某些管理操做,表空间一般用于将应用程序的全部对象分组。此时,对应用程序数据可使用一个表空间,对应用程序索引可使用另外一个表空间。
数据库、表空间和数据文件
在幻灯片中会演示数据库、表空间和数据文件之间的关系。每个数据库按逻辑方式划分为一个或多个表空间。能够为每一个表空间显式建立一个或多个数据文件,这样可在表空间中按物理方式存储全部逻辑结构的数据。若是它是TEMPORARY表空间而不是数据文件,则这个表空间拥有一个临时文件。
方案
方案是数据库用户拥有的数据库对象的集合。方案对象是直接引用数据库数据的逻辑结构。方案对象包括诸如表、视图、序列、存储过程、同义词、索引、集群和数据库连接这样的结构。通常而言,方案对象包括应用程序在数据库中建立的任何内容。
数据块
Oracle 数据库的数据以最细的粒度级存储在数据块中。一个数据块对应于磁盘上特定字节数的物理数据库空间。每一个表空间的数据块大小是在建立表空间时指定的。数据库可使用和分Oracle 数据块中的空闲数据库空间。
区
块的上一级逻辑数据库空间称为区。区是特定数目的相邻数据块(在一次分配中获取的),用于存储特定类型的信息。
段
区之上的逻辑数据库存储级别称为段。段表明为特定逻辑结构分配的区集。例如,各类类型的段包括:
• 数据段:每个非集群、非索引的组织表都有一个数据段。该表的全部数据都存储在表数据段的区中。对于分区表,每个分区都有一个数据段。每个集群都有一个数据段。集群中每一个表的数据都存储在集群的数据段中。
• 索引段:每个索引都有一个索引段,用于存储索引的全部数据。对于已分区索引,每个分区都有一个索引段。
• 还原段:数据库管理员会建立一个UNDO表空间,用于临时存储还原信息。还原段中的信息用于生成一致读取信息,在数据库恢复过程当中,还可用于回退用户的未提交事务。
• 临时段:当SQL 语句须要一个临时工做区来完成执行时,Oracle 数据库会建立临时段。语句结束执行后,临时段的区会返回到实例,以便供未来使用。请为每一个用户指定一个默认临时表空间,或指定一个在数据库级别使用的默认临时表空间。
Oracle 数据库可动态分配空间。若是段的现有区已满,则会添加更多的区。因为区是按需分配的,所以,段的区在磁盘上不必定是相邻的。
数据库体系结构:结构化组件概要