日期:2014-05-16 浏览次数:20509 次
环境:
14:56:24 sys@ORCL (^ω^) select * from v$version where rownum=1; BANNER -------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
oracle NET 涉及面面方方,包括服务端、客服端、防火墙等,且以OS NET为基础搭建。oracle NET能够建立客服端或应用服务器到数据库服务器的连接,并负责连接的维护和数据的传送。客户端和服务端必须使用相同的协议,其中最流行的当属TCP/IP。
1 oracle 网络体系结构
oracle的网络架构基于OSI七层模型
客户端的OCI和服务端的OPI组成了会话层,负责在客户端和服务端之间建立一个完整的sql会话,功能包括:
㈠ 解析sql,进行语法分析
㈡ 为sql申请和分配cursor
㈢ 为sql提供绑定变量
㈣ 从服务器的数据字典获取记录的元数据
㈤ 执行sql
㈥ 返回结果
㈦ 关闭cursor
TTC层对应OSI的表示层,负责客户端和服务器之间字符集和数据类型的转换。
NET8,之所以称之为8,大抵是因为独立于OSI任何一层,配置oracle网络连通能力,实际上就是配置NET8这一层,而NET8这一层包括两个部分,服务器端的监听器、客户端的TNS.
2 监听器
在服务端,oracle NET包括一个活动的进程叫监听器。监听器活着的意义,就只是传递用户的请求。监听器必须存在于服务端。是客户端和服务端的中间组件。监听器的功能只是负责建立客户端和服务端的连接,它并不承担客户端和服务端的通信。监听器启动后,会去读取监听器配置文件--listener.ora。位于$ORACLE_HOME/network/admin下。通过命令lsnrctl可进入监听器的属性配置。OS命令tnsping只能判断客户端到监听器的连接是否通畅,与服务端是否正常运行无任何瓜葛。客户进程通过读取tnsnames.ora请求和服务器建立连接,如果是一条专用服务器连接,监听器进程就会为客户端创建一个server process (通过fork()创建)。
这其中涉及三种进程:服务进程、监听进程、客户进程。工作原理如下:
① 服务器端启动监听进程,这个进程会在一个固定的IP和端口上监听用户请求
② 用户进程向指定的IP和端口发出连接请求,送达给监听进程
③ 监听进程收到用户请求后,会fork()一个服务进程
④ 监听进程把用户请求转发给服务进程,此时,监听进程的使命就此结束,不在参与后续的任何工作,回去继续监听其他用户的请求
⑤ 服务进程和用户进程建立连接后,开始处理和返回用户的请求,直到用户进程结束连接。
类比一下,oracle NET如同非诚勿扰,监听进程犹如乐嘉和孟非,服务进程和客户进程如同男方、女方,双方牵手之后的事情就不在是乐嘉和孟非的事情了。
[oracle@localhost ~]$ lsnrctl LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 11-SEP-2012 09:57:03 Copyright (c) 1991, 2005, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> help The following operations are available An asterisk (*) denotes a modifier or extended command: start stop status services version reload save_config trace spawn change_password quit exit set* show*