一、建立与Oracle实例的连接
Oracle实例是用Oracle的STARTUP命令启动的,它的启动就意味着SGA(系统全局区)的所有内存结构都已生成的,所有必需的后台(如5个必需的后台进程:SMON、PMON、DBWR、LGWR、CKPT)进程都已在内存中运行。
用户在向Oracle数据库发出SQL命令之前必须与实例建立连接。用户启动一个工具如SQL*Plus,该工具或应用程序就被作为一个用户进程来执行。
注意:用户进程是不能直接访问数据库的。用户进程是运行在客户端的。
在专用连接的情况下(即默认情况下),当一个用户登陆Oracle服务器时,如果登陆成功,Oracle就在服务器所运行的计算机上创建一个服务器进程。在这个种连接下,该服务器进程只能为该用户进程提供服务,用户进程与服务器进程是一对一的关系。用户进程向服务器进程发请求,服务器进程对数据库进行实际的操作并把所得的结果返回给用户进程。
一个用户每次登陆Oracle服务器,如果成功,该用户就与Oracle服务器建立了连接,而这种连接的状态被称为会话,一个会话始于用户成功地登陆Oracle服务器,终止于用户退出或非正常终止连接。一个数据库用户可能同时有多个会话存在,即用相同的用户名和密码同时登陆多次。
注意:虽然连接与会话都与用户进程紧密相关,但是这两者之间还是有很大的不同。连接是指一个用户进程与一个Oracle数据库实例之间的通信路径,而会话代表的是一个当前用户登陆该数据库实例的状态。
二、服务器进程
当Oracle创建一个服务器进程的同时要为该服务器进程分配一个内存区,该内存区称为程序全局区(PGA)。与SGA不同,PGA是一个私有的内存区,不能共享,且只属于一个服务器进程。它随着服务器进程的创建而被分配,随着服务器进程的终止而被回收。
在专用服务器的配置下,程序全局区PGA主要包括了:
1.排序区(sort area):用于处理SQL语句所需的排序。
2.Cursor状态区(cursor state):用于指示会话当前所使用的SQL语句的处理状态。
3.会话信息区(session information):包括了会话的用户权限和优化统计信息。
4.堆栈区(stack space):包括了其他的会话变量。
如果是共享服务器进程或多程序的配置,以上这些结构除了堆栈区以外大部分都将存在于SGA中。如果有large pool,它们就会被存在于large pool中,否则它们就会被存在于共享池中。
注意:Cursor是Current set of rows的缩写。引入Cursor这一数据结构的目的就是为了减少I/O----将磁盘操作变成内存操作。当要对一个或者几个表中的一批数据进行反复的处理时,为了避免重复地访问这些表(访问硬盘),Oracle可以将这批数据一次性装入内存。而这些数据行被称为 活动集(Active set),程序可以利用这个指针来处理活动集中的所有数据行,就不需要重复地访问硬盘了。
借鉴于《Oracle数据库管理》