oracle 监听详解(listener.ora)
oracle监听分为静态监听和动态监听。
对于静态监听在启动监听的时候会注册已经在listener.ora配置的服务,而对于动态监听会自动注册service_names参数定义的服务名称,时间间隔是1分钟。
客户端配置文件包括tnsnames.ora和sqlnet.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>