今天开始了解Oracle体系结构想把每部分学习记录都写下来。第一次写博客,技术有限,错了谢谢大家指出来。

 

Oracle体系结构图:

 

图解服务器端网络架构pdf 服务器简图_图解服务器端网络架构pdf

                                                                                                          图1-1

    Oracle服务器是通常意义上的数据库和数据库管理系统(即Oracle软件)的统一体。

      Oracle服务器由Oracle数据库和Oracle实例组成,如图1-1所示。Oracle数据库是指Oracle保存数据的一系列物理结构和逻辑结构,主要由一系列操作系统文件组成。Oracle实例就是运行状态下的Oracle软件,主要由操作系统的内存结构和一些进程组成。在一般情况下一个Oracle服务器包含一个实例和一个与之对应的数据库,但在并行的服务结构中,一个数据库可以对应多个实例。

 

图解服务器端网络架构pdf 服务器简图_存储_02

                                                                    图1-2

1.1 Oracle数据库

    Oracle数据库是一个存储数据的容器,由一些操作系统文件组成,它的基本功能是存储数据库的全部数据,数据文件主要包括用户数据,控制数据以及操作信息等。数据库文件可分为数据文件,控制文件和重做日志文件三类。数据文件存储用户数据,控制文件保存Oracle初始化参数和用户口令,重做日志文件的用途是保存运用程序或用户对数据库所进行的修改操作信息,在数据库出现故障需要恢复时,Oracle根据重做日志文件的记录能够正确的恢复数据库原有的状态。

数据文件,控制文件和重做日志文件都是操作系统文件,Oracle通过操作系统控制和管理这些文件。

Oracle数据库文件。

 

图解服务器端网络架构pdf 服务器简图_服务器_03

 

                                                                                                图1-3

在Oracle内部组织和管理数据库中的数据时,Oracle按照自己的方式进行的,由表空间,段,区,数据库和模式对象来组织管理的,Oracle组织和管理数据的方式称之为逻辑存储结构。

        Oracle的逻辑存储结构和物理存储结构是相互独立但又密切相关的,我们统称为Oracle存储结构。

1.2 Oracle实例

Oracle实例是运行在内存中的Oracle软件,主要包括Oracle内存结构和一些Oracle进程。在启动Oracle服务器时,实际上是在内存中创建一个Oracle实例,然后由这个实例访问和控制数据库文件的存取。

图解服务器端网络架构pdf 服务器简图_存储_04

                                                              图1-4

Oracle内存结构可分为系统全局区(System Global Area简称SGA)和程序全局区(Program Global Area简称PGA)两类,也可以成为共享内存区和非内存共享区。在SGA中保存信息可以被所有进程所共享,是一块共享内存区域,在PGA中保存有某个进程的私有数据和控制信息,是这个进程的私有内存区域,一般一个进程都有自己的PGA。根据保存信息类型的不同,SGA又可以分为数据库高速缓存区(Database Buffer Cache),重做日志缓冲区(Redo Log Buffer),共享池(Shared Pool),大型缓冲池(Large Pool)和Java池(Java Pool)等不同的内存结构。

 

图解服务器端网络架构pdf 服务器简图_服务器_05

                                                                       图1-5

 

Oracle进程可以分为服务器进程和后台进程。服务进程由Oracle自身创建,能够接受用户进程的请求,并通过Oracle实例实现相关的操作,后台进程是Oracle实例中能够完成某一特定任务的程序如I/O操作,监视进程状态和系统维护等,这些进程能够使Oracle完成各种复杂的数据处理和维护任务。这些后台进程主要包括数据库读写进程(DBWR),日志写进程(LGWR),检查点进程(CKPT),系统监视进程(PMON),归档进程(ARCN),恢复进程(RECO)和调度进程(Dnnm)等。

 

 

用户进程是当用户执行一个Oracle运用程序(如Pro*C/C++),或启动一个Oracle工具(如SQL*PLUS)时,Oracle所创建的用于管理这些程序或Oracle工具与Oracle实例通信的进程。用户进程不是实例的一部分。

除了Oracle进程和用户进程外,Oracle还有一些可选的进程,这些进程只有在特定的Oracle组件时才会产生,如在使用高级队列组件(Advanced Queuing)时将会启动队列监视进程QMNn,在Oracle并行服务器中启动锁进程LCKn用于实例的锁定。

以下为Oracle实例管理过程

 

图解服务器端网络架构pdf 服务器简图_oracle_06

 

概述 Oracle 实例管理

以下示例描述了 Oracle 数据库执行的几项最基本操作。该示例对用户和关联服务器进程运行于不同计算机(通过网络相连接)上时的 Oracle 配置进行了说明。

1.      在运行 Oracle 的计算机(通常称为主机或数据库服务器)上启动了一个实例。

2.      运行应用程序的计算机(本地计算机或客户机工作站)在用户进程内运行应用程序。客户机应用程序尝试通过 Oracle Net Services 驱动程序与实例建立连接。

3.      该实例检测到应用程序发出的连接请求,并连接到代表该用户进程的服务器进程。

 

图解服务器端网络架构pdf 服务器简图_数据库_07

 

概述 Oracle 实例管理(续)

4.      用户更新了某一行数据。 

5.      服务器进程接收到语句,并检查 SGA 的共享池中是否已存在该语句。如果找到了共享 SQL 区域,服务器进程将检查用户对请求数据的访问权限,并且使用以前现有的共享 SQL 区域处理该语句。如果共享池内没有该语句,则将为该语句分配新的共享 SQL 区域,从而可对其进行分析和处理。

6.   服务器进程从 SGA 中存储的实际数据文件(表)或数据块中检索任何必需的数据值。

7.      服务器进程将对 SGA 中的表数据进行修改。

8.      提交事务处理后,LGWR 进程会立即将该事务处理记录到重做日志文件中。

9.      如果有必要,DBWn 进程会将修改的块写入磁盘。 

10.   服务器进程将通过网络向应用程序发送一条成功或错误消息。 

在整个过程中,其它后台进程同时在运行,用于监视是否有需要干预的情况。

 

      总结来说Oracle为每个访问数据库的用户启动一个Oracle用户进程,Oracle用户进程通过服务进程与实例进行交互,用户对数据库的操作在实例的内存中进行,内存在通过后台进程将数据写入到数据文件中。

 

 

后续将详细介绍Oracle体系结构。