首页 > 数据库 > Oracle > 9 Oracle体系结构概述
Oracle 实例 和 Oracle 数据库
|
Oracle 数据库软件 |
Oracle 数据库(Oracle 数据库文件) |
|
$ORACLE_HOME |
$ORACLE_BASE/oradata/prod ctl文件、log文件、dbf文件... |
ps:Oracle 数据库软件和Oracle 数据库文件可以分开存储,生产中一般是Oracle 软件存放在服务器本地硬盘,Oracle 数据库文件放在存储上
oracle 实例 instance
oracle 数据库 database
ipcs 查看共享内存分配
Oracle 内存结构
Oracle 数据库启动后,会在内存中划置一份空间,这份空间被Oralce 所独占、所独享、所使用
Oracle 共享内存--> 由所有服务器进程和后台进程共享
系统全局区 (SGA)
|
共享池 |
shared pool |
|
流池 |
Streams pool |
|
大型池 |
large pool |
|
java 池 |
java pool |
|
数据库 缓冲区高速缓存 |
buffer cache |
|
重做日志缓冲区 |
redo log |
ps:实际生产中,前台进程要远远大于后台进程。因为对Oracle 数据库的每一个连接,都会产生一个前台进程
SGA 中,所有内存空间,对所有进程来说都是共享的。
每个进程还能独享一份自己的PGA
前台进程=服务器进程
程序全局区域(PGA)
专用于每一个服务器进程或后台进程。每一个进程使用一个PGA
web应用服务器启动之后会建立一堆到Oracle服务器的连接(主动发起对Oracle 数据库实例的N个连接,连接数在weblogic上可以设置)
---> 连接池(数量可以设置) ---> Oracle 服务器(对Weblogic的每一个连接 都会建立相应的进程)
web服务器启动100连接 --> Oracle 服务器
--> Oracle 会针对这100个连接 启动100个前台进程
--> Oracle 会针对这100个连接 启动100个服务器进程
模拟Weblogic 对Oracle 建立连接
[oracle@oracle ~]$ sqlplus / as sysdba
服务器会启动一个进程(前台进程、服务器进程)
oracle 5650 5649 0 11:51 ? 00:00:00 oracleprod (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
再模拟一个连接,Oracle 会再增加一个进程(前台进程、服务器进程)
[oracle@oracle ~]$ sqlplus / as sysdba
oracle 5717 5716 0 11:52 ? 00:00:00 oracleprod (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
###########
[root@oracle ~]# ps -ef | grep ora
root 3878 3847 0 21:32 ? 00:00:00 hald-addon-storage: polling /dev/hdc
avahi 4156 1 0 21:32 ? 00:00:00 avahi-daemon: running [oracle.local]
root 4338 4282 0 21:38 pts/0 00:00:00 su - oracle
oracle 4339 4338 0 21:38 pts/0 00:00:00 -bash
oracle 4369 4339 0 21:38 pts/0 00:00:00 rlwrap sqlplus / as sysdba
oracle 4370 4369 0 21:38 pts/2 00:00:00 sqlplus as sysdba
oracle 4449 1 0 21:38 ? 00:00:00 ora_pmon_prod
oracle 4453 1 0 21:38 ? 00:00:00 ora_vktm_prod
oracle 4457 1 0 21:38 ? 00:00:00 ora_gen0_prod
oracle 4459 1 0 21:38 ? 00:00:00 ora_diag_prod
oracle 4461 1 0 21:38 ? 00:00:00 ora_dbrm_prod
oracle 4463 1 0 21:38 ? 00:00:00 ora_psp0_prod
oracle 4465 1 0 21:38 ? 00:00:00 ora_dia0_prod
oracle 4467 1 1 21:38 ? 00:00:01 ora_mman_prod
oracle 4469 1 0 21:38 ? 00:00:00 ora_dbw0_prod
oracle 4471 1 0 21:38 ? 00:00:00 ora_lgwr_prod
oracle 4473 1 0 21:38 ? 00:00:00 ora_ckpt_prod
oracle 4475 1 0 21:38 ? 00:00:00 ora_smon_prod
oracle 4477 1 0 21:38 ? 00:00:00 ora_reco_prod
oracle 4479 1 0 21:38 ? 00:00:00 ora_mmon_prod
oracle 4481 1 0 21:38 ? 00:00:00 ora_mmnl_prod
oracle 4483 1 0 21:38 ? 00:00:00 ora_d000_prod
oracle 4485 1 0 21:38 ? 00:00:00 ora_s000_prod
oracle 4580 4370 0 21:39 ? 00:00:00 oracleprod (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 4582 1 0 21:39 ? 00:00:00 ora_p000_prod
oracle 4584 1 0 21:39 ? 00:00:00 ora_p001_prod
oracle 4586 1 0 21:39 ? 00:00:00 ora_qmnc_prod
oracle 4602 1 0 21:39 ? 00:00:00 ora_cjq0_prod
oracle 4604 1 0 21:39 ? 00:00:00 ora_q000_prod
oracle 4606 1 0 21:39 ? 00:00:00 ora_q001_prod
root 4651 4623 0 21:40 pts/3 00:00:00 su - oracle
oracle 4652 4651 0 21:40 pts/3 00:00:00 -bash
oracle 4680 4652 0 21:40 pts/3 00:00:00 rlwrap sqlplus / as sysdba
oracle 4681 4680 0 21:40 pts/4 00:00:00 sqlplus as sysdba
oracle 4682 4681 0 21:40 ? 00:00:00 oracleprod (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root 4684 4310 0 21:40 pts/1 00:00:00 grep ora
PS:一个连接 对应一个前台进程=服务器进程
用户 (查询) --> Weblogic(生成sql语句)-->通过连接池中的某条链接(传输)-->Oracle 接收
用户 (接收查询结果)<-- Weblogic(生成页面)<--通过连接池中的某条链接(传输)<--Oracle 处理
SGA中主要讨论:共享池 shared pool、数据库缓冲区高速缓存buffer cache、重做日志缓冲区redo log buffer
五大进程:
|
系统监视器 |
SMON |
|
进程监视器 |
PMON |
|
数据库写进程 |
DBWn |
|
日志写进程 |
LGWR |
|
检查点 |
CKPT |
归档进程(ARCn)
PS:实例=SGA(六大内存块)+进程(五大后台进程)
Oracle --> 六大内存块、五大进程、三大文件
数据库缓冲区高速缓存
三类文件
控制文件--> 1、存放整个数据库的物理结构信息(有多少个数据库文件,分别在哪个位置,有多少个redo.log文件,分别在哪个位置)
2、记录着数据库当前运行的一些状态信息(哪个数据库文件在线正常,哪些离线不正常,Oracle 当前使用众多重做日志文件中的哪一个)
数据文件--> 存放Oracle 实实在在的数据,例如Oracle 数据的表信息
重装日志文件-->记录对Oracle 所做的所有修改,全部会以日志的方式记录在日志文件中(记录着 数据文件中,每一个数据块的所有的变化过程)
##
三大池的作用
Oralce 数据接收到的是SQL语句,对SQL 语句处理、执行,获取数据然后返回给用户
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29000429/viewspace-1060626/ ,如需转载,请注明出处,否则将追究法律责任。