oracle一个监听多个实例6,Oracle一个实例配置多个监听

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

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

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))

)

)

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 [email protected] as sysdba

已连接。

SQL> conn [email protected] 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)

)

)

原文:http://www.cnblogs.com/princessd8251/p/3852526.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值