今天来学习一下监听的相关内容,昨晚被老大问了两个关于监听很简单的问题,但是却吞吞吐吐回答,而且有一个问题还答错了,刚刚查了下资料,才发现“驴头对了马嘴”,哭笑不得。

一、监听(listener)是什么

监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。

oracle网络配置有三个配置文件 listener.ora,tnsnames.ora,sqlnet.ora,其目录均在$ORACLE_HOME/network/admin 。

Oracle客户端与服务器端的连接是通过客户端发出连接请求,由服务器端监听器对客户端连接请求进行合法检查,如果连接请求有效,则进行连接,否则拒绝该连接。

二、如何配置监听

1)listener.ora  主要负责服务器端的监听配置,配置的基本模板:

  1. # listener.ora Network Configuration File: /home/oracle/app/product//db/network/admin/listener.ora
  2. # Generated by Oracle configuration tools.
  3.  
  4. LISTENER_ORA = (注:LISTENER_ORA 为监听名字)
  5. (DESCRIPTION_LIST =
  6. (DESCRIPTION =
  7. (ADDRESS = (PROTOCOL = TCP)(HOST = 12.1.4.5)(PORT = ))
  8. )
  9. )
  10.  
  11. SID_LIST_LISTENER_ORA = (注:LISTENER_ORA 为监听名字)
  12.  
  13. (SID_LIST =
  14. (SID_DESC =
  15. (GLOBAL_DBNAME = wsj)
  16. (ORACLE_HOME = /home/oracle/app/product//db)
  17. (SID_NAME = wsj)
  18. )
  19. )
  1. ADR_BASE_LISTENER = /oracle/app/oracle

其中:

PROTOCOL指的是监听接收链接的协议;

HOST是指的监听运行的主机或者IP地址;

PORT指的是监听运行的端口;

SID_NAME指的是监听服务的实例名;

GLOBAL_NAME指的是监听服务的服务名;

ORACLE_HOME指的是监听服务的$ORACLE_HOME。

如果[监听名]和SID_LIST_[监听名]配置是成对出现的,这代表是静态监听;如果listener.ora文件只有[监听名]的配置,监听就变成动态监听。

动态注册:客户端(sys用户)只能在远程数据库启动的情况下连接上,远程数据库关闭时客户端连接不上远程数据库。

静态注册:无论远程数据库处于开启还是关闭状态,客户端(sys用户)都可连接上。

静态注册可以在客户端控制服务器端数据库的启停,而动态注册则不可以,动态注册的监听在实例关闭时会被注销。

数据库关闭的状态下,只有sys用户可连入数据库,其他用户不可连入。

测试:

当数据库关闭状态时,sys用户可以连入数据库,提示接入空实例。其他用户不能连接至数据库:

  1. [oracle@localhost ~]$ sqlplus / as sysdba
  2.  
  3. SQL*Plus: Release 11.2.0.4.0 Production on Sun Feb 11 21:14:56 2018
  4.  
  5. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  6.  
  7. Connected to an idle instance.
    SQL> exit

[oracle@localhost ~]$ sqlplus hr/12

SQL*Plus: Release 11.2.0.4.0 Production on Sun Feb 11 21:16:47 2018

Copyright (c) 1982, 2013, Oracle. All rights reserved.

ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Process ID: 0
Session ID: 0 Serial number: 0

a.当为动态配置时:

查看listener.ora:

  1. [oracle@localhost ~]$ cd /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/
  2. [oracle@localhost admin]$ more listener.ora
  3. # listener.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
  4. # Generated by Oracle configuration tools.
  5.  
  6. LISTENER =
  7. (DESCRIPTION_LIST =
  8. (DESCRIPTION =
  9. (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  10. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  11. )
  12. )
  13.  
  14. ADR_BASE_LISTENER = /oracle/app/oracle

在数据库关闭的情况下查看监听状态:

  1. [oracle@localhost ~]$ lsnrctl status
  2.  
  3. LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 11-FEB-2018 21:27:00
  4.  
  5. Copyright (c) 1991, 2013, Oracle. All rights reserved.
  6.  
  7. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
  8. STATUS of the LISTENER
  9. ------------------------
  10. Alias LISTENER
  11. Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  12. Start Date 11-FEB-2018 13:07:16
  13. Uptime 0 days 8 hr. 19 min. 43 sec
  14. Trace Level off
  15. Security ON: Local OS Authentication
  16. SNMP OFF
  17. Listener Parameter File /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
  18. Listener Log File /oracle/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
  19. Listening Endpoints Summary...
  20. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  21. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  22. The listener supports no services
  23. The command completed successfully

此时,远程连接数据库,发现有报错:

  1. [oracle@localhost ~]$ sqlplus sys/oracle@rcl as sysdba
  2.  
  3. SQL*Plus: Release 11.2.0.4.0 Production on Sun Feb 11 21:28:18 2018
  4.  
  5. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  6.  
  7. ERROR:
  8. ORA-12514: TNS:listener does not currently know of service requested in connect
  9. descriptor
  10.  
  11. Enter user-name:

当打开数据库再次查看监听状态:

  1. [oracle@localhost ~]$ sqlplus / as sysdba
  2.  
  3. SQL*Plus: Release 11.2.0.4.0 Production on Sun Feb 11 21:29:15 2018
  4.  
  5. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  6.  
  7. Connected to an idle instance.
  8.  
  9. SQL> startup
  10. ORACLE instance started.
  11.  
  12. Total System Global Area 830930944 bytes
  13. Fixed Size 2257800 bytes
  14. Variable Size 503319672 bytes
  15. Database Buffers 318767104 bytes
  16. Redo Buffers 6586368 bytes
  17. Database mounted.
  18. Database opened.
  19. SQL> !
  20. [oracle@localhost ~]$ lsnrctl status
  21.  
  22. LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 11-FEB-2018 21:30:09
  23.  
  24. Copyright (c) 1991, 2013, Oracle. All rights reserved.
  25.  
  26. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
  27. STATUS of the LISTENER
  28. ------------------------
  29. Alias LISTENER
  30. Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  31. Start Date 11-FEB-2018 13:07:16
  32. Uptime 0 days 8 hr. 22 min. 52 sec
  33. Trace Level off
  34. Security ON: Local OS Authentication
  35. SNMP OFF
  36. Listener Parameter File /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
  37. Listener Log File /oracle/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
  38. Listening Endpoints Summary...
  39. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  40. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  41. Services Summary...
  42. Service "ORCLXDB" has 1 instance(s).
  43. Instance "mydb", status READY, has 1 handler(s) for this service...
  44. Service "mydb" has 1 instance(s).
  45. Instance "mydb", status READY, has 1 handler(s) for this service...
  46. The command completed successfully

b.当为静态监听时:

查看listener.ora  :      <当配置listener.ora中GLOBAL_DBNAME的值  == tnsnames.ora中的SERVICE_NAME!!!!!!!!!>

  1. [oracle@localhost admin]$ more listener.ora
  2. # listener.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
  3. # Generated by Oracle configuration tools.
  4.  
  5. LISTENER =
  6. (DESCRIPTION_LIST =
  7. (DESCRIPTION =
  8. (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  9. (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
  10. )
  11. )
  12.  
  13. ADR_BASE_LISTENER = /oracle/app/oracle
  14.  
  15. SID_LIST_LISTENER =
  16. (SID_LIST =
  17. (SID_DESC =
  18. (GLOBAL_DBNAME = mydb) ##listener.ora中GLOBAL_DBNAME的值  == tnsnames.ora中的SERVICE_NAME
  19. (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1)
  20. (SID_NAME = mydb) ##可通过env | grep ORACLE查看SID_NAME和$ORACLE_HOME的值
  21. )
  22. )

在数据库关闭的情况下查看监听状态:

  1. [oracle@localhost admin]$ lsnrctl status
  2.  
  3. LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 11-FEB-2018 22:16:02
  4.  
  5. Copyright (c) 1991, 2013, Oracle. All rights reserved.
  6.  
  7. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
  8. STATUS of the LISTENER
  9. ------------------------
  10. Alias LISTENER
  11. Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  12. Start Date 11-FEB-2018 22:13:25
  13. Uptime 0 days 0 hr. 2 min. 36 sec
  14. Trace Level off
  15. Security ON: Local OS Authentication
  16. SNMP OFF
  17. Listener Parameter File /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
  18. Listener Log File /oracle/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
  19. Listening Endpoints Summary...
  20. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  21. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  22. Services Summary...
  23. Service "mydb" has 1 instance(s).
  24. Instance "mydb", status UNKNOWN, has 1 handler(s) for this service...
  25. The command completed successfully

此时,远程连接数据库,成功连接:

  1. [oracle@localhost ~]$ sqlplus sys/oracle@rcl as sysdba
  2.  
  3. SQL*Plus: Release 11.2.0.4.0 Production on Sun Feb 11 22:16:46 2018
  4.  
  5. Copyright (c) 1982, 2013, Oracle. All rights reserved.
  6.  
  7. Connected to an idle instance.

开启数据库,再次查看监听状态(UNKNOWN即表示静态监听):

  1. [oracle@localhost ~]$ lsnrctl status
  2.  
  3. LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 11-FEB-2018 22:17:49
  4.  
  5. Copyright (c) 1991, 2013, Oracle. All rights reserved.
  6.  
  7. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
  8. STATUS of the LISTENER
  9. ------------------------
  10. Alias LISTENER
  11. Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
  12. Start Date 11-FEB-2018 22:13:25
  13. Uptime 0 days 0 hr. 4 min. 23 sec
  14. Trace Level off
  15. Security ON: Local OS Authentication
  16. SNMP OFF
  17. Listener Parameter File /oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
  18. Listener Log File /oracle/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
  19. Listening Endpoints Summary...
  20. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  21. (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  22. Services Summary...
  23. Service "ORCLXDB" has 1 instance(s).
  24. Instance "mydb", status READY, has 1 handler(s) for this service...
  25. Service "mydb" has 2 instance(s).
  26. Instance "mydb", status UNKNOWN, has 1 handler(s) for this service...
  27. Instance "mydb", status READY, has 1 handler(s) for this service...
  28. The command completed successfully

2)tnsnames.ora:主要负责客户端的监听配置,基本模板:

  1. # tnsnames.ora Network Configuration File: /home/oracle/app/product/11/db/network/admin/tnsnames.ora
  2. # Generated by Oracle configuration tools.

  3. #RCL为实例名
    RCL =

(DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.30.2)(PORT = 1521))   #TNSNAME 对应的主机,端口,协议
     (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = mydb)    #可通过show parameter service_name;查询service_name 配置listener.ora中GLOBAL_DBNAME的值  == tnsnames.ora中的SERVICE_NAME
     )
     )

PROTOCOL :客户端与服务器端通讯的协议,一般为TCP ,该内容一般不用改。
HOST :数据库侦听所在的机器的机器名或IP 地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机器。在UNIX 或WINDOWS 下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname 命令得到机器名,或通过ipconfig(for WINDOWS) or ifconfig (for UNIX )命令得到IP 地址。需要注意的是,不管用机器名或IP 地址,在客户端一定要用ping 命令ping 通数据库侦听所在的机器的机器名,否则需要在 hosts 文件中加入数据库侦听所在的机器的机器名的解析。
PORT :数据库侦听正在侦听的端口,可以察看服务器端的listener.ora 文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name] 命令察看。此处Port 的值一定要与数据库侦听正在侦听的端口一样。
SERVICE_NAME :在服务器端,用system 用户登陆后,sqlplus> show parameter service_name命令察看。
RCL: 对应的本机,SALES 对应的另外一个IP 地址,里边还定义了使用主用服务器还是共享服务器模式进行连接

3)sqlnet.ora

是驻留在客户端机器和数据库服务器上。使用该文件存储和实现概要文件。数据库服务器可以在sqlnet.ora文件中配置访问控制参数。这些参数指定基于协议的客户机是否允许或拒绝访问。

列出一些常见参数:

  1. BEQUEATH_DETACH:控制unix系统中signal handling 的开关,默认是no,即signal handling 打开。DEFAULT_SDU_SIZE:指定session data unit (SDU) 的大小,单位是bytes,建议在client端和server端都设置这个参数,确保链接的时候使用相同的SDU size,如果client端和server端配置的值不匹配会使用较小的。
  2.  
  3. LOG_DIRECTORY_CLIENT/LOG_DIRECTORY_SERVER:指定客户端/serverlog日志文件的位置
  4.  
  5. NAMES.DEFAULT_DOMAIN:设定客户端解析名字的域
  6.  
  7. NAMES.DIRECTORY_PATH:指定client name解析方法的次序,默认是NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname。取值可以是tnsnames,ldapdictionary server),hostname/ezconnect,cds (分布式环境下),nis (Network Information Service (NIS)
  8.  
  9. SQLNET_ALLOWED_LOGON_VERSIONS:指定运行链接的oracle的版本SQLNET_ALLOWED_LOGON_VERSIONS=(10,9,8)
  10.  
  11. SQLNET.AUTHENTICATION_SERVICES:指定启动一个或多个认证服务
  12.  
  13. SQLNET.INBOUND_CONNECT_TIMEOUT:指定客户端没有链接成功超时的时间。超时之后oracle会中断链接,同时报错。
  14.  
  15. SSL_VERSION:指定ssl链接的版本
  16.  
  17. TCP.EXCLUDED_NODES:指定不允许访问oracle的节点,可以使用主机名或者IP地址
  18.  
  19. TCP.INVITED_NODES:指定允许访问db的客户端,他的优先级比TCP.EXCLUDED_NODES高。
  20.  
  21. TCP.VALIDNODE_CHECKING:使用这个参数来启用上边的两个参数。
  22.  
  23. TNSPING.TRACE_DIRECTORY:使用这个参数指定tnsping trace文件的目录,默认是$ORACLE_HOME/network/trace目录

三、一些常用命令

a. lsnrctl start/stop   开启监听/关闭监听

b.lsnrctl status   查看监听状态 (ready:动态,unknown:静态,)

c.lsnrctl reload  重新装入监听器,重新读取listener.ora文件,但不关闭监听器。如果该文件发生了变化,重新刷新监听器。

d.lsnrctl version 显示oracle net软件与协议适配器的版本。

e.lsnrctl services 列举监听器的服务信息,列出服务的一个汇总表及为每个协议服务处理程序所建立和拒绝的连接信息个数。

………………

先到这里啦,后续再加~~~

ORACLE 监听的更多相关文章

  1. 修改Oracle监听端口

    修改oracle监听端口 修改端口号的整体步骤:1.1   查看当前监听的状态1.2   停止监听1.3   修改监听文件的端口号1.4   修改初始化参数local_listener1.5   重启 ...

  2. 【转】oracle 监听静态注册举例解析

    网上有很多关于oracle 监听静态注册的文章,但大多都是简单说说,并没有详细的例子,这里,将结合linux as3 下的oracle 10gR2.0.1 举一个具体的例子 1.在 $ORACLE_H ...

  3. linux 系统下开机自动启动oracle 监听和实例 (亲测有效)

    [oracle@oracle11g ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listene ...

  4. LINUX启动ORACLE监听和服务

    可通过secureCRT或者telnet直接连 启动监听命令:lsnrctl start 成功启动后:sqlplus /nolog 回车 conn / as sysdba 回车 startup 回车 ...

  5. 服务器重启后Oracle监听服务没有自动启动的解决方案

    最近一直在被这样一个问题烦恼,就是服务器断电重启后,Oracle监听服务没有正常自动启动(监听服务已经设置为自启动). 具体是这样的,监听服务设置为开机自启动,Oracle数据库服务设置为开机延时启动 ...

  6. oracle监听(lsnrctl)详解解读

    (总结)Oracle监听服务lsnrctl参数及查询状态详解   lsnrctl命令常用参数详解: lsnrctlstart启动指定的监听器 stop关闭指定的监听器 status显示监听器的状态.s ...

  7. Oracle监听启动时报TNS-00507问题

    Linux系统中,启动oracle监听的时候报如下错误: [oracle@centos ~]$ lsnrctl start LSNRCTL :: Copyright (c) , , Oracle. A ...

  8. windows 启动关闭Oracle监听和服务

    经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点.    1.开启:     在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后 net start O ...

  9. oracle监听1067错误的处理

    一,oracle监听1067错误的处理修改oracle安装目录D:\DataBase\oracle\product\10.1.0\Db_1\NETWORK\ADMIN\下的 listener.ora和 ...

  10. oracle监听,数据库,oracle服务器的启动和停用

    一.oracle监听,数据库,oracle服务器的启动和停用 使用root用户登录:切换用户su – root/root操作系统,一般只有root用户才有权限去操作系统中安装的oracle数据库服务器 ...

随机推荐

  1. linux中mysql命令方式备份数据的问题

    这几天公司新出了个组件化的项目,里面需要用到mysql数据库相关的技术,由于之前一直用的mongodb,所以mysql几乎忘光了,于是只能在linux虚拟机中重新开始学习. 基本的增删改查还好,但是在 ...

  2. java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.

    1.错误描述 严重: Exception starting filter struts2 java.lang.UnsupportedClassVersionError: Bad version num ...

  3. Linux显示只显示目录文件

    Linux显示只显示目录文件 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ls -l -d */ drwxr-xr-x 2 root root 4096 1 ...

  4. 阿里云ECS+CentOS 7.0+Docker+Redmine环境搭建

    前言 搭建Redmine环境可以选择使用分别安装Ruby+Rails+Redmine+MySQL的方式, 但是过程中需要解决各种扰人的依赖问题.Docker为我们提供的Plan B,方便,快捷. 安装 ...

  5. Java面试题积累

    持续积累中... 1.Java支持的数据类型有哪些?什么是自动拆装箱? 数据类型分为两大种,基本类型和引用类型. 基本类型有8种:byte short int long char float doub ...

  6. 由会话信息保存认识ThreadLocal

    这次想总结ThreadLocal这个东西,也是由于项目中使用到了它去帮助保存会话信息.传统的(或者说我在学校的时候)方法,大多是用服务端的session保存会话,与浏览器端的cookie协作去追踪这个 ...

  7. Log4j各级别日志重复打印

    使用filter进行日志过滤 这个其实是Log4j自带的方案,也是推荐方案,不知道为什么网上的资料却很少提到这点.把log4j.properties配置文件修改成如下: #root日志 log4j.r ...

  8. 第十一篇:Map/Reduce 工作机制分析 - 错误处理机制

    前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...

  9. [USACO5.4]奶牛的电信Telecowmunication

    裸的最小割,拆点时要考虑清楚到底是怎么连 如果之前i->i+n,之后又x->y+n,显然出不了解 所以可以改为i+n->i 如果要输出方案 考虑每一个一个点,如果删去这个点,最小割变 ...

  10. WC2006水管局长(加强)

    倒过来就变成了加边 然后就直接LCT # include <stdio.h> # include <stdlib.h> # include <iostream> # ...