热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oracle监听一般默认什么用,ORACLE监听理解

参考官方文档NetServicesReference的7OracleNetListenerParameters(listener.ora)1监听概念oracle监听,

参考官方文档Net Services Reference的7 Oracle Net Listener Parameters (listener.ora)

1 监听概念

oracle监听,是个服务器端进程,负责监听客户端发来的请求

监听器可以不必驻留在数据库主机上,即可以把实例注册到远程主机上的监听

监听是oracle自带的软件或者说组件

本地连接可以不用监听,但是远程连接必须要

oracle监听收到user process发出的request后,派生出server process来提供服务,server进程根据数据库的配置有2种模式:专有模式和共享模式

专有模式:每个客户端进程都有单独的server进程来建立session提供服务,绝大部分超过99%的数据库都是这种模式

共享模式:有个分配器叫dispatch,监听把请求放入请求队列中,dispatch会不停的查询请求队列,当发现有请求时候就把请求转给server进程,再通过server进程提供服务,处理完后反馈给响应队列,dispatch再把响应队列中的转发给用户进程。类似与饭馆吃饭,server进程相当于厨师,dispatch相当于服务员,服务员接受请求并转发给相应的空闲厨师提供服务,厨师做好的菜放在哪儿,服务员再端给客户;这种模式用的不多

dbca建库后一般会有默认监听,不用再配置,监听的服务端口默认1521

一般的库一个监听就够了,但是并发量太大的话可能需要配置多个监听,非默认监听的端口号大于1024即可,不同监听之间服务名和端口号不能一样

监听如何区别不同的库呢,所以需要把实例进行服务注册,注册到listen中,

注册就是将主机上跑的实例添加到listen里,让listen知道主机上有哪些实例

2 配置方法

2.1 动态注册

服务注册有2种,一种是动态注册,是通过pmon进程主动的自动的把实例注册到listen中

监听和实例的启动顺序,当监听先启动,没问题,如果监听后启动,那么可以手工alter system register注册下,或者不用管,pmon会隔一段时间就去注册下

一般默认监听是动态注册

不需要listener.ora文件

服务状态中有status READY(库在mount或者open状态)字样

pmon给监听提供实例名、服务名、服务处理程序的类型和地址

注册的服务名叫 db_name.db_domain,db_nameXDB.db_domain

如果要pmon注册到非默认监听,就要配置local_listener参数了

444b2d3ba55c6b042d6ea2b6db1e6d29.png

配置监听可以通过netca图形配置,也可以命令配置

b66c9db8d2eafc3bd33c8df3cfe0916b.png默认监听的名称LISTENER,配置如上,实际上没有这个listener.ora,默认listen也是可以正常运行的

那么下面增加一个在1522端口的非默认动态监听,名称叫listener2

首先netmgr图形添加一个监听

6b819aaf1141070c6dbeaf60279f384a.png

或者编辑listener.ora来添加监听也行

7c043b1559b4f2398c0abc240a9fe3b9.png

然后修改tnsnames.ora添加一个listener2的字符串,以便修改local_listener参数,(就是把监听中的那一段复制到tnsnames.ora中)

cc56c24fa50038d9f8b3d8be7ff9e2d7.png设置下local_listener参数并手工注册下即可,

[oracle@study admin]$ sql

SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 19 17:07:41 2019

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

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

17:07:42 SYS@study> show parameter local_list

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

local_listener string

17:08:19 SYS@study> alter system set local_listener='LISTENER2';

System altered.

Elapsed: 00:00:00.04

17:09:03 SYS@study> alter system register;

System altered.

Elapsed: 00:00:00.00

17:09:21 SYS@study> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@study admin]$ lsnrctl status listener2

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 19-SEP-2019 17:10:22

Copyright (c) 1991, 2009, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1522)))

STATUS of the LISTENER

------------------------

Alias listener2

Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date 19-SEP-2019 16:38:16

Uptime 0 days 0 hr. 32 min. 6 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

Listener Log File /u01/app/oracle/diag/tnslsnr/study/listener2/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=study.localdomain)(PORT=1522)))

Services Summary...

Service "study" has 1 instance(s).

Instance "study", status READY, has 1 handler(s) for this service...

Service "studyXDB" has 1 instance(s).

Instance "study", status READY, has 1 handler(s) for this service...

The command completed successfully

[oracle@study admin]$

不过这样的话默认,pmon就不会往默认监听中注册了,也就是从1521访问不到了,如果要1521 1522同时提供服务,可以删除默认监听,配置改为

LISTENER2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = study.localdomain)(PORT = 1522))

(ADDRESS = (PROTOCOL = TCP)(HOST = study.localdomain)(PORT = 1521))

)

由于动态监听依赖于PMON,删除监听配置文件,默认监听依然有效,监听依旧监听localhost:1521,LOCAL_LISTENER这个参数控制实例将自身动态注册到哪儿,LOCAL_LISTENER 这个参数的默认值是(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521)),PMON依旧主动注册实例到监听,dbca建库后默认就是这样的注册方式

看的出来动态监听要求监听和local_listener参数配置是一致的,都是缺省的空的配置即默认监听,非默认就显示配置这两个地方即可

tnsnames

.ora在动态监听中不是必须的,只是为了配置个本地的字符串方便local_listener的配置命令而已,直接配置如下形式也ok

alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1521))';

等同于alter system set local_listener='';

配置注册到多个监听,可以如下

alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1521))','(ADDRESS=(PROTOCOL=TCP)(HOST=study.localdomain)(PORT=1522))';

或者先在tnsnames.ora中配置多个地址的字符串

d950ca1e7e0018a7a1e0e152f9b1f514.png

再设置alter systemset local_listener='LISTENER2';

