何谓监听?
监听是连接客户端和Oracle数据库的“桥梁”,远程客户端进程只有通过服务端的监听认证、转发才能连接到数据库。
特点:
?监听和实例是多对多的关系。一个监听可以服务于多个实例。{重启主机前一定要检查主机上运行着多少个监听。}
?监听串行处理客户端连接的会话。
?监听的认证和转发只作用于会话连接的一瞬间。
?监听的启停与关闭对已连接的会话不受影响。
注册方式:
?动态注册:由Oracle PMON进程将数据库实例信息动态注册至监听上,默认oracle自动注册1521的监听,
对于非1521的端口,要设置local_listener参数:方法一.tnsname.ora中增加对应端口的数据库连接别名wzy1522, alter system set local_listener=wzy1522
方法二.alter system set local_listener='(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 100.100.100.105)(PORT = 1522)))'
动态注册方式下,监听启动顺序的比较:
监听先于数据库启动:数据库实例在NOMOUNT过程中由PMON进程在监听中负责注册服务名(参数serivce_name)和实例名(参数instance_name)数据库启动完成,客户端即可连接。
监听后于数据库启动:在监听启动完毕之后,由PMON进程自动往监听中动态注册实例信息。监听启动完成,客户端不一定能连接,需要执行alter system register,alter system set service_name=?xxx?。
***动态注册分析***
如果/etc/hosts配置文件有问题,往往不能进行动态注册。
动态注册存在bug,即实例状态突然从lsnrctl status中消失。
推荐使用静态注册!!!
?静态注册:是要指定监听需要服务于特定实例的客户端连接。
listener.ora中增加SID_LIST_LISTENER*模块,典型配置如下:
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.4.37)(PORT=1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=wzy)
(ORACLE_HOME=/s01/oradata/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=wzy)
)
)
LISTENER1522=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.4.37)(PORT=1522))
)
)
SID_LIST_LISTENER1522=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=wzy)
(ORACLE_HOME=/s01/oradata/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=wzy)
)
)
----SID_NAME:监听服务的实例名
----GLOBAL_NAME: 监听服务的服务名
----ORACLE_HOME:监听服务的$ORACLE_HOME目录
***静态注册特点:***
?与数据库启动顺序无关。数据库启动完成之后,客户端即可连接至数据库。
?监听中的实例状态显示为unknown与实例的真正状态无关!
?如果存在多张网卡,listener.ora中的host关键字可以配置为0.0.0.0。表示监听对多个IP同时生效,在HA环境中尤其有用!
?如果需要在listener.ora增加实例信息,只需执行lsnrctl reload即可,无须重启监听。
?静态注册和动态注册可以共存。
补充:
sqlplus username/password@[//]host[:port]/service_name--不依赖于tnsname.ora
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28346613/viewspace-1100816/
,如需转载,请注明出处,否则将追究法律责任。