要想给一个Oracle实例配置多个监听,首先要定义多个监听器,因为是多个监听,势必会有一些监听端口不是1521.

现在服务端的listener.ora文件中定义如下监听器:

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = ))
)
) L2000 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
)
)

一个监听1521端口的默认监听器,一个监听2000端口的监听器L2000. 到现在我们还没有给这两个监听器配置相应的Oracle服务.

监听器与Oracle服务关联有两种方式,静态注册和动态注册.

  • 动态注册

动态注册只能注册到默认的1521端口,而这里我们需要一次性的动态注册到两个端口,因为需要使用local_listener.

先在服务端的tnsnames.ora文件里加入一个描述对象ALL_LISTENER,具体叫什么其实都无所谓的.

然后会把它赋值给local_listner,这样Pmon才知道往那些指定的IP和端口发送注册请求.

动态注册的时候,PMon会到tnsnames.ora里面查找描述对象的具体信息,会用到红色的部分信息,蓝色的信息这个时候没有任何用处,但是稍微会讲这个在什么时候使用.

ALL_LISTENER =
(
DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
)
(
CONNECT_DATA =
(SERVICE_NAME = orcl.getpaid)
)
)

SQL> alter system set local_listener=ALL_LISTENER;

系统已更改。

SQL> alter system register;

系统已更改。

其实local_listener也接受直接的地址描述或者地址描述列表.

SQL> alter system set local_listener='(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1522)))';--更改local_listener后原来注册的服务会取消,然后PMON每隔一分钟重参试注册到新地址.下面我们手动触发注册.

系统已更改。

SQL> alter system register; --注册到新的local_listener

系统已更改。

SQL> alter system set local_listener='(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))))'; --同时注册到1521 和2000 端口.

系统已更改。

SQL> alter system register;

系统已更改。

下面是默认监听器的状态,这里看到注册了两个服务L2000.getpaid 和orcl.getpaid

LSNRCTL> status
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
启动日期 18-7月 -2014 02:01:29
正常运行时间 0 天 0 小时 0 分 14 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 d:\app\administrator\diag\tnslsnr\pricnessd\listener\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "L2000.getpaid" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 6 个处理程序...
服务 "orcl.getpaid" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 6 个处理程序...
命令执行成功

动态注册的服务名为service_name.db_domain, 而我配置了db_domain=getpaid , service_names=ORCL,L2000 ,所以最后动态注册了两个服务.

SQL> show parameter db_domain

NAME                                             TYPE                VALUE
------------------------------------ ---------------------- ----------------
db_domain                                      string                getpaid
SQL> show parameter service_name

NAME                                             TYPE                 VALUE
------------------------------------ ---------------------- ----------------
service_names                                string                ORCL, L2000

  • 静态注册

在服务端的listener.ora里对监听器L2000配置静态的服务名称和实例名,下面没有列出默认监听器的配置.

此时的默认监听器还是监听在1521端口的,而且没有设置local_listener(alter system reset local_listener 可以把local_listener还原成默认值).

所以Pmon会默认注册到默认监听器的.

因此我们只需要在给监听在2000端口的L2000配置静态服务,这样就有两个监听器为我们的实例服务了.

L2000 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
)
)

SID_LIST_L2000 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl.getpaid)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = orcl)
)
)

这里的GLOBAL_DBNAME=service_name.db_domain,和自动注册是在lsnrclt里看到的服务是一样的.

LSNRCTL> start l2000
启动tnslsnr: 请稍候...

TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
系统参数文件为D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
写入d:\app\administrator\diag\tnslsnr\pricnessd\l2000\alert\log.xml的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=2000)))

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=0.0.0.0)(PORT=2000)))
LISTENER 的 STATUS
------------------------
别名 l2000
版本 TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
启动日期 18-7月 -2014 02:36:54
正常运行时间 0 天 0 小时 0 分 1 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件 d:\app\administrator\diag\tnslsnr\pricnessd\l2000\alert\log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=2000)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl.getpaid" 包含 1 个实例。
实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功

  • 至此服务器端的监听配置就完成了,客服端的tnsnames.ora 配置文件里加入如下描述符.

ORCL描述符会把请求发到1521端口的默认监听器,L2000会把请求发到监听2000端口的L2000监听器.

ORCL =
(    DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = orcl.getpaid)
)
)

L2000 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.getpaid)
)
)

先用tnsping来测试描述符对应的地址能否连接上,tnsping 只能测试出描述符里对应的地址和端口是否能连上,但是不能判断描述符里的Servie_name是否正确或正常.

[D:\app\Administrator\product\11.2.0\dbhome_1]tnsping orcl

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 18-7月 -
2014 02:22:13

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的参数文件:
D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)
) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.getpaid)))
OK (30 毫秒)

[D:\app\Administrator\product\11.2.0\dbhome_1]tnsping l2000

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 18-7月 -
2014 02:22:17

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的参数文件:
D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\sqlnet.ora

已使用 TNSNAMES 适配器来解析别名
尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0
.0)(PORT = 2000))) (CONNECT_DATA = (SERVICE_NAME = L2000.getpaid)))
OK (0 毫秒)

用描述符来时间测试连接数据库

SQL> conn /@l2000 as sysdba
已连接。
SQL> conn /@orcl as sysdba
已连接。

在我们的tnsnames.ora文件里有个ALL_LISTENER ,当被用来赋值给local_listener的时候,只有ADDRESS_LIST有效,代表要向那些地址的监听器注册.

