天天看点

Oracle监听注册和sqlnet,Oracle监听的动态注册与静态注册

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/,如需转载,请注明出处,否则将追究法律责任。