oracle 监听详解(listener.ora)

本文详细解析了Oracle数据库中静态监听和动态监听的工作原理及配置方法。介绍了listener.ora配置文件的作用,以及如何通过service_names和instance_name参数实现动态监听的注册。同时,还探讨了客户端和服务端之间的连接机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle 监听详解(listener.ora)

oracle监听分为静态监听和动态监听。

对于静态监听在启动监听的时候会注册已经在listener.ora配置的服务,而对于动态监听会自动注册service_names参数定义的服务名称,时间间隔是1分钟。

客户端配置文件包括tnsnames.orasqlnet.net,服务器端配置文件为listener.ora,相互关联的顺序为。

 

当客户端连接服务器的时候首先尝试用service_name与服务器端的global_name匹配进行连接,如果客户端使用的sid_name那么就不会检查service_name,而是使用sid_name进行连接。注意(10g)客户端的service_name和服务器端的global_name大小写要区分的。必须相同格式。到11g就没了这一限制。

当启动静态监听的时候,这时候动态监听也会被自动进行注册(11.1.0.6.0)。

Global_name参数:

What's a Databaseglobal name?

The global database name is the unique nameof the database. In a distributed database system (a set of databases stored onmultiple computers that typically appears to applications as a singledatabase).

the global database name ensures that each database is distinct from all otherdatabases in the system.Oracle forms a database's global database name byprefixing the database's network domain with the individual database's name.Forexample: sales.us.oracle.com and sales.uk.oracle.com.

The global database name defaults to DB_NAME.DB_DOMAIN and this value is markedat database creation time.

What'sDB_UNIQUE_NAME, and what's the difference between DB_UNIQUE_NAME and databaseglobal name?

DB_UNIQUE_NAME specifies a globally uniquename for the database. Databases with the same DB_NAME within the sameDB_DOMAIN (for example, copies of a database created for reporting or aphysical standby) must have a unique DB_UNIQUE_NAME. Every database'sDB_UNIQUE_NAME must be unique within the enterprise.

While global_name is usually only active whenglobal_names is set to "true", and this impacts security for databaselinks. e.g database link name must be the same as global_name for the remotedatabase.

 

What's a DB_NAME?

DB_NAME is a name that uniquely identified adatabase in a server, It's defined at the time of database creation and writteninto control files.
One can't have two databases with the same DB name on the same server even intwo different homes.

Sid_name

该参数要注意大小写,代表了数据库实例的名称。

Service_names参数:

该参数是用户动态监听进行注册的,如果该参数设置为空,那么就无法进行动态监听的注册,动态监听注册要使用service_names和instance_name参数进行注册。

测试如下:

SYS@orcl#show parameter service_name

 

NAME                                TYPE                   VALUE

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

service_names                       string

SYS@orcl#show parameter instance_name

 

NAME                                TYPE                   VALUE

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

instance_name                       string

SYS@orcl#!  

oracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl status

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 10:03:36

 

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

 

正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

TNS-12541: TNS:无监听程序

 TNS-12560: TNS:协议适配器错误

 TNS-00511:无监听程序

  Linux Error: 111: Connection refused

正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

TNS-12541: TNS:无监听程序

 TNS-12560: TNS:协议适配器错误

 TNS-00511:无监听程序

  Linux Error: 2: No such file or directory

oracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl start

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 10:03:43

 

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

 

启动/opt/oracle/product/10.2/db_1/bin/tnslsnr:请稍候...

 

TNSLSNR for Linux: Version 11.1.0.6.0 -Production

系统参数文件为/opt/oracle/product/10.2/db_1/network/admin/listener.ora

写入/opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml的日志信息

监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

监听:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

 

正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月-2013 10:03:43

正常运行时间             0 天 0 小时 0 分 0 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序参数文件         /opt/oracle/product/10.2/db_1/network/admin/listener.ora

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

服务摘要..

服务 "xiaohai" 包含 1 个例程。

  例程 "orcl",状态 UNKNOWN, 包含此服务的 1 个处理程序...

命令执行成功

oracle@oracle:~/product/10.2/db_1/network/admin>

oracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl status

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 10:04:52

 

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

 

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月-2013 10:03:43

正常运行时间             0 天 0 小时 1 分 8 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序参数文件         /opt/oracle/product/10.2/db_1/network/admin/listener.ora

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

服务摘要..

服务 "orcl" 包含 1 个例程。

服务 "orcl_XPT" 包含 1 个例程。

服务 "xiaohai" 包含 1 个例程。

  例程 "orcl",状态 UNKNOWN, 包含此服务的 1 个处理程序...

命令执行成功

oracle@oracle:~/product/10.2/db_1/network/admin>

这是添加service_names参数值:

oracle@oracle:~/product/10.2/db_1/network/admin>sqlplus "/as sysdba"

 

SQL*Plus: Release 11.1.0.6.0 - Production on星期日 6月 210:05:16 2013

 

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

 

 

连接到:

Oracle Database 11g Enterprise EditionRelease 11.1.0.6.0 - 64bit Production

With the Partitioning, OLAP, Data Mining andReal Application Testing options

 

SYS@orcl#alter system setservice_names='rhys,geek' scope=both;

 

系统已更改。

 

SYS@orcl#show parameter service_names;

 

NAME                                TYPE

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

VALUE

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

service_names                       string

rhys,geek

SYS@orcl#

oracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl status

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 10:09:31

 

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

 

正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月-2013 10:03:43

正常运行时间             0 天 0 小时 5 分 47 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序参数文件         /opt/oracle/product/10.2/db_1/network/admin/listener.ora

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

服务摘要..

服务 "geek" 包含 1 个例程。

服务 "orcl" 包含 1 个例程。

服务 "orcl_XPT" 包含 1 个例程。

服务 "rhys" 包含 1 个例程。

服务 "xiaohai" 包含 1 个例程。

  例程 "orcl",状态 UNKNOWN, 包含此服务的 1 个处理程序...

命令执行成功

oracle@oracle:~/product/10.2/db_1/network/admin>

这个时候我们是可以使用客户端进行连接数据库的。

现在添加instance_name

SYS@orcl#show parameter instance_name

 

NAME                                TYPE                   VALUE

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

instance_name                       string                 ORCL

SYS@orcl#exit

从 Oracle Database 11g Enterprise EditionRelease 11.1.0.6.0 - 64bit Production

With the Partitioning, OLAP, Data Mining andReal Application Testing options断开

lsnoracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 10:13:46

 

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

 

欢迎来到LSNRCTL, 请键入"help"以获得信息。

 

LSNRCTL> status

正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月-2013 10:03:43

正常运行时间             0 天 0 小时 10 分 10 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序参数文件         /opt/oracle/product/10.2/db_1/network/admin/listener.ora

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

服务摘要..

服务 "ORCL" 包含 1 个例程。######:instance_name进行注册的服务名

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...#####instance_name

服务 "geek" 包含 1 个例程。####service_name进行注册

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...###instance_name

服务 "orcl_XPT" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "rhys" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "xiaohai" 包含 1 个例程。###静态监听参数设置注册global_name

  例程 "orcl",状态 UNKNOWN, 包含此服务的 1 个处理程序...(sid_name)

命令执行成功

可以看出此处的例程就是isntance_name进行注册的。

 

静态参数:

oracle@oracle:~/product/10.2/db_1/network/admin>more listener.ora

LISTENER=

 (DESCRIPTION=

   (ADDRESS_LIST=

     (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521))

     (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))

 

SID_LIST_LISTENER =

 (SID_LIST =

   (SID_DESC =

     (GLOBAL_DBNAME = xiaohai)

     (ORACLE_HOME = /opt/oracle/product/10.2/db_1)

     (SID_NAME = orcl)

    )

  )

 

oracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl status

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 09:49:25

 

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

 

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月-2013 09:49:13

正常运行时间             0 天 0 小时 0 分 11 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序参数文件         /opt/oracle/product/10.2/db_1/network/admin/listener.ora

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

服务摘要..

服务 "xiaohai" 包含 1 个例程。

  例程 "orcl",状态 UNKNOWN, 包含此服务的 1 个处理程序...