当被作为描述符用在客服端的连接请求里是,它会按顺序请求对应的地址上的监听器的对应SERVICE_NAME的服务,如果第一个失败,会参试后面的地址.

ALL_LISTENER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 2000))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.getpaid)
)
)

Oracle一个实例配置多个监听的更多相关文章

  1. centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例

    centos 安装oracle 11g r2(二)-----监听配置与创建数据库实例 一.监听配置(命令:netca) 1.以 oracle 用户输入命令,启动图形化工具配置监听 [oracle@lo ...

  2. Oracle 11g RAC 环境下单实例非缺省监听及端口配置

    如果在Oracle 11g RAC环境下使用dbca创建单实例数据库后,Oracle会自动将其注册到缺省的1521端口及监听器.大多数情况下我们使用的为非缺省监听器以及非缺省的监听端口.而且在Orac ...

  3. 连接Oracle时报错ORA-12541: TNS: 无监听程序

    从开始菜单中打开“Oracle Net Configuration Assistance”,选择“监听程序配置”,如下图所示,点击下一步.   选择“重新配置”,如下图所示,点击下一步.   选择监听 ...

  4. Oracle ORA-12541:TNS:无监听程序

    Oracle ORA-12541:TNS:无监听程序 标签: Oracle DataBase 今天使用Oracle数据库,使用可视化连接工具连接测试环境的数据库时提示无监听程序,最后在老师帮助下终于搞 ...

  5. Apache配置多个监听端口和不同的网站目录的简单方法(转)

    转自http://www.waaqi.com/archives/707.html 由于开发的多项目,每个项目又要独立,要用根目录地址. 所以这时候我们需要配置多个不同目录的Apache,如果是外部网可 ...

  6. 部署grafana+telegraf+influxdb 及 配置 jmeter后端监听

    搞性能测试,可以搭建Grafana+Telegraf+InfluxDB 监控平台,监控服务器资源使用率.jmeter性能测试结果等. telegraf: 是一个用 Go 编写的代理程序,可收集系统和服 ...

  7. 黄聪:windows下使用xampp3.2.2配置多个监听端口和不同的网站目录

    windows下使用xampp3.2.2配置多个监听端口和不同的网站目录 一:配置Apache文件httpd.conf 打开Apache的配置文件httpd.conf,可以通过点击xampp的Apac ...

  8. 【PHP】xampp配置多个监听端口和不同的网站目录(转)

    转自:https://blog.csdn.net/cc1314_/article/details/75646344 windows下使用xampp配置多个监听端口和不同的网站目录 一:配置Apache ...

  9. Oracle Net Manager 的使用方法(监听的配置方法)

    一,在服务端配置oracle端口 win+R  输入netca 弹出如下窗口后 选择监听程序配置,点击下一步 二.配置端口后使用Telnet工具调试端口是否联通 在命令行输入telnet 服务器ip ...

随机推荐

  1. e.KeyChar用到的键盘对应ASCII码值(转)

    十进制编码 (对应)缩写字符(或功能/解释)   0 NUL(null) 空字符   1 SOH(start of headline) 标题开始   2 STX (start of text) 正文开 ...

  2. RN组件之Switch与Picker

    一.Switch选择开关控件 1.该组件为Android/IOS通用的两种状态的开关组件 2.属性方法 (1)disabled bool:如果该值为true,用户就无法点击switch开关,默认为fa ...

  3. ModelMap和ModelAndView的作用

    首先介绍ModelMap和ModelAndView的作用 ModelMap ModelMap 对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即 ...

  4. python中迭代器和生成器

    l=[1,2,3,4] for n in l: print n 在看上面这段代码的时候,我们没有显式的控制列表的偏移量,就可以自动的遍历了整个列表对象.那么for 语句是怎么来遍历列表l的呢?要回答这 ...

  5. thinkphp模型没继承model报的错

    Call to undefined method RoleModel::query() 错误位置 FILE: H:\www\tpsmarty\shop\Lib\Model\RoleModel.clas ...

  6. 【iCore2模块】VGA模块样板谍照!

    基于 iCore2 双核心板的 VGA模块样机做出来好久了,经过一个多月的努力奋战,该模块的代码已经写完,硬件也测试完毕,性能很好.下面贴几张图: 照片一: 为了节约时间,打样用的是绿色的板子,不过批 ...

  7. BKDRhash实现

    参考了一些有关于哈希算法的博客,里面都有提到BKDR哈希算法,在博客:各种字符串Hash函数中有对各种hash算法进行测试,测试关于哈希冲突,以及散列的质量,得到的结果可以参考以上博文. BKDRha ...

  8. Linux 计划任务 Crontab 笔记与总结(2)Crontab 的基本组成与配置

    [Crontab 的基本组成] ① 系统服务 CROND:每分钟都会从配置文件刷新定时任务 ② 配置文件 :文件方式设置定时任务 ③ 配置工具 crontab:用途调整定时任务 [配置文件的配置文件格 ...

  9. THinkPHP在模板中的volist循环使用外部变量注意事项

    循环中.自己定义的id=volist就可以使用$volist.id 或者$volist['id'] 而外面定义的变量就不能使用$vo.id 必须使用$vo['id']<volist name=& ...

  10. 通过SocketLog快速分析OneThink程序

    通过SocketLog快速分析OneThink程序 http://www.thinkphp.cn/topic/10846.html   浏览:2332 发布日期:2014/02/08 分类:技术分享 ...