Oracle数据库------体系结构
ORACLE体系结构包括:实例(Instance),数据库文件,用户进程(User process),服务器进程以及其他文件。如下图所示:

Oracle的工作原理如下:例如:当执行一条查询语句时,首先由用户进程(user process,常用的用户进程有:SQL Plus,PL/SQL Develop等)访问Oracle数据库服务器,然后经过tcp/ip协议的三次握手与服务器进程(server process)建立连接,建立连接后,Oracle为了管理这些会话信息,设置了一个特殊的内存区域:程序全局区(PGA),PGA里面主要存储以下信息:
stack space:协议堆进信息
Session information:会话信息
Sort area:排序信息
Hash area:hash信息
(后三个也称为UGA),会话建立完成以后,该语句就会通过服务器进程传递给实例(Instance),然后在共享池进行判断,若该语句以前被执行过,那就走软分析,如果以前没有被执行过,就走硬分析。该语句的操作对象是一个表,然后需要数据字典的参与,数据字典会将该表属于哪一个表空间,行属于表空间的哪一个数据文件中,(数据字典也是属于共享池的一个数据缓冲区),然后要进行一个取行的工作,然后就在Database buffer Cache中判断要取的数据是否缓存,
一、ORACLE实例(instance)
1. 要访问数据库必须先启动实例,实例启动时先分配内存区,然后再启动后台进程,后他进程执行数据库的输入,输出以及监控其他进程。
在数据库启动的过程中 一下五个进程必须启动:
1.SMON(系统监控进程)
2.PMON(进程监控)
3.DBWR(数据库写进程)
4.LGWR(日志写进程)
5.CKPT(检验点进程)
2. Oracle数据库实例由内存区和后台进程组成
(1.)内存区:数据库高速缓存,重做日志缓存,共享池,流池以及其他可选内存区(如java池),这些池也称为数据库的内存结构。
(2.)后台进程:系统监控进程(SMON),进程监控(PMON),数据库写进程(DBWR),日志写进程(LGWR),检验点进程(CKPT),其他进程等。
二、ORACLE服务器(Server)
1. Oracle是服务器由数据库实例和数据库文件组组成,即常说的数据库管理系统。
2. 数据库服务器除了维护实例和数据库文件以外,还在用户建立与数据库连接时启动服务器进程并分配PGA(程序全局区)。
三、物理结构
1. 数据文件
2. 控制文件
3. 重做日志文件
四、Oracle数据库的链接与会话
1.链接:链接是指客户端进程与数据库实例之间的物理线路------网络连接
2.会话:指一个明确的数据库连接,即存在于实例中的逻辑实体
五、Oracle数据库的内存结构
1. SGA(系统全局区):包含几个重要的内存区,数据库高速缓存,重做日志缓存,共享池,大池和java池。
(1.)共享池(shared pool):共享SQL或PL/SQL代码
共享池由库高速缓存和数据字典高速缓存组成:
a、库高速缓存(大小不可手动调节):存储了最近使用过的sql或pl/sql语句,库高速缓存容量有限,不能超过共享池的大小,Oracle采用LRU算法管理库高速缓存。
b、数据字典高速缓存:与数据字典有关的一段缓冲区,存储数据文件,表,索引,列,用户,权限信息和其他的一些数据库对象的定义。就是把相关的数据字典信息放入缓存以提高查询响应时间。
设置及查看共享池大小
alter system set shared_pool_size=20M;
show parameter shared_pool_size;
(2.)数据库高速缓存存储了最近从数据文件读入的数据块信息或用户更改后需要写回数据库的信息,此时这些更改后没有提交给数据库的信息称为脏数据。
设置及查看库高速缓存的大小
alter system set db_cache_size=200M;
show parameter db_cache_size;(parameter:参数)
show sga;//查询sga的分配情况
缓冲区顾问参数(Buffer Cache Advisory Parameter):目的是让Oracle对于数据库缓冲区的内存分配提供一些建议,用于启动或关闭统计信息。
(3.)重做日志缓存
当用户执行了insert,update,delete,create,alter和drop操作时,数据发生了变化,这些发生率变化的数据在写入数据库高速缓存之前会先写入重做日志缓存区,同时变化之前的数据也放入重做日志高速缓存区,这样在数据恢复时,Oracle就知道哪些需要前滚,哪些需要后滚。
重做日志缓存区参数(log_buffer)是静态参数,不能动态修改
查看重做日志缓冲区的大小
show parameter log_buffer;
(4.)大池和java池
大池(Large Pool)是SGA的一段可选内存区,只在共享服务器环境中配置大池,用户进程区UGA的大部分将在大池中分配,可以减轻共享池的负担。在大规模输,入输出及备份过程中也需 要大池作为缓存空间。
large_power_size设置大池的大小。
show parameter large_power_szie;
java池也是可选的一段内存区、但是安装了java语言或者使用java程序时必须设置java池,用于编译java语言编写的指令。
java_pool_size设置java池的大小。
show parameter java_pool_size;
2. PGA(进程全局区):服务器进程专用的一块内存(待更)

浙公网安备 33010602011771号