ITPub博客

监听器listener.ora中HOST参数配置

原创 作者:realkid4 时间:2014-01-02 18:02:10 1 删除 编辑

 

Oracle Net是我们使用Oracle过程中不可缺少的组件环节。对于初学者而言,三个配置文件tnsname.oralistener.orasqlnet.ora是最容易混乱的部分。而且,由于采用ASCII文本格式编辑,非常容易出现配置错误。

监听器控制文件listener.oraOracle服务器端管理重要组件文件。监听器监听端口、动静态注册等行为,与这个文件配置内容有千丝万缕的关系。其中的配置参数,如HOSTPort等,也是非容易混淆的内容。

本篇通过一系列的实验,来介绍HOST参数的使用配置方法,以及Oracle Net在处理Host时采用的算法模式。

 

1Host解析

 

我们在Listener.oraTnsname.ora中,都可以遇到Host参数。直观的看,这个参数作用就是指定连接的主机地址。在服务端,监听器listener.ora中的Host就是指定了监听器在哪些地址上进行监听动作。

监听器运行守候三个关键要素:伺候IP地址(一台主机可能有多个网卡、进而有多个IP地址)、连接协议(默认为TCP,但是很多时候处于安全考量会使用其他协议)、端口对象(在哪个端口进行连接等待)。

Host参数而言,我们可以在服务端listener.ora文件中选择IP地址和主机服务器名称。两种方法下,Oracle监听器是采用不同的策略方法的。

 

2、环境准备

 

准备一个多IP网卡的主机环境。实验机器上安装两个网卡对象,配置不同的IP地址。

 

[root@SimpleLinux network-scripts]# ifconfig

eth0      Link encap:Ethernet  HWaddr 08:00:27:C2:AB:D2 

          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fec2:abd2/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

eth1      Link encap:Ethernet  HWaddr 08:00:27:61:80:AF 

          inet addr:192.168.0.101  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::a00:27ff:fe61:80af/64 Scope:Link

 

两个IP地址被绑定在一台主机上,分别为192.168.0.100192.168.0.101。如果使用名称解析,还要讲IP地址和服务器名称绑定在DNS或者本地/etc/hosts文件中。

 

 

[root@SimpleLinux network-scripts]# cat /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1               SimpleLinux.localdomain SimpleLinux localhost.localdomain localhost

::1             localhost6.localdomain6 localhost6

192.168.0.100           SimpleLinux SimpleLinux.localdomain

192.168.0.101           SimpleLinux SimpleLinux.localdomain

 

3Host连接绑定主机名

 

如果HOST参数使用主机名,在进行连接监听的时候,Oracle会检索这个主机上所有的网络名称映射,将监听动作绑定在所有的IP地址上。落实到我们这个案例,就意味着对两个IP地址都存在监听行为。

 

 

oracle@SimpleLinux admin]$ ls -l

total 16

-rw-r--r-- 1 oracle oinstall  357 Sep  9 08:49 listener.ora

drwxr-xr-x 2 oracle oinstall 4096 Sep  9 08:39 samples

-rw-r--r-- 1 oracle oinstall  205 May 11  2011 shrept.lst

-rw-r----- 1 oracle oinstall  322 Sep  9 09:01 tnsnames.ora

[oracle@SimpleLinux admin]$ cat listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = SimpleLinux.localdomain)(PORT = 1521))

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

    )

  )

 

ADR_BASE_LISTENER = /u01/app

 

注意:当前使用的就是主机名称。启动监听器进行监听动作。

 

 

[oracle@SimpleLinux admin]$ lsnrctl status

 

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-JAN-2014 15:00:17

 

Listener Parameter File   /u01/app/oracle/network/admin/listener.ora

Listener Log File         /u01/app/diag/tnslsnr/SimpleLinux/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SimpleLinux.localdomain)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

 

从远程服务器进行连接测试。

 

 

