oracle监听深入浅出
- 格式:docx
- 大小:464.71 KB
- 文档页数:15
Oracle监听 在专用服务器模式中,监听的工作极其简单,只是当客户端用户登录数据库时,客户端进程发送请求,服务器端的监听程序监听到用户进程的请求,使用listener.ora核对用户连接信息,如果正确,则启动一个服务器进程,然后把用户进程直接或者间接交付给服务器进程,至此监听程序的工作就完毕了,所以基本上监听是不会有负载的压力的,除非在同一时刻有大量的客户端进程并发的请求连接。 在服务器端新建实例之后,可以通过netca命令调出图形配置界面,配置一个默认的监听程序,一般默认起名为LISTENER。 [oracle@localhost admin]$ pwd /oracle/product/10.1.0/db/network/admin [oracle@localhost admin]$ [oracle@localhost admin]$ ll total 16 drwxr-x--- 2 oracle oinstall 4096 Mar 14 2014 samples -rw-r----- 1 oracle oinstall 172 Dec 26 2003 shrept.lst [oracle@localhost admin]$ [oracle@localhost admin]$ netca 调出配置监听的图形界面 netca创建监听的目的就是为了在listener.ora文件中创建如下内容: [oracle@localhost admin]$ more listener.ora # listener.ora Network Configuration File: /oracle/product/10.1.0/db/network/adm in/listener.ora # Generated by Oracle configuration tools.
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/product/10.1.0/db) (PROGRAM = extproc) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) 一般需要把LISTENER下面的HOST改完该主机的ip地址 即改为如下内容: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/product/10.1.0/db) (PROGRAM = extproc) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.24.31.63)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) 此时数据库监听的状态是: [oracle@localhost admin]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 04-JAN-2015 18:43:12 Copyright (c) 1991, 2005, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.24.31.63)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production Start Date 04-JAN-2015 18:37:16 Uptime 0 days 0 hr. 5 min. 56 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /oracle/product/10.1.0/db/network/admin/listener.ora Listener Log File /oracle/product/10.1.0/db/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0))) Services Summary... Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... Service "oracle10g" has 1 instance(s). Instance "oracle10g", status READY, has 1 handler(s) for this service... Service "oracle10gXDB" has 1 instance(s). Instance "oracle10g", status READY, has 1 handler(s) for this service... Service "oracle10g_XPT" has 1 instance(s). Instance "oracle10g", status READY, has 1 handler(s) for this service... The command completed successfully 注意标红部门的就是我们创建的默认的监听程序进程。现在监听程序是可以正常提供服务的,也就是客户端进程可以登录。 这是oracle监听的动态注册,一般动态注册可以满足大部分的需求,但是动态注册也存在一个问题,那就是当你在重启监听之后,实例有时不是马上会注册到监听里,这一操作是由pmon进程完成的。 动态注册是在instance启动的时候,PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。 注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的db_name的值。如果在RAC中配置,您必须将集群中每个实例的instance_name参数设置为一个唯一的值。
注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的 db_name和db_domain的值来注册自己。如果选择提供service_names值,您可以使用完全限定的名称(比如 orcl.oracle.com)或缩写的名称(比如orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是 service_name值和db_domain值的拼接。 这里要注意的是:动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数。
Local_listener的官方解释如下: LOCAL_LISTENER specifies a network name that resolves to an address or address list of Oracle Net local listeners (that is, listeners that are running on the same machine as this instance). The address or address list is specified in the TNSNAMES.ORA file or other address repository as configured for your system.
简单地说pmon 在注册服务的时候会做这样的事情。 1. 如果你配置了local_listener, 那么pmon 就把服务注册到你指定的位置 2. 如果你没配置local_listener , 那么PMON会看一下hostname 返回的主机名,再把数据库的服务注册到返回的主机名(或者对应的IP地址)的1521 端口。这时就是默认的动态注册的情况。 所以需要保障/etc/hosts文件内部主机和ip的对应关系是监听里要注册的ip地址。 [root@localhost ~]# vi /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 172.24.31.63 localhost.localdomain localhost