Maison > base de données > tutoriel mysql > Oracle体系结构

Oracle体系结构

WBOY
Libérer: 2016-06-07 17:40:09
original
885 Les gens l'ont consulté

Oracle服务器由Oracle实例与Oracle数据库组成Oracle实例(instance),通过ORACLE_SID来引导(Oracle标识)单实例情况下:Oracle数据库名与Oracle实例名相同且具

Oracle 服务器由Oracle实例与Oracle数据库组成

Oracle实例(instance),通过ORACLE_SID来引导(Oracle标识)

单实例情况下:Oracle数据库名与Oracle实例名相同且具有唯一性

举例:

三国中,关羽使用青龙偃月刀,吕布使用方天画戟,这就是唯一性身份标识(连游戏里都有攻击力加成甚至其他特殊效果,别不承认,哈哈),那么青龙偃月刀和方天画戟分别是两个独立的库,美国空间,他们的ORACLE_SID就分别是关羽和吕布。

另一种情况下,关羽与吕布的坐骑都是赤兔马(貂蝉不算哈,额,貂蝉,有木有),此时赤兔做为唯一库名,但是同时被关羽和吕布两个SID实例调用,因此赤兔马属于RAC(实时应用集群,具有LB+HA双层功效)

clip_image001

单实例情况下,instance(sid)名与数据库是一致的(查询出的库名与表名默认都是大写形式,这是正常的)

clip_image002

RAC集群的第一个节点

clip_image003

RAC集群的第二个节点(可以明显看到,虽然实例名不同,但是库名是一样的,因此,RAC是一个多实例单库的集群数据库模式)

Oracle数据库结构包括内存结构、进程结构、存储结构

Oracle实例等于SGA + 后台进程

Oracle内存结构

clip_image004

上面的图就说明了Oracle的内存结构,其中最重要的两个区域就是SGA与PGA

系统全局区(SGA):由所有服务器进程和后台进程共享

程序全局区(PGA):专用于每一个服务器进程或后台进程。每一个进程使用一个PGA

SGA 是包含实例的数据和控制信息的内存区。

SGA 包含以下数据结构:

数据库缓冲区高速缓存:缓存从数据库检索的数据块

重做日志缓冲区:高速缓存重做信息(用于实例恢复),直到可以将其写入磁盘中存储的物理重做日志文件

共享池:缓存可在用户间共享的各个结构

大型池:是一个可选区域,可为某些大型进程(如Oracle 备份和恢复操作、I/O 服务器进程)提供大量内存分配

Java 池:用于Java 虚拟机(JVM) 中特定会话的所有Java 代码和数据

Streams 池:由Oracle Streams 使用

通过使用Enterprise Manager 或SQL*Plus 启动实例,可以显示为SGA 分配的内存量。

下面具体说一下SGA里的几个重要的池

共享池(Shared_Pool):Oracle会将用户提交来的SQL语句都缓存在内存中。每次处理新的一条SQL语句时,都会先在内存中查看是否有相同的SQL语句。如果相同则可以减少最重要的解析工作(也就是生成执行计划),从而节省了大量的资源;反之,如果没有找到相同的SQL语句,则必须重新从头到尾进行完整的解析过程。这部分存放SQL语句的内存就叫做共享池(Shared Pool)。当然,Shared Pool里不仅仅是SQL语句,还包括管理Shared Pool的内存结构以及执行计划、控制信息等等内存结构。

数据库缓冲区高速缓存(Buffer_Cache):Buffer Cache所能提供的功能主要包括(一些频繁查询的热表可以考虑放在这个区域,这就像现在最火的固态硬盘一个道理,但是频繁DML操作的表不建议放入此处)

通过缓存数据块,从而减少I/O;

通过构造CR块,从而提供读一致性功能;

通过提供各种Lock、Latch机制,从而提供多个进程并发访问同一个数据块的功能。

重做日志缓冲区(Log_Buffer):Oracle这种数据库最好的一个运作机制在于先写日志后操作,这样能够有效的确定你运行到了哪一步,方便故障排查与恢复。

为了临时存放所产生的日志信息,Oracle在SGA中开辟了一块内存区域。这块区域就叫做日志缓冲区(Log Buffer),当满足一定条件以后,Oracle会使用名为LGWR的后台进程将Log Buffer中的日志信息写入联机日志文件里。

在10g以后的Oracle版本中,有两个参数可以动态的调整SGA的大小,否则就需要自行设置每个池子的大小(当然,Oracle官方有一套科学的算法)

10g数据库有如下两个参数(在初始化参数文件中设置)

SGA_MAX_SIZE(允许的最大的SGA大小)

SGA_TARGET(SGA分配大小)

到了11g以后不仅可以自动配置SGA,也同时可以分配所有内存了,有如下两个参数(在初始化参数文件中设置)

MEMORY_MAX_TARGET(允许的最大的内存大小)

MEMORY_TARGET(内存分配大小)

进程结构

clip_image005

Oracle的进程包括了上图所述几个主要种类的进程,这里主要说一下后台进程

系统监视器(SMON):出现故障后,在启动实例时执行崩溃恢复任务

进程监视器(PMON):用户进程失败时执行进程清理任务

数据库写进程(DBWn):将修改后的块从数据库缓冲区高速缓存写入磁盘中的数据文件

检查点(CKPT):通过更新数据库的所有数据文件和控制文件指出最新的检查点

日志写进程(LGWR):将重做日志条目写入磁盘

归档进程(ARCn):发生日志切换时将重做日志文件复制到归档存储器

clip_image006

上图包括了所有的后台进程(MMON和MMNL是AWR报告的支持进程),其他一些进程不做详细解释

Oracle存储结构

clip_image007

上图是一个Oracle的物理存储结构

构成Oracle 数据库的文件可分为以下几类:

控制文件:包含有关数据库本身的数据(即物理数据库的结构信息)。这些文件对数据库而言至关重要。没有这些文件,就无法打开用于访问数据库数据的数据文件。

数据文件:包含数据库中的用户数据或应用程序数据。

联机重做日志文件:可用来实现数据库实例恢复。如果数据库已崩溃但未丢失任何数据文件,那么使用这些文件中的信息可以通过实例恢复数据库。

要成功运行数据库,以下附加文件非常重要:

参数文件:用于定义启动实例时如何配置实例。

口令文件:允许用户远程连接到数据库并执行管理任务。

备份文件:用于恢复数据库。当因介质故障或用户错误而损坏或删除了原始文件时,通常需要还原备份文件。

归档日志文件:包含实例生成的数据更改(重做)的实时历史记录。

使用这些文件和数据库备份可以恢复丢失的数据文件。也就是说,使用归档日志可以恢复还原的数据文件。

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal