oracle_listener_详解
- 格式:pdf
- 大小:283.10 KB
- 文档页数:47
Oracle监听器密码设置⽅法(LISTENER)监听器也有安全?Sure!在缺省的情况下,任意⽤户不需要使⽤任何密码即通过lsnrctl ⼯具对Oracle Listener进⾏操作或关闭,从⽽造成任意新的会话都将⽆法建⽴连接。
在Oracle 9i 中Oracle监听器允许任何⼀个⼈利⽤lsnrctl从远程发起对监听器的管理。
也容易导致数据库受到损坏。
1. 未设定密码情形下停⽌监听[oracle@test ~]$ lsnrctl stop listener_demo92 -->停⽌监听,可以看出不需要任何密码即可停⽌LSNRCTL for Linux: Version 9.2.0.8.0 - Production on 26-JUN-2011 08:22:26Copyright (c) 1991, 2006, Oracle Corporation. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))The command completed successfully2. 重新启动监听并设置密码[oracle@test ~]$ lsnrctlLSNRCTL for Linux: Version 9.2.0.8.0 - Production on 26-JUN-2011 08:24:09Copyright (c) 1991, 2006, Oracle Corporation. All rights reserved.Welcome to LSNRCTL, type "help" for information.LSNRCTL> set current_listener listener_demo92 -->设置当前监听器Current Listener is listener_demo92LSNRCTL> start -->启动过程也不需要任何密码,启动的详细信息省略LSNRCTL> change_password -->使⽤change_password来设置密码Old password:New password:Reenter new password:Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))Password changed for listener_demo92The command completed successfullyLSNRCTL> save_config -->注意此处的save_config失败Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))TNS-01169: The listener has not recognized the passwordLSNRCTL> set password -->输⼊新设定的密码验证Password:The command completed successfullyLSNRCTL> save_config -->再次save_config成功Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))Saved listener_demo92 configuration parameters.Listener Parameter File /oracle/92/network/admin/listener.oraOld Parameter File /oracle/92/network/admin/listener.bakThe command completed successfully-->增加密码之后可以看到listener.ora⽂件中有⼀条新增的记录,即密码选项(注:尽管使⽤了密码管理⽅式,仍然可以⽆需密码启动监听)[oracle@test admin]$ more listener.ora#----ADDED BY TNSLSNR 26-JUN-2011 05:12:48---PASSWORDS_listener_demo92 =#--------------------------------------------3. 尝试未使⽤密码的情况下停⽌监听[oracle@test ~]$ lsnrctl stop listener_demo92LSNRCTL for Linux: Version 9.2.0.8.0 - Production on 26-JUN-2011 06:09:51Copyright (c) 1991, 2006, Oracle Corporation. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))TNS-01169: The listener has not recognized the password -->收到错误信息,需要使⽤密码认证4. 使⽤密码来停⽌监听[oracle@test ~]$ lsnrctlLSNRCTL> set current_listener listener_demo92Current Listener is listener_demo92LSNRCTL> stopConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))TNS-01169: The listener has not recognized the passwordLSNRCTL> set passwordPassword:The command completed successfullyLSNRCTL> stopConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))The command completed successfullyLSNRCTL> statusConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))TNS-12541: TNS:no listenerTNS-12560: TNS:protocol adapter errorTNS-00511: No listenerLinux Error: 111: Connection refusedConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))TNS-12541: TNS:no listenerTNS-12560: TNS:protocol adapter errorTNS-00511: No listenerLinux Error: 2: No such file or directory5. save_config失败的问题-->在 Oracle 9i中,使⽤save_config命令将会失败LSNRCTL> save_configConnecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname>)(PORT=<port>)))TNS-01169: The listener has not recognized the password-->应该先使⽤set password之后再save_config,则保存配置成功。
windows oracle实例启动流程Windows Oracle实例启动流程一、引言Oracle是一种常用的关系型数据库管理系统,而Windows是最常见的操作系统之一。
在Windows上启动Oracle实例是使用Oracle数据库的前提,本文将详细介绍Windows上Oracle实例的启动流程。
二、检查环境配置在启动Oracle实例之前,需要确保Windows操作系统已正确安装并配置了Oracle软件。
首先,要检查Oracle软件是否已正确安装,并且所需的环境变量已经设置。
环境变量包括ORACLE_HOME、ORACLE_SID和PATH等,它们分别指定了Oracle软件安装路径、当前实例的唯一标识和执行文件的搜索路径。
三、启动监听(Listener)监听是Oracle数据库与客户端之间的通信桥梁,它负责接收来自客户端的连接请求,并将请求转发给相应的数据库实例。
在启动Oracle实例之前,需要先启动监听。
通过命令行或者图形界面工具可以启动监听,监听的配置文件为listener.ora。
四、启动数据库实例数据库实例是Oracle数据库的一个运行实例,可以理解为数据库的一个副本。
在启动数据库实例之前,需要先确定要启动的实例的唯一标识(ORACLE_SID)。
通过命令行或者图形界面工具可以启动数据库实例,启动的配置文件为init.ora或spfile。
五、连接数据库一旦数据库实例启动成功,就可以通过客户端工具连接到数据库。
常见的客户端工具包括SQL*Plus、SQL Developer和Toad等。
在连接数据库时,需要指定正确的数据库实例名、用户名和密码。
六、启动流程总结Windows上Oracle实例的启动流程如下:1. 检查环境配置,确保Oracle软件已正确安装并配置了环境变量。
2. 启动监听,监听负责接收客户端的连接请求。
3. 启动数据库实例,确定要启动的实例的唯一标识。
4. 连接数据库,使用客户端工具连接到数据库。
Oracle数据库监听器(LISTENER)和本地服务名(Tnsname)配置分类:Oracle 基础知识2009-11-24 10:12 8315人阅读评论(7) 收藏举报一、监听器(LISTENER)监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。
既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。
二、本地服务名(Tnsname)Oracle客户端与服务器端的连接是通过客户端发出连接请求,由服务器端监听器对客户端连接请求进行合法检查,如果连接请求有效,则进行连接,否则拒绝该连接。
本地服务名是Oracle客户端网络配置的一种,另外还有Oracle名字服务器(Oracle Names Server)等。
Oracle常用的客户端配置就是采用的本地服务名,本文中介绍的也主要是基于本地服务名的配置。
三、Oracle网络连接配置方法配置Oracle服务器端与客户端都可以在其自带的图形化Oracle网络管理器(Oracle Net Manager)里完成(强烈建议在这个图形化的工具下完成Oracle 服务端或客户端的配置)。
在Windows下,点击“开始/程序/Oracle - OraHome92/Configuration and Migration Tools/Net Manager”启动Oracle网络管理器工具,在Linux/Unix下,利用netmgr命令来启动图形化Oracle网络管理器,如:$ netmgrWindows下启动Net Manager图形窗口如下图示:图(一)1、 Oracle监听器配置(LISTENER)如图(一)示,选中树形目录中监听程序项,再点击左上侧“+”按钮添加监听程序,点击监听程序目录,默认新加的监听器名称是LISTENER(该名称也可以由任意合法字符命名)。
选中该名称,选中窗口右侧栏下拉选项中的“监听位置”,点击添加地址按钮。
oracle listener troubleshooting小结-回复Oracle Listener是Oracle数据库的网络服务程序,负责接收客户端连接请求,并将请求转发给相应的数据库实例。
在使用Oracle数据库时,可能会遇到一些Oracle Listener的故障,例如无法启动、无法连接等问题。
本文将对Oracle Listener的故障排除进行详细分析,并提供相应的解决方案。
一、Oracle Listener不能启动的故障1. 检查监听器日志文件在Oracle Listener的配置文件中,可以指定日志文件的路径和名称。
检查该日志文件,查看是否有任何错误或提示信息。
如果存在错误,根据错误提示进行相应的修复。
2. 检查监听器的配置文件监听器的配置文件通常为listener.ora,位于Oracle数据库安装目录下的NETWORK/ADMIN目录中。
使用文本编辑器打开该文件,检查其中的配置信息是否正确。
主要关注以下内容:- 监听器监听的端口是否正确配置- 监听器监听的服务是否正确配置- 监听器的日志文件是否正确配置- 监听器的日志级别是否合适通过终端或命令提示符窗口运行“lsnrctl status”命令,检查监听器的运行状态。
如果监听器未运行,可以使用“lsnrctl start”命令启动监听器。
4. 检查防火墙设置防火墙可能会阻止Oracle Listener的正常运行。
确保防火墙未阻止监听器端口的访问。
如果需要,可以将监听器端口添加到防火墙的例外列表中或者关闭防火墙。
5. 检查操作系统的资源限制监听器可能受到操作系统资源限制的影响导致无法启动。
检查操作系统的资源限制设置,尤其是文件描述符限制,如果设置过低,可以适当调整。
二、无法连接到Oracle Listener的故障1. 检查网络连接检查客户端和服务器之间的网络连接是否正常。
确保客户端能够正常访问服务器,并且没有任何网络层面的阻塞。
Oracle 12c连接PDB时,listener和tnsnames.ora配置1、配置监听首先要明确,所有的PDB都使用1个监听,配置多个实际上启动时也只有第1个有意义。
LISTENER =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c_A)(PORT = 1521)) )接下来使用SID_LIST_LISTENER来进行静态注册服务。
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = ora12c) #该服务是我配置的cdb信息(SID_NAME = ora12c))(SID_DESC =(GLOBAL_DBNAME = pdborcl)#该服务是我配置的pdb信息(SID_NAME = ora12c)))ADR_BASE_LISTENER = /opt/oracle2、tnsnames.ora配置观察发现,在tnsnames中配置pdb跟CDB,即原来11g的配置完全一样。
这里SERVICE_NAME = pdborcl使用得是PDB的名字,可以在v$pdbs中查看。
ORA12C =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c_A)(PORT = 1521)) )(CONNECT_DATA =(SERVICE_NAME = ora12c)))pdborcl =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = ora12c_A)(PORT = 1521)) )(CONNECT_DATA =(SERVICE_NAME = pdborcl)))3、为了保险,检查下sqlnet.oraNAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)这一句是为了保证优先使用TNSNAMES解析。
listener_orcl作用
listener_orcl是Oracle数据库中监听程序的名称。
它的作用是
监听数据库实例与客户端之间的通信连接请求,并协调客户端与数据库之间的数据传输。
具体来说,listener_orcl可以:
1. 接受客户端的连接请求并将其转发给数据库实例。
2. 对客户端的连接请求进行认证和授权。
3. 监控数据库实例的可用性,并在数据库实例故障时进行自动切换。
4. 保持与客户端之间的连接,以便实时传输数据。
5. 跟踪和记录连接和传输错误,以便进行故障排除和性能优化。
总之,listener_orcl扮演着重要的角色,确保数据库与客户端
之间的通信正常,并提供安全、高效的数据传输服务。
Oracle 监听器Listener资料Oracle 监听器Listener 是一个重要的数据库服务器组件,在整个Oracle 体系结构中,扮演着重要的作用。
它负责管理Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是TCP 1521端口)上监听连接请求,并将连接转发给数据库,下面的部分,会从几个方面对监听器进行简单介绍。
1.监听器的功能从当前的Oracle 版本看,Listener 主要负责下面的几方面功能:1. 监听客户端请求。
监听器运行在数据库服务器之上,与Oracle 实例(可为多个)相关关联,是一个专门的进程process,在Windows 的服务项目或者Linux 的运行进程列表中,都会看到对应的运行进程。
Windows 上名为TNSLSNR,Linux/Unix 平台上是lsnrctl。
监听器守候在服务器制定端口(默认为:1521),监听客户端的请求。
2. 为客户端请求分配Server Process。
监听器只负责接听请求,之后将请求转接给Oracle Server Process。
在Oracle 的服务模式下,客户端进程是不允许直接操作数据库实例和数据,而是通过一个服务进程Server Process(也称为影子进程)作为代理。
监听器接受到请求之后,就向操作系统(或者Dispatcher 组件)要求fork (或分配)一个Server Process 与客户端相连。
3. 注册实例服务。
本质上讲,Listener 是建立实例和客户端进程之间联系的桥梁。
Listener 与实例之间的联系,就是通过注册的过程来实现的。
注册的过程就是实例告诉监听器,它的数据库数据库实例名称instance_name 和服务名service_names。
监听器注册上这样的信息,对客户端请求根据监听注册信息,找到正确的服务实例名称。
目前Oracle 版本中,提供动态注册和静态注册两种方式。
oracle listener 路径Oracle Listener 路径Oracle数据库是一种关系型数据库管理系统,广泛应用于企业级应用程序。
Oracle数据库由多个组件组成,其中一个重要的组件就是Oracle Listener(监听器)。
Oracle Listener是一个网络服务,用于接收客户端应用程序的连接请求,并将这些请求转发给数据库实例进行处理。
在Oracle数据库中,Listener的路径是指Listener 的配置文件所在的路径。
Listener的配置文件名为listener.ora,它通常位于$ORACLE_HOME/network/admin目录下。
$ORACLE_HOME是Oracle数据库软件的安装目录,该目录包含了Oracle数据库的所有安装文件和相关配置文件。
在listener.ora文件中,可以定义Listener的监听地址、监听端口、监听协议等信息。
在listener.ora文件中,可以配置多个监听地址。
每个监听地址由以下几部分组成:1. 协议:Oracle Listener支持多种协议,如TCP/IP、IPC(Inter-Process Communication)、SDP(Socket Direct Protocol)等,可以根据需要选择合适的协议。
协议的配置方式为:(PROTOCOL=协议名称)。
2. IP地址:监听器所在主机的IP地址,可以是IPv4地址或IPv6地址。
IP地址的配置方式为:(HOST=IP地址)。
3. 端口:监听器监听的端口号,客户端应用程序通过该端口与监听器进行通信。
端口的配置方式为:(PORT=端口号)。
4. 服务名称:监听器将请求转发给的数据库实例的服务名称。
服务名称的配置方式为:(SERVICE_NAME=服务名称)。
下面是一个示例的listener.ora文件内容:```LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = /opt/oracle/product/12.1.0/dbhome_1) (PROGRAM = extproc)))```在上述示例中,listener.ora文件定义了一个名为LISTENER的监听器。
local_listener参数local_listener参数是Oracle数据库中的一个非常重要的参数,它是用来指定数据库实例的本地监听器地址的。
本地监听器是一个监听程序,用于侦听本地服务器上的客户端连接请求,接收并处理这些请求,并将它们转发给Oracle数据库实例。
因此,正确设置local_listener参数对于保证数据库的可靠运行至关重要。
下面我们将分步骤阐述如何设置local_listener参数:步骤一:确定本地监听器地址首先,需要确定本地监听器地址。
常见的本地监听器地址格式为:(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521)),其中hostname为本地服务器的主机名或IP地址,1521为监听端口号。
根据实际情况,可以修改这些参数的值。
步骤二:查看当前的local_listener参数值执行以下SQL命令,可以查看当前的local_listener参数值:SQL> show parameter local_listener;如果返回结果为空,则说明当前没有设置local_listener参数。
否则,会显示当前的local_listener参数值。
步骤三:设置local_listener参数如果需要修改local_listener参数值,可以使用以下SQL命令:SQL> alter system setlocal_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1 521))' scope=both;其中,'(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521))'为需要设置的本地监听器地址。
执行以上命令后,会将local_listener参数值更新为新地址。
步骤四:重新启动数据库实例修改local_listener参数值后,需要重新启动Oracle数据库实例才能使新设置生效。
Oracle数据库TNS详解⽬录阐述介绍SQL Serve 和 Oracle⼀些区别配置⽂件和路径举例说明总结阐述TNS是Oracle数据库正确使⽤的必备条件之⼀,它⽤来管理和配置Oracle连接⼯具,⽬前我有⽤的⼯具如:SQL Server和Toad,它像是⼀个中间的桥梁,让客户端和数据库可以进⾏通讯,也就是我们平时的读写等等。
简要介绍透明⽹络底层(transparence Network Substrate),它最重要的⼀个作⽤是监听服务,很多情况下都要配置DNS,JDBC这⾥不考虑。
SQL Serve 和 Oracle⼀些异同点相同点:语法基本⼀致,使⽤也都类似,⼯具只是载体不同点:因为本篇主要讲述TNS,所以主要说关于TNS不同点。
SQL Serve会⾃动列出局域⽹中出现的服务器,只需要在⼯具上⾯选择指定服务器,然后输⼊账号和密码即可。
Oracle则不⼀样,不能⾃动列出局域⽹中的服务器,所以必须要配置TNS。
配置⽂件和路径配置⽂件:tnsnames.ora默认路径:%ORACLE_HOME%\network\admin\tnsnames.ora,%ORACLE_HOME%通常在环境变量中使⽤。
举例说明# tnsnames.ora Network Configuration File: C:\oracle\product\11.2.0\client_1\NETWORK\ADMIN\tnsnames.ora# Generated by Oracle configuration tools.GSSPRD=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.**.**.**)(PORT=1505))(CONNECT_DATA=(SERVICE_NAME= GSSED)))GSSPE=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.**.**.**)(PORT=1505))(CONNECT_DATA=(SERVICE_NAME=GSSPE)))相信也没⼈会攻击我的IP,不过还是隐藏。
OracleListener⽇志位置及压缩转移近⽇由于Oracle Listener异常断开导致应⽤⽆法上传数据,需要从listener⽇志开始分析问题原因。
此⽂介绍如何获取⽇志位置。
由于⽇志⽂件⼤⼩问题,同时将⽇志⽂件进⾏压缩存放。
alert⽇志[grid@test-rac1 ~]$ lsnrctl show log_fileLSNRCTL for Linux: Version 12.1.0.2.0 - Production on 30-JUN-2016 11:02:35Copyright (c) 1991, 2014, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))LISTENER parameter "log_file" set to /u1/app/grid/diag/tnslsnr/test-rac1/listener/alert/log.xmlThe command completed successfullyalert⽇志是xml⽂件格式,同时它会按照固定⼤⼩⾃⾏分割。
-rw-r-----. 1 grid oinstall 10486185 Jun 28 03:57 log_75.xml-rw-r-----. 1 grid oinstall 10485849 Jun 29 00:08 log_76.xml-rw-r-----. 1 grid oinstall 10485993 Jun 30 02:33 log_77.xml-rw-r-----. 1 grid oinstall 3416684 Jun 30 11:03 log.xmltrace⽇志获得⽇志位置,trace⽇志为log⽂件,⼀条记录⼀⾏,⽐较便于阅读。
[grid@test-rac1 ~]$ lsnrctl show trc_directoryLSNRCTL for Linux: Version 12.1.0.2.0 - Production on 30-JUN-2016 11:45:33Copyright (c) 1991, 2014, Oracle. All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))LISTENER parameter "trc_directory" set to /u1/app/grid/diag/tnslsnr/test-rac1/listener/traceThe command completed successfully[grid@test-rac1 ~]$ ll /u1/app/grid/diag/tnslsnr/test-rac1/listener/tracetotal 416804-rw-r-----. 1 grid oinstall 419234429 Jun 30 11:47 listener.log⽇志分割因为当前的listener.log⽇志⽂件已经超过400M,需要先将此⽂件分割。
Oracle数据库TNS配置方法详解Oracle中TNS的完整定义:transparence Network Substrate 透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS 当作只是监听器。
TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle 数据库,比如通过JDBC。
如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序。
Oracle当中,如果想访问某个服务器,必须要设置TNS,它不像SQL SERVER那样在客户端自动列举出在局域网内所有的在线服务器,只需在客户端选择需要的服务器,然后使用帐号与密码登录即可。
而Oracle不能自动列举出网内的服务器,需要通过读取TNS配置文件才能列出经过配置的服务器名。
配置文件名一般为:tnsnames.ora,默认路径:%ORACLE_HOME%\network\admin\tnsnames.ora上图中的CGDB和STDCG就是对应的TNS,HOST是指向数据库服务器的IP,当然局域网内用计算机名称也是可以的。
通过客户端Net Manager创建一个连接到数据库服务器的连接服务时,实际上就是在tnsnames.ora文件中增加了一个TNS的内容。
TNS的详细配置文件TNS的配置文件包括服务器端和客户端两部分。
服务器端有listener.ora、sqlnet.ora和tnsnames.ora,如果通过OCM(Oracle Connection Manage)和域名服务管理客户端连接,服务器端可能还包括cman.ora等文件;客户端有tnsnames.ora,sqlnet.ora。
Oracle 所有的TNS配置文件的默认路径:%ORACLE_HOME%\network\admin listener.ora:监听器配置文件,成功启动后是驻留在服务器端的一个服务。
listener log 详解
在Oracle数据库中,监听日志文件()记录了服务注册事件的相关信息。
当服务注册期间,PMON进程会向监听器提供数据库的每个运行实例的服
务名、数据库实例名、可用的服务处理器(调度程序或专用服务器)、调度程序、实例和节点负载信息等,这些信息均记录在中。
监听日志文件的位置因Oracle版本不同而有所差异:对于Oracle 9i/10g,监听日志文件位于$ORACLE_HOME/network/log/listener_$ORACLE_;
对于Oracle 11g/12c,监听日志文件位于$ORACLE_BASE/diag/tnslsnr/
主机名称/listener/trace/。
此外,需要定期清理监听日志文件,以防止文件过大。
清理时可以使用相应的工具或手动删除不必要的日志。
如需更多关于listener log的介绍,建议咨询计算机专家或查阅Oracle数
据库相关书籍。
OracleLISTENER监听⽂件参数详解及Lsnrctl命令综述Oracle LISTENER监听⽂件参数详解及Lsnrctl命令综述# listener.ora Network Configuration File: F:\oracle\product\10.2.0\db_1\network\admin\listener.ora# Generated by Oracle configuration tools.LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(ADDRESS_LIST =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = D:\oracle)(PROGRAM = extproc)))以上是本⼈本机上的⼀个监听⽂件,下⾯就该监听⽂件的各个参数的作⽤作个描述:LISTENER 指出⼀个监听器定义的起始点。
它实际上是正被定义的当前监听器的名称。
默认的名称是LISTENER。
DESCRIPTION 描述每个监听位置ADDRESS_LIST 含有与监听器正在监听的那些位置有关的地址信息PROTOCOL 指定⽤于本监听位置的协议HOST 保存监听器所驻留在的那台计算机的名称PORT 含有监听器正在上⾯监听的地址SID_LIST_LISTENER 定义配置监听器所针对的ORACLE服务的列表SID_DESC 描述每个Oracel SIDGLOBAL_DBNAME 标识全局数据库名称。
本项应该与当前Oracle服务的init.ora⽂件中的SERVICE_NAMES项⼀致ORACLE_HOME 给出服务器上Oracle可执⾏程序的位置SID_NAME 含有⽤于本Oracle实例的Oracle SID的名称Lsnrctl命令综述Lsnrctl命令⽤来管理Oracle监听器,是⼀个命令⾏界⾯。
Oracle监听-提纲o ORACLE工作机制o ORACLE监听参数o ORACLE监听功能o ORACLE监听配置o ORACLE网络构架o ORACLE精简版构造o ORACLE常见问题ORACLE工作机制o从一个用户请求开始讲,ORACLE的完整的工作机制是怎样的,首先一个用户进程发出一个连接请求,如果使用的是主机命名或者是本地服务命中的主机名使用的是机器名(非IP地址),那么这个请求都会通过DNS服务器或HOST文件的服务名解析然后传送到ORACLE监听进程,监听进程接收到用户请求后会采取两种方式来处理这个用户请求o下面我们分专用服务器和共享服务器分别采用这两种方式时的情况来讲专用服务器模式o一种方式是监听进程接收到用户进程请求后,产生一个新的专用服务器进程,并且将对用户进程的所有控制信息传给此服务器进程,也就是说新建的服务器进程继承了监听进程的信息,然后服务器进程给用户进程发一个RESEND包,通知用户进程可以开始给它发信息了,用户进程给这个新建的服务器进程发一个CONNECT包,服务器进程再以ACCEPT包回应用户进程,致此,用户进程正式与服务器进程确定连接。
我们把这种连接叫做HAND-OFF连接,也叫转换连接专用服务器模式o另一种方式是监听进程接收到用户进程的请求后产生一个新的专用服务器进程,这个服务器进程选用一个TCP/IP端口来控制与用户进程的交互,然后将此信息回传给监听进程,监听进程再将此信息传给用户进程,用户进程使用这个端口给服务器进程发送一个CONNECT包,服务器进程再给用户进程发送一个ACCEPT包,致此,用户进程可以正式向服务器进程发送信息了。
这种方式我们叫做重定向连接。
专用服务器模式o另HAND-OFF连接需要系统平台具有进程继承的能力,为了使WINDOWS NT/2000支持HAND-OFF必须在HKEY_LOCAL_MACHINE>SOFTWARE>ORACLE >HOMEX中设置USE_SHARED_SOCKET 。
o案例:o具体的应用环境描述如下:1、有数据库主机A,在局域网内2、局域网有代理网关服务器B操作系统3、在外网有一台工作站C。
想实现,在B机器上对A机器上的数据库Listener端口进行映射,将A机的数据库发布给外网。
在C机上通过sqlplus等工具,可以通过B机访问A机的数据库。
目前1521端口只是监听端口,数据端口是随机分配的。
o服务器上的监听进程在1521端口上进行侦听o客户端发起一个数据库连接请求o监听进程listern一个Oracle服务器进程(Server Process),也可称之为影子进程(Shadow Process )。
服务器进程选择一个大于1024的端口号进行侦听,监听进程把这个端口号发回到客户端,要求客户端重新连接这个指定的端口。
o客户端重新连接监听指定的新端口,也就是重新进行连接。
o客户端与Server Process直接对话,不再通过监听,进行会话认证(登录),执行SQL等等o Oracle客户端连接服务器,首先去找1521监听端口,服务器的1521监听端口再向server process进程发出请求,并返回一个随机端口,返回给客户端,客户端再来连接这个端口。
这样就给服务器上的防火墙设置带来了麻烦,这个端口是随机的,如何开放?o(CONNECT_DATA=(SERVICE_NAME=orcl)(CID=(PROGR AM=D:\Program?Files\Quest?Software\Toad?for?Oracle?10.6\Toad.exe)(HOST=KTSP)(USER=Administrator))) *(ADDRESS=(PROTOCOL=tcp)(HOST=192.18.0.105)(POR T=50691)) * establish * orcl * 0o从上述过程可以看到,客户端最终连接的端口实际上并不是1521。
由于防火墙一般只开放了几个端口,对Oracle数据库只开放了1521端口,这样在客户端进行第二次连接时,不能通过防火墙,导致连接数据库失败o庆幸的是,只有Windows平台上的9i及以下版本的Oracle才会有这个问题。
Oracle在Linux以及Unix平台下,多个进程间可以对端口进行复用,Oracle Server Process仍然使用的是跟监听进程一个端口(1521)。
通过在linux使用strace跟踪客户端连接数据库的过程可以发现,客户端只连接了一次,并没有进行第二次连接,与上面描述的流程相比已经发生了变化。
在Windows平台上,10g及以上版本的库,也同样利用端口复用,避免了这样的问题o方法一:n在windows2000的注册表中,hkey_local_machine\software\oracle\home0\下加入字符串值:USE_SHARED_SOCKET=TRUE,即可o方法二:n1、首先将数据库实例改为SHARED SERVER模式2、以SYSDBA登录SQLPLUS,通过SQLPLUS生成系统当前的参数设置文件pfile:create pfile='d:\init.ora' from spfile;3、修改d:\init.ora文件,在其中增加(用editplus编辑):*.service_names='yourservice name'和*.dispatchers='(address=(protocol=tcp)(host=localhost)(port=1521)(dispatchers=1)'4、生成新的SPFILE:create spfile from pfile='d:\init.ora';5、重启动数据库。
6、在防火墙中开放1521端口。
o方法三:n在数据库端(也可以是另外的机器,但是cman的机器必须和数据库都在防火墙的后面)安装了cman的前提下,启动cman,然后开放防火墙端的1630端口(看cman开的是什么端口啦),最后在客户端的tnsnames.ora文件中添加:cmantest = (description = (address_list = (address = <-first address is toCMAN (protocol=tcp) (host=hostname or ip of cman) (port=1610) )(address= <-second address is to Listener (protocol=tcp) (host=hostnameor ip of listener) (port=1521) ) ) (connect_data = (sid = sidname))(source_route = yes)o ORA-3113错误:n防火墙设置了TCP连接超时,如果在1小时内没有任何活动,就会被防火墙拆除n操作系统中keep alive的相关设置,不同的系统有不同的设置方法。
比如在Linux中,在sysctl中设置net.ipv4.tcp_keepalive_time = 120,表示探测时间为120秒,即2分钟。
在AIX中,通过no命令将tcp_keepidle参数设置为240,表示探测时间为120秒。
注意AIX中这个参数的单位是1/2秒,而在Linux中是1秒o ORA-3113错误:n防火墙设置了TCP连接超时,如果在1小时内没有任何活动,就会被防火墙拆除n操作系统中keep alive的相关设置,不同的系统有不同的设置方法。
比如在Linux中,在sysctl中设置net.ipv4.tcp_keepalive_time = 120,表示探测时间为120秒,即2分钟。
在AIX中,通过no命令将tcp_keepidle参数设置为240,表示探测时间为120秒。
注意AIX中这个参数的单位是1/2秒,而在Linux中是1秒n不幸的是,通过在Linux和AIX上对Oracle进行跟踪发现,Oracle客户端连接数据库时(包括Oracle Server作为客户端连接DB LINK上的数据库),并没有在TCP Socket上打开SO_KEEPALIVE,因此不能通过设置操作系统的tcp keep alive的设置来解决此问题。
n还好Oracle提供了类似的机制。
也就是DCD(Dead Conneciton Detection)。
在$ORACLE_HOME/network/admin/sqlnet.ora文件中增加如下一行:n EXPIRE_TIME=2 分共享服务器模式o只有重定向连接的方式,工作方式是监听进程接收到用户进程的请求后产生一个新的调度进程,这个调度进程选用一个TCP/IP端口来控制与用户进程的交互,然后将此信息回传给监听进程,监听进程再将此信息传给用户进程,用户进程使用这个端口给调度进程发送一个CONNECT包,调度进程再给用户进程发送一个ACCEPT包,致此,用户进程可以正式向调度进程发送信息了。
可以通过设置MAX_DISPIATCHERS这个参数来确定调度进程的最大数目,如果调度进程的个数已经达到了最大,或者已有的调度进程不是满负荷,监听进程将不再创建新的调度进程,而是让其中一个调度进程选用一个TCP/IP端口来与此用户进程交互共享服务器模式o调度进程每接收一个用户进程请求都会在监听进程处作一个登记,以便监听进程能够均衡每个调度进程的负荷,所有的用户进程请求将分别在有限的调度进程中排队,所有调度进程再顺序的把各自队列中的部分用户进程请求放入同一个请求队列,等候多个ORACLE的共享服务器进程进行处理(可以通过SHARED_SERVERS参数设置共享服务器进程的个数),也就是说所有的调度进程共享同一个请求队列,共享服务器模式下一个实例只有一个请求队列,共享服务器进程处理完用户进程的请求后将根据用户进程请求取自不同的调度进程将返回结果放入不同的响应队列,也就是说有多少调度进程就有多少响应队列,然后各个调度进程从各自的响应队列中将结果取出再返回给用户进程共享服务器模式o调度进程每接收一个用户进程请求都会在监听进程处作一个登记,以便监听进程能够均衡每个调度进程的负荷,所有的用户进程请求将分别在有限的调度进程中排队,所有调度进程再顺序的把各自队列中的部分用户进程请求放入同一个请求队列,等候多个ORACLE的共享服务器进程进行处理(可以通过SHARED_SERVERS参数设置共享服务器进程的个数),也就是说所有的调度进程共享同一个请求队列,共享服务器模式下一个实例只有一个请求队列,共享服务器进程处理完用户进程的请求后将根据用户进程请求取自不同的调度进程将返回结果放入不同的响应队列,也就是说有多少调度进程就有多少响应队列,然后各个调度进程从各自的响应队列中将结果取出再返回给用户进程ORACLE监听参数o LISTENER 指出一个监听器定义的起始点。