在学习oracle中,体系结构是重中之重,一开始从宏观上掌握它的物理组成、文件组成和各种文件组成。掌握的越深入越好。在实际工作遇到疑难问题,其实都可以归结到体系结构中来解释。体系结构是对一个系统的框架描述。是设计一个系统的宏观工作。这好比建一栋大楼。你首先应该以图纸的方式把整个大楼的体系架构描述出来。然后一点点的往里面填充东西。下面我们先以一个图解的方式对oracle体系结构有一个基本了解
根据示图,便于我们记忆,示图分三部分组成,左侧User Process、Server Process、PGA可以看做成Clinet端,上面的实例(Instance)和下面的数据库(Database)及参数文件(parameter file)、密码文件(password file)和归档日志文件(archived logfiles)组成Oracle Server,所以整个示图可以理解成一个C/S架构。 Oracle Server由两个实体组成:实例(instance)与数据库(database)。这两个实体是独立的,不过连接在一起。在数据库创建过程中,实例首先被创建,然后才创建数据库。在典型的单实例环境中,实例与数据库的关系是一对一的,一个实例连接一个数据库,实例与数据库也可以是多对一的关系,即不同计算机上的多个实例打开共享磁盘系统上的一个公用数据库。这种多对一关系被称为实际应用群集(Real Application Clusters,RAC)RAC极大提高了数据库的性能、容错与可伸缩性(可能耗费更多的存储空间)并且是oracle网格(grid)概念的必备部分。
下面我们来详细看一下oracle数据库的体系架构
Oracle体系架构主要有两大部分组成:数据库实例(Instance)和数据库文件(database)
数据库实例
指数据库服务器的内存及相关处理程序,它是Oracle的心脏。与Oracle性能关系最大的是SGA(System Global Area,即系统全局区活共享内存区),SGA包含三个部分:
1、数据缓冲区,可避免重复读取常用的数据;
2、日志缓冲区,提升了数据增删改的速度,减少磁盘的读写而加快速度;
3、共享池,使相同的SQL语句不再编译,提升了SQL的执行速度。
oracle数据库实例的另一部分就是一些后台进程了,他主要包括:
1.系统监控进程
2.进程监控
3.数据库写进程
4.日志写进程
5.检验点进程
6.其他进程
这些后台进程合起来完成数据库管理任务
在访问数据库的时候。器后台先启动实例。启动实例前要先分配内存区。然后在启动后台进程。数据库启动过程中必须启动上面的前五个进程。否则实例无法创建。
注意:在启动oracle数据库的时候。因为有些进程是在开机启动项中自动启动的。所以占用了很大一部分内存。如果您电脑上还有一些其他占用内存比较大的程序。在启动oracle数据库的时候有可能会因内存不足而启动失败。
Oracle服务器
Oracle服务器包括两部分:数据库实例和数据库文件。他们构成了也就是所谓的数据管理系统(DBMS)
物理结构:oracle的物理结构指的其实就是一些存在硬盘上的各种文件。其最终目的就是存储和获取相关数据。这些存在硬盘上的文件组成了oracle数据库的物理结构
Oracle中主要包括三种文件:
1.数据文件
2.控制文件
3.重做日志文件
参数文件和密码文件:
参数文件:定义了数据库实例的特性,他是正文文件
密码文件:授予用户启动和关闭数据库的实例。主要有二进制数据组成
Oracle数据库的内存结构:SGA和PGA
SGA:数据库实例的一部分。数据库实例的启动会首先分配系统全局区(SGA)
1.共享池:共享sql和pl/sql代码,即把解析的sql代码在这里缓存,PL/SQL不仅缓存还共享。这样大大提高了直接访问磁盘获得sql的速度。
1)库高速缓存:存储最近使用过的sql语句。利用LRU(最近最少使用)算法来管理缓存。最近最少使用算法是一种比较常用的算法。在这里当库高速缓存接近满的时候。它会把缓存中最近最少使用的数据清除缓存中。加入新的缓存sql。
查看共享池的大小使用参数shared_pool_size
Sql>show parameter shared_pool_size
设置共享池大小
Sql>alter system set shared_pool_size=16M
注:在下面的的内容中。如果提到有关参数。如没有特殊说明。设置和查看参数值都是用以上类似方法。以后就不在重复了。并且这些参数必须是在以系统管理员system登陆时才能查看和修改。用类似scott用户是不能查看和修改的。
Oracle提供了DB_CACHE_SIZE(数据库大小)和DB_BLOCK_BUFFERS(数据库块个数)设置库高速缓存的大小,即为两者的成绩。
2)数据字典高速缓存
存储数据文件、表、索引、列、用户、权限信息和其他一些数据库对象的定义。把相关的数据字典信息放入缓存来提高查询的响应时间。其大小取决于共享池的大小。
2.数据库高速缓存
存储了最近从数据文件读入的数据块信息或用户更改后需要写回数据库的数据信息。内存读取比磁盘读取的速度快的多。提高了访问速度。这里的存取也采用了LRU(最近最少使用)算法。
Oracle数据库引入了缓冲区顾问参数(Buffer cache advisory parameter)用于启动和关闭统计信息。这些信息用于预测不同缓冲区的大小导致的不同行为特性。三种状态:OFF:ON:READY
设置顾问缓存为开启状态后。可以通过动态性能视图:v$db_cache_advice查看缓冲区的建议信息
3.重做日志缓存
在执行insert、update等操作后。数据发生了改变。这些变化的数据在写入数据库高速缓存前会先写入重做日志缓冲区。包括变化之前的数据。可以通过初始化参数log_buffer查看它的大小。此参数为静态参数,不能修改。
4.大池和java池
大型池(Large Pool)
在SGA中大型池是可选的缓冲区。它可以根据需要有管理权进行配置。它可以提供一个大的区以供象数据库的备份与恢复等操作。
在以下几种情形下会启用:
一,backup 和 restore 操作的时候
二,当启动UGA, I/O slaves的时候
三,设置MTS服务器的时候,用户信息的存放也使用到Large Pool
可以使用以下命令进行更改Large Pool的大小:
ALTER SYSTEM SET Large_Pool_Size = 64m;
Java池用于编译java语言编写的指令。通过java_pool_size查看和修改大小。大小由数据库在SGA自动分配和管理。所以查看的时候值为0;
Oracle的连接和会话
连接 (connection)与会话 (session)这两个概念均与用户进程 (user process)紧密相关,但二者又具有不同的含义。
连接 :用户进程和 Oracle 实例间的通信通道(communication pathway)。这个通信通道是通过进程间的通信机制(interprocess communication mechanisms)(在同一个计算机上运行用户进程和 Oracle 进程)或网络软件(network software)(当数据库应用程序与 Oracle 服务器运行在不同的计算机上时,就需要通过网络来通信)建立的。
会话 :用户通过用户进程与 Oracle 实例建立的连接[此处连接与上文中的连接含义不同 ,主要指用户和数据库间的联系 ]。例如,当用户启动 SQL*Plus 时必须提供有效的用户名和密码,之后 Oracle 为此用户建立一个会话。从用户开始连接到用户断开连接(或退出数据库应用程序)期间,会话一直持续。
Oracle 数据库中的同一个用户可以同时创建多个会话。例如,用户名/密码为的SCOTT/TIGER 用户可以多次连接到同一个 Oracle 实例。
当系统没有运行在共享服务模式下时,Oracle 为每个用户会话创建一个服务进程(server process)。而当系统运行在共享服务模式下时,多个用户会话可以共享同一个服务进程。
来源:Oracle认证