oracle 会话是什么?
原文: DBA的思想天空- p27-30
搞过网络编程的朋友可能早就听说过会话这个概念了。两个网络设备要进行通信,必须先建立起一个会话,这个会话就是承载所有通信工作的逻辑载体。再往前追溯,会话的概念来自通信行业,不过 Oracle 会话的本质更类似于网络设备之间的通信。
大家都知道网络通信有面向连接的协议,也有面向无连接的协议。面向连接的协议一般适用于上下文和状态十分关键的应用场合。Oracle的会话正是具有这样的特征,所以采用面向连接的通信协议,目前最常用的就是 TCP/P协议。出于安全考虑,在建立会话之初,Oracle需要通过安全认证,这也就是我们常见的“数据库登录”,Oracle的术语称为LOGON。在 LOGON的时候,首先 Oracle 客户端通过 SQL*Net协议或者 BEQ协议创建一个服务进程。
如果通过 SQL*Net协议,客户端首先要和监听器通过 TCP/IP、SPX等面向连接的网络协议建立通信会话,由监听器创建一个服务进程,客户端进程将网络通信会话重定向到这个服务进程,随后,客户端进程和服务进程建立通信会话。大家可能注意到了,老白在这里说了很多次“通信会话”,这么说就是为了区别与 Oracle 的会话。
和客户端通信的服务进程也就是 Oracle 术语中所说的前台进程,客户端和前台进程建立了通信会话并不等于说 Oracle的会话已经建立了,会话是一个更为虚拟的概念。大家先不要着急,等老白一步一步地进行剖析。客户端和服务进程完成通信会话的握手后,首先将LOGON 所需要的信息发送给前台进程。前台进程收到这些信息后,执行一个被称为LOGON的操作,校验用户和权限。这个校验工作可以有多种方式,最常见的是通过 SYSTEM表空间中的 USER$表中保存的用户名和密码进行校验。