D:\>tnsping ora11g

 

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 02-1 -

2014 15:00:51

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

已使用的参数文件:

D:\app\Administrator\product\11.2.0\client_1\network\admin\sqlnet.ora

 

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora11g)))

OK (210 毫秒)

 

 

D:\>tnsping ora11g_101

 

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 02-1 -

2014 15:02:21

 

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

 

已使用的参数文件:

D:\app\Administrator\product\11.2.0\client_1\network\admin\sqlnet.ora

 

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora11g)))

OK (10 毫秒)

 

使用sqlplus连接成功。

 

 

SQL> conn scott/tiger@ora11g

已连接。

SQL> conn scott/tiger@ora11g_101

已连接。

 

说明:当我们使用HOST主机名的时候,Oracle监听器会对该计算机上所有的IP地址开启监听动作。

 

4Host使用IP地址

 

下面使用IP地址配置Host的情况,修改listener.ora文件。

 

 

[oracle@SimpleLinux admin]$ cat listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/network/admin/listener.ora

# Generated by Oracle configuration tools.

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

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

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

    )

  )

 

ADR_BASE_LISTENER = /u01/app

 

启动监听器。

 

 

[oracle@SimpleLinux admin]$ lsnrctl status

 

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-JAN-2014 15:06:15

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.100)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

The listener supports no services

The command completed successfully

 

注意,这个过程中出现一些问题。原有的动态注册动作失效。服务不能注册到IP192.168.0.100的服务器上。

此时的解决方法有两个,一个是转而使用静态注册方法,使用SID_LIST参数进行文件注册。另一种是使用local_listener参数直接配置注册对象。

 

SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))';

 

System altered.

 

SQL> show parameter local_list

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

local_listener                       string      (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521))

SQL> alter system register;

 

System altered.

 

检查注册情况。

 

 

[oracle@SimpleLinux trace]$ lsnrctl status

 

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 02-JAN-2014 15:35:44

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.100)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Services Summary...

Service "ora11g" has 1 instance(s).

  Instance "ora11g", status READY, has 1 handler(s) for this service...

Service "ora11gXDB" has 1 instance(s).

  Instance "ora11g", status READY, has 1 handler(s) for this service...

The command completed successfully

 

测试连接。

 

 

D:\>tnsping ora11g_101

 

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 02-1 -2014 15:30:34

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

已使用的参数文件:

D:\app\Administrator\product\11.2.0\client_1\network\admin\sqlnet.ora

 

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora11g)))

TNS-12541: TNS: 无监听程序

 

D:\>tnsping ora11g

 

TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 02-1 -2014 15:30:38

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

已使用的参数文件:

D:\app\Administrator\product\11.2.0\client_1\network\admin\sqlnet.ora

 

已使用 TNSNAMES 适配器来解析别名

尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ora11g)))

OK (60 毫秒)

 

 

SQL> conn scott/tiger@ora11g

已连接。

SQL> conn scott/tiger@ora11g_101

ERROR:

ORA-12541: TNS: 无监听程序

警告: 您不再连接到 ORACLE

 

Oracle只能访问到位于192.168.0.100监听程序,101IP位置没有监听行为。

结论:如果Host配置IP地址,监听程序只能访问到所在的单独IP地址。其他网卡位置不能访问到。

 

 

5、结论

 

通过上面的实验,我们证明了在listener.ora文件中使用HOST配置主机名称和IP地址的差异,这个主要是由Oracle Net行为差异造成的。

最后说说客户端Host。对单实例而言,我们比较喜欢直接写IP地址在tnsname.ora里面。但是对于RAC环境,特别是11gR2RAC,引入SCAN的情况下,一些主机名称需单独配置在DNS中。

Oracle Net配置是我们经常遇到问题的环节,需要多多重视。

 


请登录后发表评论 登录
全部评论
求道~

注册时间:2010-11-30

  • 博文量
    545
  • 访问量
    7482525