Oracle监听
介于Oracle的数据库和客户端之间的通道。因为数据库本身不对外提供服务,所以需要通过监听器来实现。
几个相关的参数:
local_listener
db_domain
remote_listener
service_names
相关命令:
监听命令:lsnrctl
参数:
1、start/stop 启动/关闭服务
2、service 查看当前已注册的服务
3、status 查看注册服务的状态
登录数据库命令:sqlplus
为了使用监听器,首先就要启动监听:
lsnrctl start
监听注册过程
一、数据库根据service_names/db_domain两个参数,创建服务名:
service_name1.db_domain ... service_nameN.db_domain
默认为数据库的实例名。
二、将服务名注册到监听器,如果监听器没有启动,则以:lsnrctl start启动;注册内容有服务名、端口(默认1521)等
三、监听器对外提供已注册的服务
四、外部客户端通过该服务器的1521端口连接到数据库
监听需要注册服务,有两种方式:
一种是静态注册。在启动监听的时候,根据监听文件($ORACLE_HOME/network/admin/listener.ora)直接注册
这种方式不管数据库是否启动,都会注册一个监听服务。因此,通过这个服务去连接数据库,有可能连接不上,也有可能
连接上。
其状态显示的是unknown,也就是说它此时是不知道数据库是否可以连接的。
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
一种是动态注册。数据库启动后,自动会将服务名注册到监听器上。因此,通过这类服务去连接,是可以确保连接成功的。
动态注册除了数据库启动时会自动注册,也可以通过以下命令手工注册:
alter system register;
如果不执行手工命令进行动态注册,数据库也会间隔1分钟自动发起注册。
其状态显示的是ready,也就是说此时已经准备好连接了。
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
如果此时数据库是关闭的,将不会有动态注册的信息显示,而静态注册却依然存在。
对于监听文件
如果不存在,数据库会按照当前的服务名参数(service_names)中提供的服务名,会自动将服务注册到监听器上。
如果存在,则按照监听文件中提供的服务名进行注册,数据库也会发起注册到监听器上。此时动态注册和静态注册会同时存在。
前面已经说到,注册到监听器上的服务名,是由service_names参数决定的,可以指定多个,以逗号分隔,如下:
SQL> show parameter service_names;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string orcl,wanghf
除了服务名,还可以为服务指定一个域名,可以让将服务名让各个不同的外部系统调用:
SQL> alter system set db_domain='abc.com' scope=memory;
alter system set db_domain='abc.com' scope=memory
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
SQL> alter system set db_domain='abc.com' scope=spfile;
从上面可以看到,这个参数的修改需要重启数据库,而不能立即生效。
修改后,查看监听状态信息便显示如下(部分):
Service "wanghf.abc.com" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
对于动态注册,如果没有特殊设置,则到目前为止已经可以正常连接和操作了。
但是,如果需要修改默认端口(1521),那该怎么做?这个时候,local_listener参数就出现了。
可以按如下命令进行设置:
alter system set local_listener='(ADDRESS = (PROTOCOL=TCP)(HOST=localhost)(PORT=1522))';
其中,端口可以按要求做修改。设置此参数后,再手工注册一下即可:
alter system register;
或者等待最多一分钟,数据库也会自动重新注册。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12932950/viewspace-706407/,如需转载,请注明出处,否则将追究法律责任。