oracle整体架构如下图:
![1770328.png](b2f523dc-a6b1-4ee3-a870-a7c9c052cfd2_0_files/1770328.png)
架构组成说明:
1.oracle server由oracle instance(实例)和oracle database(数据库)组成。
2.oracle实例:
- 实例是连接数据库的接口;一个实例仅能打开一个数据库,但一个数据库可以被多个实例打开(如rac);实例由内存(sga)和后台进程(background process)组成。
- 连接一个实例需要(1)建立一个用户连接(在用户进程和服务器进程之间)(2)创建会话
![2575546.png](b2f523dc-a6b1-4ee3-a870-a7c9c052cfd2_0_files/2575546.png)
![33725671.png](b2f523dc-a6b1-4ee3-a870-a7c9c052cfd2_0_files/33725671.png)
3.oracle数据库:
包括数据文件、控制文件、联机重做日志文件三种文件类型。
4.内存结构:
包括SGA和PGA。
- SGA 实例启动时被分配,是oracle实例的组成部分,由sga_max_size控制。
SGA:由database buffer caches、shared pool、redo log buffer 、其他结构,附加内存结构large pool 、java pool。
(1)
database buffer caches:存储从数据文件中检索到的数据块;当获得和更新数据时能获得性能提升;通过LRU规则管理;由db_cache_size定大小;db_block_size确定主要的数据块大小。由独立的子缓存组成:db_cache_size、db_keep_cache_size、db_recycle_cache_size。
SQL> alter system set db_cache_size=96m; 可以被动态修改
其中, 通过设置db_cache_advice可以统计信息,以预测不同cache大小的行为。可查看统计信息视图v$db_cache_advice。
(2)
shared pool :包含library cache 和data dictionary cache。用于存储大部分最近执行过的SQL声明和最近使用的数据定义。由shared_pool_size确定其大小。
SQL> alter system set shared_pool_size=6m;
library cache :存储大部分最近使用的SQL和PL /SQL声明;遵守LRU算法;包含共享SQL区和PL/SQL区。
data dictionary cache:最近使用的数据库中的定义;包括数据库文件、表、索引、列、用户、权限和其他objects;在语法解析阶段,服务器进程会查询数据字典以解析object名并验证其是否合法;把数据字典信息缓存到内存中以提高查询和DML操作的相应时间。
(3)
redo log buffer:记录数据库中数据块的变化;主要目的是用于恢复;改变的记录称为redo entries;redo entries中包含重建或日志变化的信息。由log_buffer定大小。
(4)
large pool:是SGA中的可选内存区域;可以减轻shared_pool的负担;主要用于共享服务器中的会话内存、I/O服务器进程、备份和恢复操作或RMAN、平行执行信息缓存(parallel_automatic_tunning 设置为true);不适用LRU;大小由large_pool_size定;可以动态调整。
(5)
java pool:安装和使用java时使用;解析java命令使用;由java_pool_size定大小。
- PGA 服务器进程启动时被分配
(1)该内存保留为每个用户进程连接到数据库时使用。
(2)服务器进程创建时被分配;中断时被收回;
(3)只能为一个进程使用。
![13740906.png](b2f523dc-a6b1-4ee3-a870-a7c9c052cfd2_0_files/13740906.png)
5.进程结构:
包括用户进程、服务器进程、后台进程。
-
用户进程:
向服务器请求连接时启动。为客户端所有。
必须首先在用户进程和服务器进程之间建立一个连接;不会直接作用于oracle服务器;
-
服务器进程:
当一个用户创建了一个会话后,向一个实例发出连接时启动。
直接作用于oracle服务器;当用户进程请求发起时生成,并向用户进程返回结果;可以是专用或共享服务器。
![15321312.png](b2f523dc-a6b1-4ee3-a870-a7c9c052cfd2_0_files/15321312.png)
客户端连接oracle服务器时采用TCP/IP 协议(通过网卡),而oracle服务器内部连接数据库则采用 IPC协议或借助本地回环接口lo。
![15580859.png](b2f523dc-a6b1-4ee3-a870-a7c9c052cfd2_0_files/15580859.png)
-
后台进程:
实例启动时启动。
必须的后台进程:DBWn,LGWR,SMON,PMON,CKPT
可选后台进程:ARCn,LMDn等。
其中ARCn在生产环境中几乎是必须的。
(1)
DBWn 将database buffer cache 中的数据写入到数据文件中。当以下情况发生时,DBWn执行。
a.检查点发生
b.脏buffer达到临界值
c.没有空余的buffer
d.发生超时
e.RACping请求发生时
f.表空间改为离线时
g.表空间改为只读时
h.删除或阻断表时
i.开始备份表空间时
(2)
LGWR 将redo log buffer中的数据写入到redo log中。当以下情况发生时,LGWR执行。
a.提交时
b.1/3buffer已满
c.每3秒
d.在DBWn写之前。
(3)SMON
a.实例恢复(前滚redo log文件中的变化、为用户接口打开数据库、回滚未提交的事物)
b.合并空闲空间
c.回收临时段
(4)PMON: 进程失败后,通过以下方法清除失败进程
a.回滚事物
b.释放锁
c.释放其他的资源
d.重启死进程
(5)CKPT
a.用检查点信息更新数据文件头
b.用检查点信息更新控制文件
(6)ARCn
a.可选的后台进程
b.设置为归档模式后,会自动归档redo日志文件
c.保留数据中所有的数据变化
6.逻辑结构
>tablespace>segment>extent>blocks
![33789656.png](b2f523dc-a6b1-4ee3-a870-a7c9c052cfd2_0_files/33789656.png)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26764468/viewspace-723398/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26764468/viewspace-723398/