11gRAC的监听
一、IP的概念
1.Public IP
- 这是网卡上配置的真实IP地址,我们称为公共IP,这个IP的存在关系到 VIP 能不能正确漂在其所在网卡上
- 注意,PUBLIC IP是不提供给客户端去连接配置的,这并不是说通过 PUBLIC IP 无法连接实例,而是当节点服务器宕机时,所有向它请求连接的客户端都会有等待现象并且最后得到超时信息
2.Private IP
- 称为私网 IP(私有IP),它是用于心跳同步的,也就是保证两台服务器数据同步
- Oracle另一个高可用性连接特性(HAIP)
- 其实 Cache Fusion 会消耗节点服务器很大的私网资源,另外,私网间无法通信还会引起 brain split(脑裂),以前为解决这种问题,我们可以采用网卡 bonding 技术,而 Oracle 在 11g R2 的时候通过 HAIP 技术来实现
- HAIP(Highly Available Virtual IP)用于节点间的私网通信,支持同时使用多个网络连接来满足网卡间的负载均衡,并且还提高了Cache Fusion 资源通信能力
3.Virtual IP
- RAC 的每个节点都需要有一个虚拟IP,这就是VIP
- VIP 会绑定到节点的 public 网卡上,需要和 PUBLIC IP同一个子网,它们是由 GI 的 Clusterware 来管理的
- VIP 在其节点服务器发生故障的时候会自动漂移到另外正常的节点服务器上,如果 RAC 是多节点运行的,那具体漂移到哪个活动的节点将由Clusterware 决定
- 等故障节点恢复正常,漂移的 VIP 也回到此节点上,继续提供服务
二、监听的基本概念
- Oracle11gR2 RAC开始引入scan概念,一般通过dns服务器或gns服务器解析scan,也可以使用/etc/hosts文件解析scan,只不过oracle官方不建议这样做,hosts文件只能解析一个scan ip
- 监听器前移到$GRID_HOME/network/admin/listener.ora文件,即11g rac监听器由grid用户管理,oracle用户保留文件,但已经不起作用。客户端文件tnsnames.ora依然在$ORACLE_HOME/network/admin/tnsnames.ora文件。
- scan的提出彻底做到了rac数据库对用户的透明管理,客户端通过scan域名直接连接数据库即可(首先客户端可以解析scan域名),具体由DNS服务器解析域名,这里如果用dns解析scan,最多可以解析3个scan vip,通过scan域名访问数据库可以实现scan vip的failover和负载均衡,即只要3个scan vip中存活一个,客户端应用既可以访问数据库。
- 如果采用hosts文件解析scan,只能解析一个scan vip。
1. 11gRAC的监听又分为本地监听和scan监听
1.1 LOCAL LISTENER
- 本地监听,RAC 的每个节点上都会有独立的本地监听,它会监听该节点的 PUBLIC IP 和 VIP。
- 每个节点的实例在启动的时候向本地监听进行注册,当 VIP 或者PUBLIC IP (这种情况比较少见)有连接请求的时候,本地监听就接受处理并和本地实例建立连接。如果某个节点故障,其上面的VIP会进行漂移,但本地监听并不会产生漂移。
1.2 SCAN LISTENER:
- SCAN 监听,它是实现 SCAN 负载均衡的原理。
- SCAN 监听跟着 SCAN VIP 随机分配到节点服务器上,如果某个节点发生故障,运行在此节点上的 SCAN VIP 会进行漂移,这时候 SCAN 监听也跟着漂移到正常的节点上,继续为 SCAN VIP 监听连接请求,当 PMON 进程下次动态更新实例信息到该 SCAN 监听后,它又重新接受客户端的连接。
2. 10g监听与11g监听的对比
Oracle 10g rac中监听器由oracle用户管理,每个节点上,只有一个监听器,但是这个监听器同时监听public ip和vip,即oracle 10g rac中的监听器同时承担着路由选择和建立连接的功能。10g rac客户端通过vip连接数据库。
Oracle 11g rac中使用GRID_HOME下的监听器而不采用ORACLE_HOME 下的监听器,同时在Oracle 11g rac中出现了多个监听器,使用名称区分。所以11g rac的监听器使用grid用户管理,而不通过oracle用户进行管理。11g rac监听器分本地监听器(建立连接)和scan监听器(路由转发)2种,另外,每一个scan vip都会有一个scan监听器,并且运行在同一个节点上。即:
- 每个节点上都运行一个本地监听器,这个监听器负责监听本地的vip。
- 凡是scan ip漂移到的节点,都会运行scan监听器。
- scanvip和scan监听器成对出现。
三、监听器管理
1.基本配置信息
[grid@node1 admin]$ pwd
/u01/app/11.2.0/grid/network/admin
[grid@node1 admin]$ cat listener.ora
# listener.ora.node1 Network Configuration File: /u01/app/11.2.0/grid/network/admin/listener.ora.node1
# Generated by Oracle configuration tools.
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3 = ON
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2 = ON
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER1 = ON
LISTENER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
)
)
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON
LISTENER_SCAN3 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN3))
)
)
LISTENER_SCAN2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN2))
)
)
LISTENER_SCAN1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))
)
)
节点2 listener.ora配置:
[grid@node2 admin]$ pwd
/u01/app/11.2.0/grid/network/admin
[grid@node2 admin]$ cat listener.ora
# listener.ora.node2 Network Configuration File: /u01/app/11.2.0/grid/network/admin/listener.ora.node2
# Generated by Oracle configuration tools.
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3 = ON
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2 = ON
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1 = ON
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER1 = ON
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/11.2.0/grid)
(SID_NAME = orcl2)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
)
ADR_BASE_LISTENER = /u01/app/grid
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON
LISTENER_SCAN3 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN3))
)
LISTENER_SCAN2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN2))
)
LISTENER_SCAN1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER_SCAN1))
)
ADR_BASE_LISTENER_SCAN3 = /u01/app/grid
ADR_BASE_LISTENER_SCAN2 = /u01/app/grid
ADR_BASE_LISTENER_SCAN1 = /u01/app/grid
说明:
- local_listener 默认不需要配置,默认配置指向1521端口,对于单实例改变端口需要指向tns里的连接字符串,而在rac配置中默认指向本节点的vip。
- remote_listener指向的是scan监听名,需要远程监的配置。
- Oracle 11.2版本后,有一个新的监听文件endpoints_listener.ora被引进,里面的内容是节点的IP和VIP信息 。
- Endpoints_listener.ora 文件的作用是向后兼容11.2版本以前的数据库,DBCA建库时,需要通过获取endpoints的位置信息来配置数据库参数和tnsnames,其中最下面两行参数涉及
ENABLE_GLOBAL_DYNAMIC_ENDPOINT
参数,该参数的作用是允许监听程序接受针对oracle 11.2版本之前未进行动态注册的连接。
2.查看scan vip配置
[grid@node1 admin]$ srvctl config scan
SCAN name: scan-cluster, Network: 1/192.168.100.0/255.255.255.0/eth0
SCAN VIP name: scan1, IP: /scan-cluster/192.168.100.45
SCAN VIP name: scan2, IP: /scan-cluster/192.168.100.46
SCAN VIP name: scan3, IP: /scan-cluster/192.168.100.47
3.查看scan vip状态
[grid@node1 admin]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node node2
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node node2
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node node1
4.查看scan listener配置
[grid@node1 admin]$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
5.查看scan listener状态
[grid@node1 admin]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node node2
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node node2
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node node1
6.查看本地监听器配置
节点1:
[grid@node1 admin]$ srvctl config listener
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1521
节点2:
[grid@node2 admin]$ srvctl config listener
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1521
7.查看本地监听器状态
节点1:
[grid@node1 admin]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): node2,node1
节点2:
[grid@node2 admin]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): node2,node1
8.查看本地运行的监听器
节点1:
[grid@node1 admin]$ ps -ef|grep lsnr
grid 6290 8174 0 16:12 pts/1 00:00:00 grep lsnr
grid 23796 1 0 11:24 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN3 -inherit
grid 23859 1 0 11:24 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
节点2:
[grid@node2 admin]$ ps -ef|grep lsnr
grid 8649 1 0 11:44 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN2 -inherit
grid 10591 1 0 Mar24 ? 00:00:01 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
grid 18776 6639 0 16:13 pts/1 00:00:00 grep lsnr
grid 24334 1 0 Mar24 ? 00:00:02 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
9.资源查看
[grid@node2 admin]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
ONLINE ONLINE node1
ONLINE ONLINE node2
ora.FRA.dg
ONLINE ONLINE node1
ONLINE ONLINE node2
ora.LISTENER.lsnr
ONLINE ONLINE node1
ONLINE ONLINE node2
ora.OCRVOTE.dg
ONLINE ONLINE node1
ONLINE ONLINE node2
ora.asm
ONLINE ONLINE node1 Started
ONLINE ONLINE node2 Started
ora.gsd
OFFLINE OFFLINE node1
OFFLINE OFFLINE node2
ora.net1.network
ONLINE ONLINE node1
ONLINE ONLINE node2
ora.ons
ONLINE ONLINE node1
ONLINE ONLINE node2
ora.registry.acfs
ONLINE ONLINE node1
ONLINE ONLINE node2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE node2
ora.cvu
1 ONLINE ONLINE node2
ora.node.db
1 ONLINE ONLINE node1 Open
2 ONLINE ONLINE node2 Open
ora.node1.vip
1 ONLINE ONLINE node1
ora.node2.vip
1 ONLINE ONLINE node2
ora.oc4j
1 ONLINE ONLINE node2
ora.scan1.vip
1 ONLINE ONLINE node2
[grid@node2 admin]$
发现本地监听在ora.LISTENER.lsnr各自online,而scan监听ora.LISTENER_SCAN1.lsnr在节点2上online;
四、使用srvctl 添加静态监听
参考: http://www.askmaclean.com/archives/11gr2-rac-add-listener-static-register.html
1.添加监听
在grid用户下执行
[grid@node2 admin]$ srvctl config network
Network exists: 1/192.168.56.0/255.255.255.0/eth0, type static
[grid@node2 admin]$
[grid@node2 admin]$ srvctl add listener -h
Adds a listener configuration to the Oracle Clusterware.
Usage: srvctl add listener [-l ] [-s] [-p "[TCP:][, ...][/IPC:][/NMP:][/TCPS:] [/SDP:]"] [-o ] [-k ]
-l Listener name (default name is LISTENER)
-o ORACLE_HOME path (default value is CRS_HOME)
-k network number (default number is 1)
-s Skip the checking of ports
-p "[TCP:][, ...][/IPC:][/NMP:][/TCPS:] [/SDP:]" Comma separated tcp ports or listener endpoints
-h Print usage
-k 填入方才获得的network number,-p填入端口号,-l填入监听名,-o 填入GI HOME路径
2.执行添加监听操作
[grid@node2 admin]$ srvctl add listener -l LISTENER_TEST -o $ORACLE_HOME -p 1522 -k 1
[grid@node2 admin]$
查询监听状态
[grid@node2 admin]$ srvctl status listener -h
Displays the current state of the listener.
Usage: srvctl status listener [-l ] [-n ] [-v]
-l Listener name
-n Node name
-v Verbose output
-h Print usage
[grid@node2 admin]$ srvctl status listener -l LISTENER_TEST
Listener LISTENER_TEST is enabled
Listener LISTENER_TEST is not running
[grid@node2 admin]$
3.启动监听
[grid@node2 admin]$ srvctl start listener -l LISTENER_TEST
4.查看新建的监听状态
[grid@node2 admin]$ lsnrctl status LISTENER_TEST
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2017 15:29:46
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_TEST)))
STATUS of the LISTENER
------------------------
Alias LISTENER_TEST
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 19-OCT-2017 15:29:12
Uptime 0 days 0 hr. 0 min. 35 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/app/11.2.0/grid/network/admin/listener.ora
Listener Log File /oracle/app/11.2.0/grid/log/diag/tnslsnr/node2/LISTENER_TEST/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_TEST)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.4)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.5)(PORT=1522)))
The listener supports no services
The command completed successfully
[grid@node2 admin]$
5.查看监听配置文件
srvctl start listener启动新添加的监听后listener.ora和endpoints_listener.ora会出现新的记录
[grid@node2 admin]$ cat listener.ora
LISTENER_TEST=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_TEST)))) # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent
#----ADDED BY TNSLSNR 19-OCT-2017 10:31:25---
PASSWORDS_LISTENER = 1DF5C2FD0FE9CFA2
#--------------------------------------------
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_TEST=ON # line added by Agent
[grid@node2 admin]$
[grid@node2 admin]$ cat endpoints_listener.ora
LISTENER_TEST_node2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=node2-vip)(PORT=1522))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.4)(PORT=1522)(IP=FIRST))))# line added by Agent
LISTENER_node2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=node2-vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.4)(PORT=1521)(IP=FIRST)))) # line added by Agent
[grid@node2 admin]$
6.加入静态注册信息
SID_LIST_LISTENER_TEST =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = node)
(ORACLE_HOME = /oracle/app/11.2.0/grid)
(SID_NAME=node2)
)
)
加入如上信息到listener.ora配置文件中(SIDLIST($LISTENER_NAME),并重启监听即完成静态注册:
[grid@node2 admin]$ srvctl status listener -l LISTENER_TEST
Listener LISTENER_TEST is enabled
Listener LISTENER_TEST is running on node(s): node1,node2
[grid@node2 admin]$
[grid@node2 admin]$ srvctl stop listener -l LISTENER_TEST
[grid@node2 admin]$
[grid@node2 admin]$ srvctl status listener -l LISTENER_TEST
Listener LISTENER_TEST is enabled
Listener LISTENER_TEST is not running
[grid@node2 admin]$
[grid@node2 admin]$ srvctl start listener -l LISTENER_TEST -n node2
[grid@node2 admin]$
[grid@node2 admin]$ srvctl status listener -l LISTENER_TEST
Listener LISTENER_TEST is enabled
Listener LISTENER_TEST is running on node(s): node2
命令srvctl start listener -l LISTENER_TEST -n node2
只在一个节点启动监听
7.启动监听不加参数默认是在两个节点同时启动
[grid@node2 admin]$ srvctl stop listener -l LISTENER_TEST
[grid@node2 admin]$
[grid@node2 admin]$ srvctl status listener -l LISTENER_TEST
Listener LISTENER_TEST is enabled
Listener LISTENER_TEST is not running
[grid@node2 admin]$
[grid@node2 admin]$ srvctl start listener -l LISTENER_TEST -n node1,node2
PRKO-2003 : Invalid command line option value: node1,node2
[grid@node2 admin]$
[grid@node2 admin]$ srvctl start listener -l LISTENER_TEST
[grid@node2 admin]$
[grid@node2 admin]$ srvctl status listener -l LISTENER_TEST
Listener LISTENER_TEST is enabled
Listener LISTENER_TEST is running on node(s): node1,node2
8.查询监听LISTENER_TEST状态
[grid@node2 admin]$ lsnrctl status LISTENER_TEST
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 19-OCT-2017 16:08:14
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_TEST)))
STATUS of the LISTENER
------------------------
Alias LISTENER_TEST
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 19-OCT-2017 16:05:30
Uptime 0 days 0 hr. 2 min. 43 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oracle/app/11.2.0/grid/network/admin/listener.ora
Listener Log File /oracle/app/11.2.0/grid/log/diag/tnslsnr/node2/LISTENER_TEST/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_TEST)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.4)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.5)(PORT=1522)))
Services Summary...
Service "node" has 1 instance(s).
Instance "node2", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[grid@node2 admin]$
附上节点一的监听配置信息:
[grid@node1 admin]$ cat listener.ora
LISTENER_TEST=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_TEST)))) # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_TEST=ON # line added by Agent
[grid@node1 admin]$
[grid@node1 admin]$ cat endpoints_listener.ora
LISTENER_TEST_node1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=node1-vip)(PORT=1522))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.2)(PORT=1522)(IP=FIRST))))# line added by Agent
LISTENER_node1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=node1-vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.2)(PORT=1521)(IP=FIRST)))) # line added by Agent
五、11gRAC的监听排错步骤
1.在任意节点上使用tnsnames.ORA通过scan-ip登陆数据库
[grid@node1 admin]$ tnsping RACDB
TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 02-JAN-2014 18:41:16
Copyright (c) 1997, 2009, Oracle. All rights reserved.
Used parameter files:
/u/app/11.2.0/grid/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.134.30.50)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACDB)))
OK (0 msec)
[grid@node1 admin]$ sqlplus scott/testpassword@RACDB
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 2 18:41:27 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL>
2.检查RAC上的scan-ip配置
[grid@node1 ~]$ srvctl config scan
SCAN name: RACSCAN.localdomain., Network: 1/10.134.30.0/255.255.255.0/eth0
SCAN VIP name: scan1, IP: /RACSCAN.localdomain/10.134.30.50
SCAN VIP name: scan2, IP: /RACSCAN.localdomain/10.134.30.51
SCAN VIP name: scan3, IP: /RACSCAN.localdomain/10.134.30.52
[grid@node1 ~]$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
3.DNS测试
[root@node1 ~]# nslookup RACSCAN.localdomain.
Server: 10.134.30.27
Address: 10.134.30.27#53
Name: RACSCAN.localdomain
Address: 10.134.30.52
Name: RACSCAN.localdomain
Address: 10.134.30.50
Name: RACSCAN.localdomain
Address: 10.134.30.51
[grid@node1 ~]$ nslookup 10.134.30.50
Server: 10.134.30.27
Address: 10.134.30.27#53
50.30.134.10.in-addr.arpa name = RACSCAN.localdomain.
[grid@node1 ~]$ nslookup 10.134.30.51
Server: 10.134.30.27
Address: 10.134.30.27#53
51.30.134.10.in-addr.arpa name = RACSCAN.localdomain.
[grid@node1 ~]$ nslookup 10.134.30.52
Server: 10.134.30.27
Address: 10.134.30.27#53
52.30.134.10.in-addr.arpa name = RACSCAN.localdomain.
多次运行nslookup RACSCAN.localdomain.可观察到scan-ip轮询没有任何问题,反向解析亦没有任何问题。
4.ping三个scan-ip
primary$ping 10.134.30.47
PING 10.134.30.47 (10.134.30.47) 56(84) bytes of data.
64 bytes from 10.134.30.47: icmp_seq=1 ttl=63 time=0.508 ms
primary$ping 10.134.30.48
PING 10.134.30.48 (10.134.30.48) 56(84) bytes of data.
64 bytes from 10.134.30.48: icmp_seq=1 ttl=63 time=0.522 ms
primary$ping 10.134.30.50
PING 10.134.30.50 (10.134.30.50) 56(84) bytes of data.
64 bytes from 10.134.30.50: icmp_seq=1 ttl=63 time=0.514 ms
5.在任意客户端测试可否登陆
primary$tnsping guijian
TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 02-JAN-2014 19:12:15
Copyright (c) 1997, 2009, Oracle. All rights reserved.
Used parameter files:
/u/app/oracle/product/11g/db/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = RACSCAN.localdomain.)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RACDB)))
OK (0 msec)-------------------------à此处透过scan-ip的tnsping正常
primary$
primary$sqlplus scott/Testpassword@guijian
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jan 2 19:08:06 2014
Copyright (c) 1982, 2009, Oracle. All rights reserved.
ERROR:
ORA-12170: TNS:Connect timeout occurred
primary$
等待N久之后提示超时,但此时的tnsping正常,起初测试也曾提示提示 no listener。
6.检查监听器配置
[grid@node1 admin]$ cat listener.ora
LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))) # line added by Agent
LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))) # line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))) # line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))) # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON # line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent
经过初步的检测问题可能不是出在服务器监听这一块,而是可能出在与监听相关的初始化参数上。
7.检查数据库两个与监听相关的参数
SQL> show parameter local_listener
SQL> show parameter remote_listener