热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

listener之一二_MySQL

listener之一二
bitsCN.com

listener之一二

一、注册

注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要

知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可以与实例名一致,也可以不

一致,且可以注册多个服务。

注册可以分为静态注册与动态注册,下面分别介绍静态注册和动态注册。

二、静态注册

静态注册就是预先配置好listener.ora文件,配置信息如下:

#listener.oraSID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (SID_NAME = PLSExtProc)      (ORACLE_HOME = /u01/app/oracle/product/10.2/db_1)      (PROGRAM = extproc)    )    (SID_DESC =      (SID_NAME = orcl)##数据库的实例名      (ORACLE_HOME = /u01/app/oracle/product/10.2/db_1)##监听程序所在路径      (GLOBAL_DBNAME = test01)##数据库对外提供的服务名    )  )LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))    )  )

当用户通过客户端申请连接数据库时,首先通过监听程序读取listener.ora中的配置信息(无论数据库

是否启动,用户的连接请求都会通过监听程序的检查,因为静态监听是无法识别数据库的启动状态的

,只有用户试图连接数据库时,数据库才会返回相关信息。)

下面我们来看下数据库处于打开和关闭状态时,服务test01的实例状态:

1、打开状态

[oracle@db01 admin]$ lsnrctl statusLSNRCTL for Linux: Version 10.2.0.1.0 - Production on 16-OCT-2013 06:58:27Copyright (c) 1991, 2005, Oracle.  All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db01)(PORT=1521)))STATUS of the LISTENER------------------------Alias                     LISTENERVersion                   TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionStart Date                16-OCT-2013 06:39:09Uptime                    0 days 0 hr. 19 min. 18 secTrace Level               offSecurity                  ON: Local OS AuthenticationSNMP                      OFFListener Parameter File   /u01/app/oracle/product/10.2/db_1/network/admin/listener.oraListener Log File         /u01/app/oracle/product/10.2/db_1/network/log/listener.logListening Endpoints Summary...  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db01)(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 "orcl" has 1 instance(s).  Instance "orcl", status READY, has 1 handler(s) for this service...Service "orclXDB" has 1 instance(s).  Instance "orcl", status READY, has 1 handler(s) for this service...Service "orcl_XPT" has 1 instance(s).  Instance "orcl", status READY, has 1 handler(s) for this service...Service "test01" has 1 instance(s).  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...   =>实例orcl的状态为unknownThe command completed successfully此时当用户通过客户端连接数据库时:SQL> conn system/hat@test01

已连接。

2、关闭状态:

[oracle@db01 admin]$ lsnrctl statusLSNRCTL for Linux: Version 10.2.0.1.0 - Production on 16-OCT-2013 06:54:44Copyright (c) 1991, 2005, Oracle.  All rights reserved.Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db01)(PORT=1521)))STATUS of the LISTENER------------------------Alias                     LISTENERVersion                   TNSLSNR for Linux: Version 10.2.0.1.0 - ProductionStart Date                16-OCT-2013 06:39:09Uptime                    0 days 0 hr. 15 min. 35 secTrace Level               offSecurity                  ON: Local OS AuthenticationSNMP                      OFFListener Parameter File   /u01/app/oracle/product/10.2/db_1/network/admin/listener.oraListener Log File         /u01/app/oracle/product/10.2/db_1/network/log/listener.logListening Endpoints Summary...  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db01)(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 "test01" has 1 instance(s).  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...   =>实例orcl的状态为unknownThe command completed successfully

此时当用户通过客户端连接数据库时:

SQL> conn system/hat@test01

ERROR:

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

Linux Error: 2: No such file or directory

由此可知,用户的连接请求通过了监听的检查,但数据库没有打开,于是就返回了ora-01034的错误。

通过上面的实验,验证了当监听静态注册时,服务的实例状态均为unknown,监听程序无法知道数据库

是否处于打开状态。

三、动态注册

动态注册就是不需预先配置listener.ora文件,而是instance在启动的时候PMON进程根据

init.ora中的instance_name、service_names两个参数将实例和服务动态的注册到listener中。

注册到监听器中的实例名从init.ora文件中的instance_name参数取得。如果该参数没有设定值,

那么它将取init.ora文件中的db_name值。

注册到监听器中的服务名从init.ora文件中的参数service_names(该参数可以设置多个值,且值

以逗号分隔)和db_domain取得。如果service_names参数没有设定值,数据库将取init.ora文件中的

db_name值。

采取动态注册时,listener.ora配置如下:

#listener.oraSID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (SID_NAME = PLSExtProc)      (ORACLE_HOME = /u01/app/oracle/product/10.2/db_1)      (PROGRAM = extproc)    )  )LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS = (PROTOCOL = TCP)(HOST = db01)(PORT = 1521))      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))    )  )

动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),如果需要向

非默认监听注册,则只需要配置local_listener参数。

四、如何区分静态注册与动态注册

方法一:通过lsnrctl status监测

静态注册的监听实例状态为unknown,动态注册的监听实例状态为ready

方式二:查看listener.ora文件

listener.ora文件中添加了如下信息的为静态注册,没有添加为动态注册

(SID_DESC =

(SID_NAME = orcl)##数据库的实例名

(ORACLE_HOME = /u01/app/oracle/product/10.2/db_1)##监听程序所在路径

(GLOBAL_DBNAME = test01)##数据库对外提供的服务名

)

注:1、由于动态注册监听是通过pmon进程来动态添加的,因此一旦数据库关闭,那么动态注册的服务便立即从监听程序中消除。

2、如果想远程启动数据库,需要通过静态注册。

bitsCN.com
推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
author-avatar
T糖糖Tsweet_629
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有