命令执行成功

oracle@oracle:~/product/10.2/db_1/network/admin>

LSNRCTL> status

正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月-2013 10:21:50

正常运行时间             0 天 0 小时 4 分 19 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序参数文件         /opt/oracle/product/10.2/db_1/network/admin/listener.ora

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))

服务摘要..

服务 "ORCL" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "geek" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "orcl_XPT" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "rhys" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "xiaohai" 包含 1 个例程。

  例程 "orcl",状态 UNKNOWN, 包含此服务的 1 个处理程序...

命令执行成功

LSNRCTL> services

正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.137.4)(PORT=1521)))

服务摘要..

服务 "ORCL" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

    处理程序:

     "D000"已建立:3已被拒绝:0 当前: 1 最大: 1022 状态: ready

        DISPATCHER <machine: oracle, pid: 18716>

        (ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=15928))

     "DEDICATED"已建立:0已拒绝:0 状态:ready

        LOCAL SERVER

服务 "geek" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

    处理程序:

     "D000"已建立:3已被拒绝:0 当前: 1 最大: 1022 状态: ready

        DISPATCHER <machine: oracle, pid: 18716>

        (ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=15928))

     "DEDICATED"已建立:0已拒绝:0 状态:ready

        LOCAL SERVER

服务 "orcl_XPT" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

    处理程序:

     "D000"已建立:3已被拒绝:0 当前: 1 最大: 1022 状态: ready

        DISPATCHER <machine: oracle, pid: 18716>

        (ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=15928))

     "DEDICATED"已建立:0已拒绝:0 状态:ready

        LOCAL SERVER

服务 "rhys" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

    处理程序:

     "D000"已建立:3已被拒绝:0 当前: 1 最大: 1022 状态: ready

        DISPATCHER <machine: oracle, pid: 18716>

        (ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=15928))

     "DEDICATED"已建立:0已拒绝:0 状态:ready

        LOCAL SERVER

服务 "xiaohai" 包含 1 个例程。

  例程 "orcl",状态 UNKNOWN, 包含此服务的 1 个处理程序...

    处理程序:

     "DEDICATED"已建立:2已被拒绝:0

        LOCAL SERVER

命令执行成功

LSNRCTL>

动态监听:

如果没有listener.ora文件,那么oracle也会启动默认的动态监听。

Eg

oracle@oracle:~/product/10.2/db_1/network/admin>ls

listener.bak listener.ora  nore.log  samples/ shrept.lst  tnsnames.ora  tnsnames.ora_bak

oracle@oracle:~/product/10.2/db_1/network/admin>mv listener.ora listener.ora_bak_03

oracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl start

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 10:29:06

 

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

 

启动/opt/oracle/product/10.2/db_1/bin/tnslsnr:请稍候...

 

TNSLSNR for Linux: Version 11.1.0.6.0 -Production

写入/opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml的日志信息

监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))

 

正在连接到(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月-2013 10:29:06

正常运行时间             0 天 0 小时 0 分 0 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))

监听程序不支持服务

命令执行成功

oracle@oracle:~/product/10.2/db_1/network/admin>lsnrctl status

 

LSNRCTL for Linux: Version 11.1.0.6.0 -Production on 02-6月-2013 10:30:17

 

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

 

正在连接到(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

LISTENER 的 STATUS

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

别名                     LISTENER

版本                     TNSLSNR for Linux:Version 11.1.0.6.0 - Production

启动日期                 02-6月 -2013 10:29:06

正常运行时间             0 天 0 小时 1 分 11 秒

跟踪级别                 off

安全性                   ON: Local OS Authentication

SNMP                     OFF

监听程序日志文件         /opt/oracle/diag/tnslsnr/oracle/listener/alert/log.xml

监听端点概要...

 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle)(PORT=1521)))

服务摘要..

服务 "ORCL" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "geek" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "orcl_XPT" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

服务 "rhys" 包含 1 个例程。

  例程 "ORCL",状态 READY, 包含此服务的 2 个处理程序...

命令执行成功

oracle@oracle:~/product/10.2/db_1/network/admin>

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值