Oracle12c动态注册与静态注册的相关问题
概念
官网说明
The listener is a separate process that runs on the database server computer.
It receives incoming client connection requests and manages the traffic of these requests to the database server.
This chapter describes how to configure the listener to accept client connections
大概意思就是:监听器是运行在服务器上的一个单独进程,主要是用来接收客户端发送的数据库连接请求,然后处理数据库访问请求
所以说客户端想要访问数据库,则数据库服务器必须得启动Listener监听程序
动态注册与静态注册可以看看这篇文章
动态注册有以下特性:
- 简化配置
服务注册减少了对SID_LIST_listener_name
参数设置的需求,该参数设置在listener.ora
文件中指定有关侦听器所服务的数据库的信息 - 连接时故障转移
由于侦听器始终知道实例的状态,因此服务注册有助于在一个实例关闭时将客户端连接请求自动故障转移到其他实例。
在静态配置模型中,侦听器将在收到客户端请求时启动专用服务器。服务器稍后会发现该实例未启动,从而导致出现“ Oracle not available”错误消息 。 - 运行时连接负载均衡
服务注册使侦听器能够将客户端连接请求转发到负载最少的实例和调度程序或专用服务器。服务注册平衡服务处理程序和节点之间的负载。
动态注册
确保访问主机名为IPV4地址,如果是IPV6需Oralce开启IPV6访问接口,并且端口不能与IPV4端口冲突,访问主机名是IPV6地址的解决办法
默认的监听配置
在%Oracle_Home%\network\admin目录下不需要任何参数文件
- 查看Oralce的
local_listener
参数
SQL> show parameter local_listener;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
local_listener string
值为空,默监听主机地址在1521端口的服务,如果不为空,执行以下命令:SQL> alter parameter local_listener='';
-
重启Oracle服务
-
查询Oracle数据库初始化配置中的实例名与服务名
- 查询实例名
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
instance_name string orcl
- 查询服务名
SQL> show parameter service_name
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
service_names string orcl
- 查看监听状态
C:\WINDOWS\system32>lsnrctl status
LSNRCTL for 64-bit Windows: Version 12.2.0.1.0 - Production on 10-7月 -2019 21:19:33
Copyright (c) 1991, 2016, Oracle. All rights reserved.
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 12.2.0.1.0 - Production
启动日期 10-7月 -2019 21:17:42
正常运行时间 0 天 0 小时 1 分 51 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序日志文件 F:\Oracle\OracleDB\diag\tnslsnr\test\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=test)(PORT=5500))(Security=(my_wallet_directory=F:\ORACLE\ORACLEDB\admin\orcl\xdb_wallet))(Presentation=HTTP)(Session=RAW))
服务摘要..
服务 "70b9444dfa524e899b04fa613f601413" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
默认监听到orcl
与orclXDB
服务
- 测试连接
C:\WINDOWS\system32>sqlplus
SQL*Plus: Release 12.2.0.1.0 Production on 星期三 7月 10 21:47:29 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
请输入用户名: sys as sysdba
输入口令:
连接到:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
SQL>
连接成功
指定主机与端口的监听配置
向非默认监听注册,则要修改相应系统参数。将要监听的信息添加到tnsnames.ora文件(pmon动态注册监听时从tnsnames.ora文件读取信息)
- 配置
tnsnames.ora
文件,加入如下内容:
LISTENER_TEST =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = Dionysus)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = ::1)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
- 修改参数
LOCAL_LISTENER
SQL > alter system set local_listener=LISTENER_TEST ;
- 手动注册
SQL > alter system register;
- 查看监听状态
[oracle@CentOS admin]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 31-MAR-2018 06:55:42
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=CentOS)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 31-MAR-2018 06:55:14
Uptime 0 days 0 hr. 0 min. 28 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/CentOS/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=CentOS)(PORT=1522)))
Services Summary...
Service "sn01" has 1 instance(s).
Instance "vmdb", status READY, has 1 handler(s) for this service...
Service "sn02" has 1 instance(s).
Instance "vmdb", status READY, has 1 handler(s) for this service...
Service "sn03" has 1 instance(s).
Instance "vmdb", status UNKNOWN, has 1 handler(s) for this service...
Service "vmdb" has 1 instance(s).
Instance "vmdb", status READY, has 1 handler(s) for this service...
Service "vmdbXDB" has 1 instance(s).
Instance "vmdb", status READY, has 1 handler(s) for this service...
The command completed successfully
测试连接OK
静态注册
- 实例启动时读取文件$ORACLE_HOME/network/admin/listener.ora文件的配置,将实例和服务注册到监听程序。listener.ora文件配置如下
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = sn03)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = vmdb)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = CentOS)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
- 先启动数据库再启动监听
SQL> startup
ORACLE instance started.
Total System Global Area 776646656 bytes
Fixed Size 2217384 bytes
Variable Size 583010904 bytes
Database Buffers 188743680 bytes
Redo Buffers 2674688 bytes
Database mounted.
Database opened.
启动数据库
- 启动监听
[oracle@CentOS ~]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2018 13:03:11
Copyright (c) 1991, 2009, Oracle. All rights reserved.
TNS-01106: Listener using listener name LISTENER has already been started
[oracle@CentOS ~]$ lsnrctl reload
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2018 13:03:19
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=CentOS)(PORT=1521)))
The command completed successfully
[oracle@CentOS ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 28-MAR-2018 13:03:25
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=CentOS)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 28-MAR-2018 13:03:08
Uptime 0 days 0 hr. 0 min. 16 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/CentOS/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=CentOS)(PORT=1521)))
Services Summary...
Service "sn03" has 1 instance(s).
Instance "vmdb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
发现监听服务有静态注册的sn03,连接测试OK