1、Oracle客户端与服务器端的通讯机制sql
Oracle产品安装完成后,服务器和客户端都须要进行网络配置才能实现网络链接,服务器端配置监听器,客户端配置网络服务名。数据库
一、oracle net协议vim
Oracle经过oracle net协议实现客户端与服务器端的链接及数据传递。Oracle net是同时驻留在服务器端和客户端上的一个软件层,它封装了TCP/IP,负责创建与维护客户端应用程序到数据库服务器的链接。有协议就要有相应的端口,因此oracle NET有个默认的侦听端口1521。服务器
.网络
客户端发出的请求首先经过oracle net协议转换,转换成能够经过网络传输的信息,经过tcp/ip网络将请求传输到数据库服务器端,服务器端收到客户端请求后经过oracle net协议转换,将请求转换成数据库能够解释执行的本地指令,并在服务器端执行,并将结果经过tcp/ip和oracle net协议传输给客户端显示。oracle
2、客户端与服务器端的链接过程tcp
Oracle服务器经过一个名为“oracle net监听器”的组件接收来自客户端的链接请求,监听位于服务器端的一个后台进程。发送的客户端链接请求,首先被服务器的监听器所侦听,并交给对应的数据库实例,从而创建起客户端与服务器的链接。链接创建后,客户端与服务器端就能够直接进行通讯,不须要监听器参与。要实现监听器对客户请求的监听,须要对监听器进行配置。ide
Oracle网络服务名是一个标识符,表明客户端链接服务器的配置信息。工具
客户端与服务器端的链接过程以下:spa
1)在服务器端有一个常驻的监听器,监听客户端发出的链接请求。
2)用户在客户端使用(企业管理器或sql工具),输入用户名、口令及网络服务名,或在sql命令行中输入相似“CONNECT username/password@net_service_name”的请求。
3)客户端查看网络服务配置文件tnsnames.ora文件,将网络服务名映射为包含oracle服务器地址、监听端口和全局数据库名的链接描述符。
4)客户端根据链接描述符定位监听器,并经过网络链接信息传递给监听器。
5)监听器查询监听配置文件listener.ora,找出所要链接的服务器。
6)客户端和服务器开始通讯。
三、配置和管理Oracle网络配置的工具常见的有如下几种:
1)netca方式
查看监听文件
开启新的监听器
查看监听器状态
2)netmgr方式
添加监听器便可
3)命令方式
修改vim /opt/oracle/product/11.2/db_1/network/admin/listener.ora
增长新的侦听器,代码以下:
开启新的监听器
上面红框中的代码the listener supports no services显示没有任何服务注册到该监听器上,这与监听和数据库实例的启动前后顺序有关。
解决方法:监听启动和数据库实例启动的顺序
根据前面的知识,启动完数据库实例后,启动监听,在链接数据库时,只有这两者兼备,oracle才能向外提供服务。
监听和实例启动顺序的前后会对两者之间的工做协调产生影响,具体以下:
先启动监听,后启动实例:此时远程客户端链接实例是正常的,不会有问题,由于监听先启动,在启动实例时后台进程PMON会向监听注册服务器,当用户请求服务时,二者的协调工做已准备就绪。
先启动实例,后启动监听:若是监听刚启动,用户立刻链接实例,可能会报“监听程序当前没法识别链接描述符中请求的服务”的错误,缘由在于PMON还没来得及向监听注册实例服务。可是这个问题只会存在很短的一段时间,再链接就不会有问题了,为何等一会就行了呢?由于PMON每隔一段时间都会看有无服务须要向监听注册,此时若监听已启动,PMON就能注册成功,两者的协调工做就准备就绪了。
有没有办法解决很短的一段时间内的这个问题呢?答案是必定的。就是以静态注册的方式,即将实例的服务描述添加到listener.ora,这样只要启动监听,对应的服务在监听中就注册了。这是只要实例正常启动完成,就能够对外提供服务器了。在Listener.ora代码中添加以下代码便可。
4、客户端的链接
客户端链接到数据库服务器必须知道一些信息,如数据库服务器的主机名或ip地址,使用的通讯协议、端口号、以及对应的数据库服务名,这些须要在客户端设置
1)在win7上安装oracle客户端软件
双击上图中第二个文件安装
安装完成时候会在c:盘下生成oracle文件夹:
2)找到c:\oracle\product\11.2.0\client_lite\network\admin\tnsnames.ora文件,并修改,修改结果以下:
3)注意:须要在hosts文件里面添加解析
4)在win7客户端上打开命名行,执行命令链接
已经远程链接到oracle服务器