oracle 监听原理
oracle客户端连接服务端的主要过程如下:
客户端与服务端连接建立成功需要通过以上6个步骤:
第一步;客户端向服务器发起数据库连接请求。请求的形式有多种,例如在window操作系统中通过命令行窗口输入 :
sqlplus wzf/123@testorcl
sqlplus wzf/123@localhost:1521/orcl
客户端的oracle net层会根据输入的字符串进行解析。以第二种字符串连接时,客户端将连接请求发送到主机名为172.50.39.69的1521端口,请求连接的数据库服务名为orcl。以第一种字符串连接时,oracle net层会在tnsname.ora文件遍历网络服务名列名,尝试将testorcl转化为对应服务端的主机名、端口号及数据库服务名。
第二步:监听程序接收到客户端发送的连接请求,会遍历服务摘要当中是否注册服务名为orcl的实例,如果不存在,则返回ORA-12505异常;如果存在,则允许连接通知实例。
第三步:实例fork出服务进程为请求服务。
第四步:服务进程将连接的信息发送给监听程序;
第五步:监听程序将服务进程返回的连接信息转发给客户端;
第六步:客户端将用户名和密码发送给服务进程进行验证,验证成功则进行服务,否则返回用户名或密码错误异常。
oracle 监听配置
oracle监听配置文件主要有sqlnet.ora、listener.ora、tnsname.ora。
sqlnet.ora配置命名方法,默认即可。客户端配置tnsname.ora,服务端配置listener.ora。
三份配置文件在数据库连接的作用过程如下:
客户端向服务端发送连接请求时,oracle net层在本地查找sqlnet.ora文件确定命名方法,大多数为local nameing;然后查找tnsname.ora,遍历网络服务名,如果不存在连接字符串提供的网络服务名,则提示错误,成功则根据对应的协议、IP地址、端口号发送请求连接的数据库服务名;监听程序接收到请求之后,将接收到的数据库服务名与listener.ora文件静态注册的服务名和实时动态注册的服务名进行比对,如果客户端发送的服务名存在对应的实例,则建立连接,实例分配一个服务进程与客户端建立连接。
tnsname.ora和listener.ora都可以通过Net Manager 或 Net Configuration Assistant进行配置,也可以在对应目录下直接对文件进行修改实现配置。
Net Manager 服务端配置如下:
Net Manager 客户端配置如下:
客户端仅配置服务命名即可,不需要配置监听程序。很多用户进程直接以IP地址+端口号+服务名的方式进行数据库连接请求,服务命名便没有进行遍历。
oracle 监听异常处理
ORA -12560 异常:
可能的原因有三类:1、实例没有启动,解决方案就是启动实例,window中即OracleService+实例名(例如OracleServiceORCL)没有被启动);2、环境变量存在问题,当window系统同时装有服务端和客户端时,path变量的路径排序存在问题,将服务端的路径放在客户端路径的前面即可;3、oracle数据库的安装介质存在问题,非官网下载。
更多监听异常解决方案可见:http://blog.csdn.net/tianlesoftware/article/details/4861572
部分知识来源:
http://www.linuxidc.com/Linux/2014-09/107083.htm
http://video.tudou.com/v/XMTc4NjQyNzQ3Mg==.html?f=38321315
http://blog.csdn.net/tianlesoftware/article/details/4861572