oracle数据库体系结构

一、oracle数据库体系结构

oracle体系结构包括实例(Instance)、数据库文件、用户进程(User process)、服务器进程(Server process)以及参数文件(Parameter file)、密码文件(Password file)和归档日志文件(Archived log file)等

1、oracle服务器和实例

  • ORACLE实例(instance)

oracle实例是一些内存区和后台进程组成。这些内存区,包括数据库高速缓存、重做日志缓存、共享池、流池以及其他可选内存区(如JAVA池),这些池也称为数据库的内存结构。

后台进程包括系统监控进程(SMON)、进程监控(PMON)、数据库写进程( DBWR)、日志写进程(LGWR)、检验点进程(CKPT)以及其他进程(smon,如归档进程,reco进程等),这些数据库系统进程相互协作完成数据管理任务。

要访问数据库必须先启动实例,实例启动时先分配内存区,然后再启动后台进程,后台进程执行库数据的输入,输出以及监控其他ORACLE进程。在数据库启动过程中有五个后台进程是必须启动的。

  • oracle 服务器(sever)

oracle 服务器由数据库实例和数据库文件组成,也就是数据库管理系统(DBMS),数据库服务器除了维护实例和数据库文件外,还在用户建立与服务器的连接时启动服务器进程并分配PGA.

2、ORACLE数据库物理结构(文件组成)

数据库是运行在操作系统之上的,数据库的最终目的是存储和获取相关的数据,这些数据实际上存储在操作系统文件中,这些操作系统文件组成 ORCLE数据库物理结构。

  • 数据文件(data files):数据文件包含数据库中的实际数据,是数据库操作中数据的最终存储位置。
  • 控制文件(control files):包含维护数据库和验证数据库完整的信息,它是二进制文件。
  • 重做日志文件(redo files):重做日志文件包含数据库发生变化的记录,在发生故障时用于数据恢复。

3、参数文件、密码文件和归档日志文件

  • 参数文件(parameter file):参数文件中定义了数据库实例的特性。在参数文件中包含为SGA中内存结构分配空间的参数,如分配数据库告诉缓冲区的大小等,参数文件是正文文件,可以使用操作系统文本编辑器查看,如在window操作系统中使用记事本工具。
  • 密码文件(password file):密码文件授予用户启动和关闭数据实例,在刚安装数据库时,ORACLE的默认用户名和密码就存储在密码文件中,ORACLE可以借此判断用户的操作权限。
  • 归档日志文件(archive log file):归档日志文件是日志文件的脱机备份,在发送故障后进行数据恢复时可能使用该文件。

二、ORACLE数据库内存结构

ORACLE内存结构由SGA与PGA两大部分组成。

PGA称为程序全局区,程序全局区不是实例的一部分,当服务器进程启动时,才分配PGA。

SGA称为系统全局区,它是数据库实例的一部分,当数据库实例启动时,会首先分配系统全局区,在系统全局区中包含几个重要的内存区,即数据库高速缓存(database buffer cache)、重做日志缓存(redo log buffer cache)、共享池(shared pool)、大池(large pool)和java池(java pool)。

1.共享池(shared pool)

ORACLE引入共享池的目的就是共享SQL或PL/SQL代码,即把解析得到的SQL代码的结果在这里缓存,其中PL/SQL不仅在这里缓存,同时在这里共享。共享池由两部分组成,即库高速缓存(libray cache)和数据字典高速缓存(data dict cache).

  • 库高速缓存

库高速缓存存储了最近使用过的SQL和PL/SQL语句。

数据字典高速缓存

数据字典高速缓冲区中存储了数据文件、表、索引、列、用户、权限信息和其他一些数据库对象的定义。在SQL语句的解析阶段,数据库服务器需要这些信息来解析用户名和用户的访问权限。数据字典缓存也称为字典缓存或者行缓存,它的作用就是把相关的数据字典信息放入缓存以缩短查询的响应时间。

2.数据库高速缓冲区(database buffer cache)

数据库高速缓冲中存储了最近从数据文件读入的数据块信息或用户更改后需要写回数据库的数据信息,此时这些没有提交给数据库的更改后的数据称为脏数据。当用户执行查询语句如select * from dept时,如果用户查询的数据块在数据库高速缓存中,ORACLE就不必从磁盘读取,而是直接从数据库高速缓存中读取,显然物理读取的速度比内存读取的速度慢很多,这些缓存的数据由LRU算法管理。把最近没有使用的数据库从库高速缓存中删除,为其他的查询数据块保留空间。

ORCLE设计的各种缓存目的及时提高查询速度,减少用户查询的响应时间。

3.重做日志高速缓冲区(redo buffer cache)

当用户执行了如INSERT,UPDATE,DELETE,CREATE,ALTER 或DROP操作后,数据发生了变化,这些变化了的数据在写入数据库高速缓存之前会先写入重做日志缓存,这样在数据恢复时ORACLE就知道哪些需要前滚哪些需要后滚了。

4.大池(large pool)和java池(java pool)

