1.数据库和实例
Oracle 数据库服务器包括一个数据库和至少一个数据库实例 (通常是指只有一个实例)。 因为实例和数据库是如此的紧密关联,Oracle 数据库这个术语有时既指实例,也指数据库。以下已11gR2为例子说明数据库架构和各部分执行的功能
数据库:数据库是一组文件,位于磁盘,用于存储数据。 这些文件可以独立于数据库实例存在。
数据库实例:SGA+PGA+后台进程, 实例也可以独立于数据库文件而存在。
2.架构图
实例+数据库,对连接到实例的每个用户,其应用程序以一个客户端进程运行。 每个客户端进程都具与它自己的服务器进程相关联。
下面说明各部分的功能
3.数据库详解
(1)数据库结构
一个数据库可以从物理和逻辑这两个角度来考察。 物理数据是在操作系统级别可查看的数据。 例如,使用操作系统实用程序,如 Linux ls 和 ps,可以列出数据库文件和进程。
而像表这样的逻辑数据只在数据库层面有意义。 SQL 语句可以列出 Oracle 数据库中的表,但操作系统实用程序却不能。
数据库具有物理结构和逻辑结构。 因为物理结构和逻辑结构是分开的,因此对物理数据存储的管理,不会影响对逻辑存储结构的访问。 例如,重命名物理数据库文件并不会重命名表,尽管其数据存储在此文件中。
(2)数据库文件
数据库文件主要包括数据文件,控制文件,联机重做日志文件(对应虚线框内的文件)
其中也有数据库外的文件,比如归档日志文件和闪回文件,参数文件等等 (备份文件和归档重做日志文件是用于备份和恢复的重要的脱机文件。)
4.实例详解
SGA(System Global Area):由所有服务进程和后台进程共享;
PGA(Program Global Area):由每个服务进程、后台进程专有;每个进程都有一个PGA。
(1)SGA
包含实例的数据和控制信息,包含如下内存结构:
Database buffer cache:缓存了从磁盘上检索的数据块。
Redo log buffer:缓存了写到磁盘之前的重做信息。存放在线重做日志的缓存区,Redo log buffer以循环的方式写入,当redo log已经写到磁盘后,就可以被后续的日志数据覆盖
Shared pool:缓存了各用户间可共享的各种结构。比如编译过的sql语句和块信息,数据字典定义缓存,共享服务器模式会话信息
Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
Java pool:保存java虚拟机中特定会话的数据与java代码。
Streams pool:由Oracle streams使用。
Fixed SGA保存通用的数据库和实例状态信息
(2)PGA
每个服务进程私有的内存区域,包含如下结构:
Private SQL area:包含绑定信息、运行时的内存结构。每个发出sql语句的会话,都有一个private SQL area(私有SQL区)
Session memory:为保存会话中的变量以及其他与会话相关的信息,而分配的内存区。
(3)后台进程
为了实现为多用户提供服务且保证系统性能,在一个多进程 Oracle 系统( multiprocess Oracle system)中,存在多个被称为后台进程( background process)的 Oracle 进程。
一个 Oracle 实例中可以包含多种后台进程,这些进程不一定全部出现在实例中。系统中运行的后台进程数量众多,用户可以通过 V$BGPROCESS 视图查询关于后台进程的信息。
Oracle 实例中可能运行的后台进程有:
· 数据写入进程( DBWn)
· 日志写入进程( LGWR)
· 检查点进程( CKPT)
·系统监控进程( SMON)
· 进程监控进程( PMON)
· 恢复进程( RECO)
· 归档进程( ARCn)
· 其他后台进程