oracle数据库:体系结构概述_笔记2
2.2SGA和后台进程
系统全局区SGA会做以下工作:
.维护所有进程需要访问的多种内部数据结构;
.缓存磁盘上的数据,另外重做数据写至磁盘之前先在这里缓存;
.保存已解析的SQL计划,等等
???Oracle有一组“附加到”SGA的进程,附加机制因操作系统而异。在Unix环境中,这些进程会物理地附加到一个很大的共享内存段,这是操作系统中分配的一个内存块,可以由多个进程并发地访问(通常要使用shmget()和shmat())
在Windows中,这些进程只是使用C调用(malloc())来分配内存,因为它们实际上是一个大进程中的线程,所以会共享相同的虚拟内存空间。
Oracle还有一组供数据库进程/线程读写的文件(只允许Oracle进程读写这些文件)。这些文件保存了所有的表数据、索引、临时空间、重做日志等。
如果在一个Unix系统上启动Oracle,并执行ps命令,会看到运行着许多物理进程,还会显示出这些进程的名字。这些后台进程是构成实例的持久性进程,从启动实例开始,这些进程会一直运行,直至实例关闭。
Unix上只有一个Oracle二进制可执行文件。根据启动时所提供的选项,这个可执行文件会有多种不同的“个性”。执行ora_pmon_ora11g进程要运行这个二进制可执行文件,执行ora_ckpt_ora11g进程时运行的可执行文件仍是它。二进制可执行文件只有一个,就是oracle,只是会以不同的名字执行多次。
2.3连接Oracle
Oracle服务器处理请求的两种最常见的方式分别是专用服务器(dedicated server)连接和共享服务器(shared server)连接。
2.3.1专用服务器
如果现在使用一个专用服务器登录数据库,则会创建一个新的进程,提供专门的服务:
sys@ORCL>!ps -aef|grep oracle
avahi 3992 1 0 Aug12 ? 00:00:04 avahi-daemon: running [vcenteroracle.local]
oracle 4133 1 0 14:46 ? 00:00:00 ora_w000_orcl
oracle 4181 19351 0 14:49 pts/1 00:00:00 sqlplus as sysdba
oracle 4184 4181 0 14:49 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root 4240 4216 0 14:50 pts/2 00:00:00 su - oracle
oracle 4241 4240 0 14:50 pts/2 00:00:00 -bash
oracle 4264 1 0 14:51 ? 00:00:00 ora_j000_orcl
oracle 4268 1 0 14:51 ? 00:00:00 ora_j001_orcl
oracle 4275 4241 0 14:51 pts/2 00:00:00 sqlplus as sysdba
oracle 4278 4275 0 14:51 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 4281 4275 0 14:51 pts/2 00:00:00 /bin/bash -c ps -aef|grep oracle
oracle 4282 4281 0 14:51 pts/2 00:00:00 ps -aef
oracle 4283 4281 0 14:51 pts/2 00:00:00 grep oracle
oracle 4676 1 0 Aug12 ? 00:01:14 ora_pmon_orcl
oracle 4680 1 0 Aug12 ? 00:00:59 ora_psp0_orcl
oracle 4684 1 0 Aug12 ? 00:00:23 ora_vktm_orcl
oracle 4690 1 0 Aug12 ? 00:00:00 ora_gen0_orcl
oracle 4694 1 0 Aug12 ? 00:00:00 ora_diag_orcl
oracle 4698 1 0 Aug12 ? 00:00:01 ora_dbrm_orcl
oracle 4702 1 0 Aug12 ? 00:23:01 ora_dia0_orcl
oracle 4706 1 0 Aug12 ? 00:00:00 ora_mman_orcl
oracle 4710 1 0 Aug12 ? 00:05:12 ora_dbw0_orcl
oracle 4714 1 0 Aug12 ? 00:01:58 ora_lgwr_orcl
oracle 4718 1 0 Aug12 ? 00:07:29 ora_ckpt_orcl
oracle 4722 1 0 Aug12 ? 00:02:26 ora_smon_orcl
oracle 4726 1 0 Aug12 ? 00:00:00 ora_reco_orcl
oracle 4730 1 0 Aug12 ? 00:07:24 ora_mmon_orcl
oracle 4734 1 0 Aug12 ? 00:06:08 ora_mmnl_orcl
oracle 4738 1 0 Aug12 ? 00:00:00 ora_d000_orcl
oracle 4742 1 0 Aug12 ? 00:00:00 ora_s000_orcl
oracle 4814 1 0 Aug12 ? 00:00:00 ora_qmnc_orcl
oracle 4842 1 0 Aug12 ? 00:07:01 ora_cjq0_orcl
oracle 4866 1 0 Aug12 ? 00:00:01 ora_q000_orcl
oracle 4870 1 0 Aug12 ? 00:00:01 ora_q001_orcl
oracle 4916 1 0 Aug12 ? 00:00:00 ora_smco_orcl
root 19350 19326 0 Aug28 pts/1 00:00:00 su - oracle
oracle 19351 19350 0 Aug28 pts/1 00:00:00 -bash
sys@ORCL>
如前所述,登录时,Oracle总会创建一个新的进程。这通常称为专用服务器配置,因为这个服务器进程会在我的会话生存期中专门为我服务。对于每个会话,都会出现一个新的专用服务器,会话与专用服务器之间存在一对一的映射。按照定义,这个专用服务器不是实例的一部分。我的客户进程(也就是想要连接数据库的程序)会通过某种网络通道(如TCP/IP套接字)与这个专用服务器直接通信,并由这个服务器进程接收和执行我的SQL。如果必要,它会读取数据文件,并在数据库的缓存中查找我要的数据。也许它会完成我的更新语句,也可能会运行我的PL/SQL代码。这个服务器进程的主要目标就是对我提交的SQL调用作出响应。
http://www.52ij.com/jishu/5143.htmloracle数据库:体系结构概述_笔记1
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5144.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
