环境: 10.2.0.4 RAC
当节点1出现故障,节点的vip漂移到节点2后,客户端怎么连接节点1的VIP地址??
[oracle@rac2 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.orcl.db application ONLINE ONLINE rac2
ora....l1.inst application ONLINE OFFLINE
ora....l2.inst application ONLINE ONLINE rac2
ora....SM1.asm application ONLINE OFFLINE
ora....C1.lsnr application ONLINE OFFLINE
ora.rac1.gsd application ONLINE OFFLINE
ora.rac1.ons application ONLINE OFFLINE
ora.rac1.vip application ONLINE ONLINE rac2
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2
查看客户端连接数据库的tnsnames文件的配置
10GRAC2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.118)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
10GRAC1 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.117)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
可以看出连接串10GRAC1连接IP 192.168.56.118,连接串10GRAC2连接IP 192.168.56.119,采用SERVICE_NAME。
查看数据库服务器端hosts文件配置
[oracle@rac1 ~]$ cat /etc/hosts
192.168.56.115 rac1
192.168.56.116 rac2
192.168.56.117 rac1-vip
192.168.56.118 rac2-vip
10.10.10.2 rac1-priv
10.10.10.3 rac2-priv
[oracle@rac2 ~]$ ifconfig -a
eth0 Link encap:Ethernet HWaddr 08:00:27:9B:83:FF
inet addr:192.168.56.116 Bcast:192.168.56.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:266 errors:0 dropped:0 overruns:0 frame:0
TX packets:269 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:40809 (39.8 KiB) TX bytes:46375 (45.2 KiB)
eth0:1 Link encap:Ethernet HWaddr 08:00:27:9B:83:FF
inet addr:192.168.56.118 Bcast:192.168.56.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0:2 Link encap:Ethernet HWaddr 08:00:27:9B:83:FF
inet addr:192.168.56.117 Bcast:192.168.56.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth1 Link encap:Ethernet HWaddr 08:00:27:2D:84:02
inet addr:10.10.10.3 Bcast:10.10.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:50728 errors:0 dropped:0 overruns:0 frame:0
TX packets:43537 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:36890067 (35.1 MiB) TX bytes:24193321 (23.0 MiB)
此时客户端连接数据库会出现以下报错:
C:\Users\zylong>sqlplus sys/oracle@10grac1 as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期五 8月 12 11:40:42 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
ERROR:
ORA-12541: TNS: 无监听程序
请输入用户名:
查看节点2的监听listener文件
[oracle@rac2 admin]$ cat listener.ora
# listener.ora.rac2 Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora.rac2
# Generated by Oracle configuration tools.
LISTENER_RAC2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.116)(PORT = 1521)(IP = FIRST))
)
)
SID_LIST_LISTENER_RAC2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)
修改 节点2的监听 listener文件如下:
LISTENER_RAC2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521))
)
)
SID_LIST_LISTENER_RAC2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)
此时客户端连接数据库正常
C:\Users\zylong>sqlplus sys/oracle@10grac1 as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期五 8月 12 11:49:07 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL>
SQL>
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string
db_name string orcl
db_unique_name string orcl
global_names boolean FALSE
instance_name string orcl2
lock_name_space string
log_file_name_convert string
service_names string orcl
如果关键字HOST配置为IP地址解析名,则绑定步骤如下:
(1)oracle根据IP地址解析名调用gethostbyname()函数取得IP地址(IP地址可能有多个)。
(2)oracle调用gethostname()函数获取服务器的主机名,并再次调用gethostbyname()函数获取主机名对应的IP地址(IP地址可能有多个)。
(3)将步骤(1)获取的第一个IP地址和步骤(2)获取的所有IP地址进行比对,如果匹配成功,则监听运行在该服务器所有激活的网卡上。如果匹配不成功,则监听只运行在步骤(1)解析出来的Ip地址上。
结论:如果关键字HOST配置为主机名,则监听运行在该服务器所有激活的网卡上。
注意:如果将关键字HOST设置为主机名,当加有关键字IP=FIRST时,监听只运行在主机名对应的IP地址上,这种配置在oracle 10G RAC系统中较为常见。