oracle监听器初识-配置多SERVICE_NAMES
现象:
为数据库设置多个服务名(通过SCOPE=both设置,同时修改参数文件)
SQL> show parameter service_names; NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string vmdb SQL> alter system set service_names='vmdb,sn01,sn02' scope=both; System altered.
重启监听后,监听状态并未显示服务sn01,sn02
[oracle@CentOS ~]$ lsnrctl stop LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-MAR-2018 18:29:21 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 start LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-MAR-2018 18:29:24 Copyright (c) 1991, 2009, Oracle. All rights reserved. Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 11.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/CentOS/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=CentOS)(PORT=1521))) 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 26-MAR-2018 18:29:24
Uptime 0 days 0 hr. 0 min. 0 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 "vmdb" has 1 instance(s).
Instance "vmdb", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
通过另一台机器通过服务名sn01连接可以连接上:
[oracle@centos-sample ~]$ sqlplus test/test@192.168.8.141/sn01 SQL*Plus: Release 11.2.0.1.0 Production on Sun Mar 25 20:06:35 2018 Copyright (c) 1982, 2009, Oracle. All rights reserved. ERROR:
ORA-28002: the password will expire within 7 days 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 SQL>
在数据库中可以查询v$session视图的service_name来判断会话是由通过哪个服务名连接创建的:
SQL> col paddr format a20
SQL> col Sid format 9999999
SQL> col username format a15
SQL> col service_name format a20
SQL> Select paddr,Sid,serial#,username,service_name From v$session Where username Is Not Null; PADDR SID SERIAL# USERNAME SERVICE_NAME
-------------------- -------- ---------- --------------- --------------------
000000008DC95250 17 19 SYS SYS$USERS
000000008DC98310 36 7 TEST vmdb
000000008DC96290 37 22 TEST sn01
000000008DC99350 38 11 TEST vmdb
重启数据库:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
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.
再次查看监听,sn01,sn02服务名显示出来了:
[oracle@CentOS ~]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-MAR-2018 18:30:29 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 26-MAR-2018 18:29:24
Uptime 0 days 0 hr. 1 min. 5 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 "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 "vmdb" has 2 instance(s).
Instance "vmdb", status UNKNOWN, has 1 handler(s) for this service...
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
但是监听配置文件里不会自动增加服务名sn01,sn02:
[oracle@CentOS ~]$ cat /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools. SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = vmdb)
(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
listener.ora文件典型配置:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = vmdb)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = vmdb)
)
(SID_DESC =
(GLOBAL_DBNAME = sn01)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = vmdb)
)
(SID_DESC =
(GLOBAL_DBNAME = sn02)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = vmdb)
)
) LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = CentOS)(PORT = 1521))
)
以下解释来自老盖的《深入浅出ORACLE》:
监听器文件主要包含两个部分:
- 第一部分LISTENER信息,这部分包含了监听的协议、地址以及端口等信息。
- 第二部分SID_LIST_LISTENER信息,这部分信息用于提供对外的数据库服务列表。第一个SID_DESC部分(SID_NAME = PLSExtProc)是数据库缺省就包含的对外部存储过程提供的本地监听,此外三个SID_DESC部分是对数据库的三个SERVICE_NAMES所设置的监听服务,对于同一个SID对应的数据库,可以对外提供多个服务名供客户端访问。
设置服务名的参数为GLOBAL_DBNAME,当处理客户端连接请求时,监听器首先尝试将GLOBAL_DBNAME和客户端请求中的SERVICE_NAME相匹配;如果客户端连接请求的是SID信息,则Oracle不检查GLOBAL_DBNAME设置,而是对监听器中设置的SID_NAME进行匹配。
启动这个监听后,可以看到对于不同服务名Oracle所启动的监听信息。首先输出的信息显示了监听器文件地址以及监听日志文件位置(监听器日志在诊断数据库异常或攻击信息时非常有用)。
通过服务名,Oracle可以将客户端和服务器彻底隔离开来,对于客户端来说,它不用关心数据库的名字、实例名到底是什么,它只需要知道数据库对外提供的服务名就行了,这个名字可能和实例名相同,也可能不相同。
(注:通过查询会话视图v$session的service_names,可以区分哪些会话来自哪个service_name,所以可以通过提供不同的service_name给不同的下游系统,用来区分哪些会话由哪些系统创建)
从8i开始,oracle引入了动态服务注册(Dynamic Service Registration)的功能,所谓动态注册是指当实例启动之后,由后台进程PMON在监听器中注册数据库服务信息。在动态注册机制下,原来监听器中的SID_LIST部分将不再需要。动态注册的服务名,由于监听器确切地知道实例的状态,所以正常状态通常显示为READY,而对于静态注册的服务名,则状态显示为UNKNOW。
以下演示,删除监听配置文件listener.ora后,监听器依然可以知道动态注册的服务名:
[oracle@CentOS ~]$ cd /u01/app/oracle/product/11.2./dbhome_1/network/admin/
[oracle@CentOS admin]$ ll
总用量
-rw-r--r-- oracle oinstall 3月 : listener.ora
drwxr-xr-x. oracle oinstall 5月 samples
-rw-r--r--. oracle oinstall 5月 shrept.lst
-rw-r-----. oracle oinstall 5月 tnsnames.ora
[oracle@CentOS admin]$ lsnrctl stop LSNRCTL for Linux: Version 11.2.0.1. - Production on -MAR- :: Copyright (c) , , Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=CentOS)(PORT=)))
The command completed successfully [oracle@CentOS admin]$ ll
总用量
-rw-r--r-- oracle oinstall 3月 : listener.ora
drwxr-xr-x. oracle oinstall 5月 samples
-rw-r--r--. oracle oinstall 5月 shrept.lst
-rw-r-----. oracle oinstall 5月 tnsnames.ora
[oracle@CentOS admin]$ mv listener.ora listener.ora_bak
[oracle@CentOS admin]$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.1. - Production on -MAR- :: Copyright (c) , , Oracle. All rights reserved. Starting /u01/app/oracle/product/11.2./dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 11.2.0.1. - Production
Log messages written to /u01/app/oracle/diag/tnslsnr/CentOS/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=CentOS)(PORT=))) Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1. - Production
Start Date -MAR- ::
Uptime days hr. min. sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /u01/app/oracle/diag/tnslsnr/CentOS/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=CentOS)(PORT=)))
The listener supports no services
The command completed successfully
[oracle@CentOS admin]$ lsnrctl status LSNRCTL for Linux: Version 11.2.0.1. - Production on -MAR- :: Copyright (c) , , Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1. - Production
Start Date -MAR- ::
Uptime days hr. min. sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /u01/app/oracle/diag/tnslsnr/CentOS/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=CentOS)(PORT=)))
Services Summary...
Service "sn01" has instance(s).
Instance "vmdb", status READY, has handler(s) for this service...
Service "sn02" has instance(s).
Instance "vmdb", status READY, has handler(s) for this service...
Service "vmdb" has instance(s).
Instance "vmdb", status READY, has handler(s) for this service...
Service "vmdbXDB" has instance(s).
Instance "vmdb", status READY, has handler(s) for this service...
The command completed successfully
可以看到只有动态注册的服务名,没有了UNKNOW。
启动监听时,虽然显示The listener supports no services,但是由于动态注册是PMON进程主动向监听器注册,所以监听状态依然能看到动态注册的服务处于READY状态,可以对外提供访问服务。
oracle监听器初识-配置多SERVICE_NAMES的更多相关文章
- Oracle 监听器日志配置与管理
十一假期间,某客户因为监听日志问题导致系统登录挂起,当时在返京的路上,因客户业务不允许中断,无奈之下,借了个本子帮客户做了紧急处理,今天恰好有空,在网上搜了下有关监听日志的内容,发现一个不错的帖子,内 ...
- 对于oracle监听器的配置
oracle 的 net configuration assist中配置完第一项的监听程序配置(对应文件listener.ora)之后,还要重新配置下第三项本地网络服务名配置(对应文件tnsname ...
- Oracle监听器
Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用.它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默 ...
- Oracle 监听器 Listene
Oracle 监听器 Listener 是一个重要的数据库服务器组件,在整个 Oracle 体系结构中,扮演着重要的作用.它负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默 ...
- ArcSDE10.1配置Oracle 监听器来使用SQL操作ST_Geometry(个人改动版)
发了两天的时间来解决配置Oracle 监听器来使用SQL操作ST_Geometry的配置,网上搜索一大片,结果真正找到的只有方法可用,下面把这个方法我个人在总结下. ArcSDE10.1配置Oracl ...
- Oracle 监听器
Oracle监听器listener是一个重要的数据库服务器组件,在整个Oracle体系结构中,扮演着重要的作用. 监听器Lisener功能 从当前的Oracle版本看,Listener主要负责下面的几 ...
- Oracle一个实例配置多个监听
要想给一个Oracle实例配置多个监听,首先要定义多个监听器,因为是多个监听,势必会有一些监听端口不是1521. 现在服务端的listener.ora文件中定义如下监听器: LISTENER = (D ...
- oracle监听器启动,实例启动
1,su - oracle登录oracle用户 2,sqlplus / as sysdba登录oracle 3,show parameter service_names; 若正常输出servicena ...
- 本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。——Oracle监听器服务无法启动!
问题: oracle服务设置为手动启动.但是开机后手动启动监听服务后弹出框,提示“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止.某些服务在未由其他服务或程 ...
随机推荐
- (数学) PTA 1005 继续(3n+1)猜想 (25 分)
1005 继续(3n+1)猜想 (25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程 ...
- (最大连续和/最大子段和) P1115 最大子段和 洛谷
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一个正整数NN,表示了序列的长度. 第二行包含NN个绝对值不大于1000010000的整数A_iAi ...
- C# 实现身份验证之WEB Service篇
在这个WEB API横行的时代,讲WEB Service技术却实显得有些过时了,过时的技术并不代表无用武之地,有些地方也还是可以继续用他的,我之所以会讲解WEB Service,源于我最近面试时被问到 ...
- 图论分支-倍增Tarjan求LCA
LCA,最近公共祖先,这是树上最常用的算法之一,因为它可以求距离,也可以求路径等等 LCA有两种写法,一种是倍增思想,另一种是Tarjan求法,我们可以通过一道题来看一看, 题目描述 欢乐岛上有个非常 ...
- Uart串口
title: Uart串口 tags: ARM date: 2018-10-20 16:38:28 --- Uart串口 和单片机的应用没什么区别,首先设置IO复用,设置波特率和数据位,以及中断相关的 ...
- FastDFS与springboot整合例子
余庆先生提供了一个Java客户端,但是作为一个C程序员,写的java代码可想而知.而且已经很久不维护了. 这里推荐一个开源的FastDFS客户端,支持最新的SpringBoot2.0. 配置使用极为简 ...
- js学习总结:DOM节点一(选择器,节点类型)
DOM:document object model 文档对象模型 DOM就是整个HTML文档的关系图谱(代表整个HTML文档),可以理解为下图: 一.查看元素节点 1.document.getElem ...
- hdu 6385
题意是在一个矩形中任给N个点,求这N个点到矩形某边的最短距离和. 一开始想到直接贪心,求出每个点到矩形一边的最短距离,但题中说到线段间不能交叉,这里好像是比较麻烦,但题目中同时说了点与点之间的横纵坐标 ...
- kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail
kali渗透测试之缓冲区溢出实例-windows,POP3,SLmail 相关链接:https://www.bbsmax.com/A/xl569l20Jr/ http://4hou.win/wordp ...
- luogu 1772 物流运输 ZJOI2006 spfa+dp
主要路径上存在时间限制(消失) 因为数据较小(点数较小),利用限制条件在规定时间内分别spfa,(也可用floyd) 再通过dp取最优值 #include<bits/stdc++.h> # ...