第四章 基本的网络体系架构
当客户端发出一条conn hr/hr@sid命令的时候,其实是一个比较复杂的过程,清楚了这个连接过程以后,当发现连接异常的时候,就可以很准确的定位问题的原因了。
客户端配置:sqlnet.ora, tnsnames.ora
服务器端配置:listener.ora(四要素:IP+TCP/IP+PORT+SID)
连接过程:
1. 读取 SQLNET.ORA 选择解析方法
当客户端发出conn命令时,查找客户端的sqlnet.ora 文件
E:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\sqlnet.ora NAMES.DIRECTORY_PATH= (TNSNAMES)
通过客户端的sqlnet.ora来选择解析的方法(主机命名、本地命名、目录命名、外部命名、ORACLE NAMES、easy connect(10g))。
2. 若是本地命名,读取TNSNAMES.ORA寻找三要素
如果选择的是TNSNAMES本地命名,那么到
E:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora下去解析服务名
DEVDB2 = /*服务名*/
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.69)(PORT = 1521)) /*监听地址:协议+IP+PORT*/
(CONNECT_DATA = (SERVER = DEDICATED)
(SERVICE_NAME = devdb)))/*SID*/
3. 建立到Server端 LISTENER 的连接
根据IP+PROT+TCP/IP建立与监听程序的连接,并向该监听程序发送一个CONNECT数据包 (见图中符号1)
4. Server端的 LISTENER 检查有效性
当Server端接到请求以后,检查是否有已经注册的SID与client端发出的请求有匹配的SID, 如果有,LISTENER分派一个新的SERVER PROCESS进程来处理该连接,此时会在LISTENER程序和 SERVER PROCESS之间建立一个继承连接,以传送初始化信息,传送完毕后,LISTENER程序和SERVER PROCESS之间的连接关闭,剩下的连接就是SERVER PROCESS和client端的连接了,这也就是为什么关闭 LISTENER只会影响新请求的client端,不会影响已经连接上的session的原因了。(见图中符号2)
5. SERVER PROCESS将RESEND数据包发送回客户机。(见图中符号3)
6. CLIENT 继续向 SERVER PROCESS 发送新的CONNECT 数据包。(见图中符号4)
7. 该专用服务器进程接受传入的连接,处理完成后,将ACCEPT 消息转发回client端。(见图中符号5)
备注:A. listener.ora特点
1. 对已经连接的SESSION 无用
2. 单个LISTENER可以对多个database连接请求
3. 支持多个监听可以连接一个database
4. 支持网络连接协议
5. LISTENER.ORA名称一定唯一,不可以重名
B. listener注册类型
1. 静态注册
8i及8i以前,均采用静态注册。
把注册的信息提前写到listener.ora里面。
oem和其他服务是必须的。
2. 动态注册
Oracle9i 或Oracle8i 例程使用动态服务注册
不需要配置listener.ora文件
动态注册由PMON进程执行 在初始化参数中必须配置
SERVICE_NAMES、INSTANCE_NAME这两个参数,才可以进行动态
注册
缺省情况下,PMON 向TCP/IP 的缺省本地地址— 端口1521— 处的服务
器上的本地监听程序进行注册
非缺省监听程序注册(e.g.prot=1522),定义LOCAL_LISTENER 初始化参数(可以通过tnsnames.ora 等命名方法将非缺省listener_alias解析,也可以直接把address字符串添加到LOCAL_LISTENER中)
alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.68)(PORT = 1521))'
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9252210/viewspace-578120/ ,如需转载,请注明出处,否则将追究法律责任。