大池是SGA的一段可选内存区,只在共享服务器环境中配置大池。在共享服务器环境下,ORACLE在共享池中分配额外的空间用于存储用户进程和服务器进程之间的会话信息,但是用户进程区域UGA的大部分将在大池中分配,这样就减轻了共享池的负担。在大规模输入,输出及备份过程中也需要大池作为缓存空间。

Java池也是可选的一段内存区,但是在安装完JAVA或者使用JAVA程序时必须设置JAVA池,它用于编译JAVA语言编写的指令。

5.流池(stream pool)

流池也称为流内存,它是Oracle流专用的内存池,流(stream)是ORACLE数据库中的一个数据共享。

6.PGA(进程全局区)和UGA(用户全局区)

进程全局区(PGA)是服务器进程专用的一块内存,它是操作系统进程专用的内存,系统中的其他进程是无法访问这块内存的。PGA独立于SGA,PGA不会在SGA中出现,它是由操作系统在本地分配的。

PGA中存储了服务器进程或单独的后台进程的数据信息和控制信息。它随着服务器进程的创建而被分配内存,随着进程的中止而释放内存。PGA与SGA不同,它不是一个共享区域,而是服务器进程专有的区域。在专有服务器配置中包括如下组件:

  • 排序区:对某些的SQL语句执行结果进行排序。
  • 会话信息:包含本次会话的用户权限和性能统计信息。
  • 游标状态:标明当前会话执行的SQL语句的处理阶段。
  • 堆栈区:包含其他的会话变量。

UGA(用户全局区)

在共享服务器模式下有一个重要的概念即UGA,它是用户的会话状态,这部分内存会话总可以访问,UGA存储在每个共享服务器都可以访问的SGA中,这样任何服务器都可以使用用户会话的数据和其他信息。而在专有服务器模式下,用户会话状态不需要共享,用户进程与服务器进程一一对应的关系,所以UGA总是在PGA中进行分配。

三、ORACLE服务器进程和用户进程

1.服务器进程

服务器进程犹如一个中介,完成用户的各种数据服务请求,二把数据库服务器返回的数据和结果发给用户端。在专有的连接中,一个服务器进程对应一个用户进程,二者是一一对应的关系,当用户连接中断,则服务器程序退出;在共享连接中,一个服务器进程对应几个用户进程,此时服务器进程通过OPI(oracle program interface)与数据库服务器通信。

2.用户进程

当用户使用数据库工具如SQL*plus 与数据库服务器建立连接时,就启动了一个用户进程 ,即SQL*PLUS软件工程。

四、ORACLE数据库后台进程

后台进程是在实例启动时,在数据库服务器端启动的管理程序,它使数据库的内存结构和数据库物理结构之间协调工作。

数据后台进程有5个是必须启动的,否则数据库实例无法启动成功。

1.系统监控进程(SMON)

系统监控进程的主要作用是数据库实例恢复。当数据库发生故障时,如操作系统重启,此时实例SGA中的所有没有写到磁盘的信息都将丢失,当数据库重新启动后,系统监控进程自动恢复实例。

2.进程监控进程(PMON)

进程监控服务则服务器进程的管理和维护工作,在进程失败或连接异常发生时该进程负责一些清理工作。

3.数据库写进程(DBWR)

数据库写进程负责把数据库高速缓冲区中的脏数据写到数据文件中。

(PS:数据库写进程的性能很重要,如果它写脏数据到数据文件的速度很慢,使大量缓冲区无法释放,就会出现一些等待事件,如free buffer waits)

4.重做日志写进程(LGWR)

重做日志写进程负责将重做日志缓冲区中的数据写到重做日志文件。此时重做日志缓冲区中的内容是恢复事务所需要的信息,比如用户使用UPDATE语句更新了某行数据,恢复事务所需的信息就是更新前的数据和更新后的数据,这些信息用于该事务的恢复。

5.归档日志进程(ARCH)

归档日志进程是可选进程,该进程并不在实例启动时自动启动。它的作用是吧写满的重做日志文件的数据写到一个归档日志中,这个归档日志用作介质故障时的数据库恢复。

重做日志和归档日志的关系:重做日志文件负责实例失败时的数据恢复,因为SGA中没有被保存的数据会全部丢失,这样使用重做日志文件就可以完全恢复事务,而归档日志进程用于介质恢复,比如磁盘损坏,可以使用以前备份的数据文件,使用归档日志和重做日志就是可以完全恢复数据库。

6.检查点进程(checkpoint process)

检查点是一个事件,当数据库写进程把SGA中所有被修改了的数据库高速缓冲中的数据写到数据文件上时产生,这些被修改的数据包括提交的和未提交的数据。由于引入了校验点,使得所有的校验点的所有变化了的数据都写到数据文件中,在实例恢复时,就不必恢复校验点之前的重做日志中的数据,加快了系统恢复的效率。


今天刚好看到一书中介绍oracle数据库体系结构章节,因此简要整理了一下各中结构的包含组件及其相应的功能。

猜你喜欢

转载自blog.csdn.net/qq_42484700/article/details/80754131