单实例环境(不是RAC),侦听器和实例必须要在同一台机器上。两台机器通信必须使用一个网络协议才能进行通信,假如浏览网页需要使用http协议,远程连接需要使用RDP/ssh/telnet等等。
有一台oracle服务器,有个客户端要连接到oracle服务器上,两台机器通信就要使用oracleNET协议,和以上的协议是一样的。有协议就要有相应的端口,所以oracleNET有个默认的侦听端口1521.
其实配置oracle网络就是配置oracle侦听器,侦听器很重要,如果没有配置侦听器,客户端是无法连接到oracle服务器上面的。其实即使是在本地连接oracle服务器,侦听器也是必须要运行的。客户端远程连接到oracle服务器时使用oracleNet协议,是被封装到了tcp/ip协议中。如果是直接在本地连接数据库用的是IPC。IPC是指<进程间的通信>。
侦听器是用来接收外面的请求,在将外面的请求通过服务器进程交给实例,所以实例必须要向侦听器注册。如果监听器不知道有相应的实例肯定是不行的--即让侦听器知道有实例可以连接。oracle默认侦听器的端口是1521。
侦听器的配置文件存放在:$ORACLE_HOME/network/admin/中的instener.ora是侦听器的配置文件
如果listerner的端口使用默认的1521的话,可以没有listener.ora,但是建议最好不要删除这个文件。
创建侦听器
可以通过修改listener.ora来配置侦听器以外,还可以使用其他工具来配置侦听器
netca
netmgr
使用netca添加侦听器的方法
查看默认侦听器的状态
查看LISTENER1的状态
远程客户端连接方式
远程客户端连接oracle服务器可以使用以下两个方式:
1.easy connect: conn user/[email protected]:port/orcl as sysdba
2.tnsnames: conn user/[email protected]
使用easy connect方式远程连接oracle服务器
客户端是win7系统,需要安装oracle客户端程序
删除listener.ora文件中的标识的行
停止侦听器服务
[[email protected] admin]$ lsnrctlstop
启动侦听器服务
[[email protected] admin]$ lsnrctl start
再去连接实例时,就无法连接,提示没有listener.
将侦听器还原到没有删除之前的状态,然后重启服务lsnrctl stop/start
使用netmgr工具
删除listener1侦听器,单击左侧“X”按钮
可以使用easy connect和tnsnames的方式连接
Tnsnames连接方法:<推荐的客户端连接方式> conn user/[email protected]
Tnsnames涉及到一个文件:tnsnames.ora是一个客户端的工具,将tnsnames.ora拷贝到oracle客户端安装目录中。
使用记事本打开tnsnames.ora文件,原始内容如下
对原始内容中如图所示部分复制并粘贴到tnsnames.ora中的空白位置,进行修改
修改为
然后保存退出。
连接实例
使用netmgr添加监听器
使用listener1侦听器连接实例,结果是无法连接到实例,因为实例orcl并没有在listener1侦听器上注册。默认情况下orcl实例注册到了默认的侦听器1521上面,所以目前只能使用1521来连接。
实例注册到侦听器的方法有:
静态注册:在listener.ora文件中手工指定
动态注册:pmon进程每隔一分钟将服务名和实例名注册到侦听器上面
将实例注册到侦听器的方法
使用alter system register可以将实例注册到侦听器上。这个命令将实例注册到哪个侦听器上了呢?这条命令将实例注册到了默认的侦听器上面了。
ORCL是tnsnames中的解析名:即使用ORCL就能够解析出(ADDRESS = (PROTOCOL = TCP)(HOST =orclsrv)(PORT = 1521))这个地址。
SQL>alter system set local_listener="(ADDRESS = (PROTOCOL = TCP)(HOST= orclsrv)(PORT = 1521))";与alter system set local_listener=ORCL是等价的。
将实例注册到listener1上面
SQL>alter system set local_listener="(ADDRESS = (PROTOCOL = TCP)(HOST= orclsrv)(PORT = 1522))";
此时使用默认的侦听器就无法连接到实例了。
修改tnsnames.ora中的文件
SQL>alter system setlocal_listener=LISTENER2;
系统已更改。
查看实例注册到了哪个侦听器上面:show parameter local;
如果对此文有什么问题的话,请加下面微信一起探讨
原文地址:http://blog.51cto.com/11233498/2131347