在共享服务器模式下,可以配置listener的一个参数叫做dispatchers,把这个分派器注册到一个非默认监听

ALTER SYSTEM SET DISPATCHERS=”(PROTOCOL=tcp)(LISTENER=lsnr2)”;

0d7352c4e827b9b400ad9db5f282a4d6.png

select service_id,name from v$active_services可以查出,前面2个服务是注册到监听的,后面2个是Oracle有两个内部的服务,SYS$BACKGROUND是后台进程使用的,SYS$USERS提供给没有指定服务的用户会话使用

2ec2ab2603b70c0991c35f2980b8274c.pngservice_names是服务名,如果为空,会把db_name.db_domain 注册到监听

2.2  静态注册

另一种是静态注册,服务的状态一般是status UNKNOWN字样,静态注册是监听程序根据配置文件listener.ora里面的配置去监听指定的地址端口和实例,是oem和其他服务所需要的

静态注册不是实例主动去监听处注册,而是监听自己管理一个端口和服务的列表,监听根据这个列表来将请求转发到具体的实例

比如如下配置

LISTENER2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = study.localdomain)(PORT = 1522))

)

SID_LIST_LISTENER2=

(SID_LIST=

(SID_DESC=

(GLOBAL_DBNAME=STUDY)

(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

(SID_NAME=STUDY)

)

)

ADR_BASE_LISTENER2 = /u01/app/oracle

GLOBAL_DBNAME即服务名,看service_names参数即可,如果为空,就是db_name.db_domain,或者先动态注册看一下服务名

SID_NAME需要大写,否则安装EM会有影响,如果不确定也可以先动态注册观察下

注意命名格式是LISTENER_NAME 和 SID_LIST_LISTENER_NAME

当数据库关闭的时候,静态注册的监听依旧可以连接,动态监听就不行了,所以远程启动数据库这样的操作就一定需要静态监听

[oracle@study admin]$ sqlplus sys/oracle@10.0.0.10:1521/study as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Sep 20 10:59:06 2019

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

ERROR:

ORA-12514: TNS:listener does not currently know of service requested in connect

descriptor

Enter user-name: ^C

[oracle@study admin]$ sqlplus sys/oracle@10.0.0.10:1522/study as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Fri Sep 20 10:59:15 2019

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

Connected to an idle instance.

10:59:15 SYS@10.0.0.10:1522/study> startup

ORACLE instance started.

Total System Global Area 1536602112 bytes

Fixed Size 2213616 bytes

Variable Size 922749200 bytes

Database Buffers 603979776 bytes

Redo Buffers 7659520 bytes

Database mounted.

Database opened.

10:59:25 SYS@10.0.0.10:1522/study>

好了,对oracle监听有个大概的了解



推荐阅读
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 深入探讨Web服务器与动态语言的交互机制:CGI、FastCGI与PHP-FPM
    本文详细解析了Web服务器(如Apache、Nginx等)与动态语言(如PHP)之间通过CGI、FastCGI及PHP-FPM进行交互的具体过程,旨在帮助开发者更好地理解这些技术背后的原理。 ... [详细]
  • C#爬虫Fiddler插件开发自动生成代码
    哈喽^_^一般我们在编写网页爬虫的时候经常会使用到Fiddler这个工具来分析http包,而且通常并不是分析一个包就够了的,所以为了把更多的时间放在分析http包上,自动化生成 ... [详细]
  • PHP网站部署指南:从零开始搭建PHP网站
    本文提供了详细的步骤指导,帮助开发者在不同环境下成功部署PHP网站,包括在IIS和Apache服务器上的具体操作。 ... [详细]
  • HTTP中的Chunked编码与Content-Length的区别及应用场景
    本文探讨了在HTTP协议中,当使用Transfer-Encoding为chunked时为何无需设置Content-Length,以及这种编码方式的具体实现和优势。 ... [详细]
  • Navicat Premium中MySQL用户管理:创建新用户及高级设置
    本文作为Navicat Premium用户管理系列的第二部分,主要介绍如何创建新的MySQL用户,包括设置基本账户信息、密码策略、账户限制以及SSL配置等。 ... [详细]
  • 帝国cms各数据表有什么用
    CMS教程|帝国CMS帝国cmsCMS教程-帝国CMS精易编程助手源码,ubuntu桥接设置,500错误是tomcat吗,爬虫c原理,php会话包括什么,营销seo关键词优化一般多 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 本文探讨了Java中有效停止线程的多种方法,包括使用标志位、中断机制及处理阻塞I/O操作等,旨在帮助开发者避免使用已废弃的危险方法,确保线程安全和程序稳定性。 ... [详细]
  • 本文探讨了在使用Apache Flink向Kafka发送数据过程中遇到的事务频繁失败问题,并提供了详细的解决方案,包括必要的配置调整和最佳实践。 ... [详细]
  • 本文深入探讨了分布式文件系统的核心概念及其在现代数据存储解决方案中的应用,特别是针对大规模数据处理的需求。文章不仅介绍了多种流行的分布式文件系统和NoSQL数据库,还提供了选择合适系统的指导原则。 ... [详细]
  • Golang与微服务架构:构建高效微服务
    本文探讨了Golang在微服务架构中的应用,包括Golang的基本概念、微服务开发的优势、常用开发工具以及具体实践案例。 ... [详细]
  • 本文探讨了六项Java特性,它们虽然强大,但在不当使用时可能会给应用程序带来严重问题。文章基于作者Nikita Salnikov Tarnovski多年的应用性能调优经验,提供了对这些特性的深入分析。 ... [详细]
  • 我的世界服务器修改圈地大小,我的世界圈地大小限制设置 ... [详细]
author-avatar
黑_猫__警_长
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有