Oracle入门精读18_Oracle Net软件连接过程及原理
从前两章节的架构及原理介绍当中,我们得知Oracle net软件层包括两个部分:服务器端的监听器、客户端的TNS。如下图
在服务端
oracle NET包括一个活动的进程叫监听器lsnrctl(Listener Control Utility,监听器控制实用程序)。只是负责建立客户端和服务端的连接,它并不承担客户端和服务端的通信。
监听器启动后,会去读取监听器配置文件listener.ora
服务器端在前几章节已详细说明,不再重复!
在客户端
客户端若想连接到数据库,需要两方面信息:
① 数据库所在服务器的IP和端口;
② 数据库service_name。
这两部分称之“连接描述符”,也叫“本地网络服务名”,保存在客户端的tnsnames.ora文件,类似hosts文件,记录每个oracle net 别名对应的主机和oracle实例。
PS:默认情况下客户端工具(如sqlplus、PL/SQL Developer等)连接远程服务器的数据库时,不会直接使用数据库的SID,而是通过“网络服务名”。
连接过程说明
1)在服务端开启监听 :lsnectl>start
这个启动进程会在一个固定的IP和端口上监听用户请求
2)当客户端程序(用户进程sqlplus)发出请求串
语法:username/[email protected]_service_name
例如sqlplus sys/[email protected]
① oracle NET 组件首先在本地查找sqlnet.ora文件确定解析方式
这里假设为local naming,则sqlnet.ora中内容如下:NAMES.DIRECTORY_PATH=(TNSNAMES)
② oracle NET读取tnsnames.ora文件,匹配net_service_name。
如果该net_service_name匹配失败,则提示错误;
如果成功,则根据connect descriptor中protocol,host,port信息发给正确的监听器
3)监听器再根据connect descritpor中的service_name与向它注册了的oracle services进行比对.
如果比对成功, 则建立连接, fork()一个服务进程,把用户请求转发给服务进程,不参与后续的任何工作,回去继续监听其他用户的请求。
如果比对失败,则提示错误。
4)服务进程和用户进程建立连接后,开始处理和返回用户的请求,直到用户进程结束连接。
常见错误代码
ORA-12154 :有可能TNSNAMES.ORA放在不正确的位置
ORA-12198和ORA-12203 :指出tnsnames.ora是列出的服务无法联系到。有可能指定的服务名称错误。
ORA-12533 :指出配置ADDRESS不正确
ORA-12541 :指出指定端口未找到相应监听器