数据库结构
每一个运行的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):发生日志切换时将重做日志文件复制到归档存储器
服务器进程和数据库缓冲区高速缓存
处理某个查询时,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 数据库可动态分配空间。如果段的现有区已满,则会添加更多的区。由于区是按需分配的,因此,段的区在磁盘上不一定是相邻的。
数据库体系结构:结构化组件概要