最近使用VirtualBox搭建了RAC测试环境,一共创建了4个虚拟机,如下:
vm1: RouterOS,路由系统,虚拟机访问外网的网关,同时支持不同内网中的虚拟机互访
网卡1,桥接网卡,连接宿主机网卡,192.168.31.88/24
网卡2,内部网络,连接LAN01,用于RAC Public网络,172.16.1.254/24
网卡3,连接LAN02,用于RAC Private网络,10.0.0.254/24
vm2:Openfiler,iSCSI共享存储服务
网卡1,172.16.1.99/24
网卡2,10.0.0.99/24
vm3: OEL-6.8_x86-64,安装Oracle RAC 节点1
网卡1,172.16.1.1/24
网卡2,10.0.0.1/24
vm4: OEL-6.8_x86-64,安装Oracle RAC 节点2
网卡1,172.16.1.2/24
网卡2,10.0.0.2/24
节点1 VIP 172.16.1.11
节点2 VIP 172.16.1.22
SCAN IP 172.16.1.100
与RouterOS网卡1桥接的宿主机网卡IP地址为192.168.31.40
RAC测试环境部署完成后,检查各项服务和监听均运行正常,之后进行客户端连接测试:
1. 在RouterOS中添加DST-NAT条目
192.168.31.88:15211 -->172.16.1.11:1521
192.168.31.88:15212 -->172.16.1.22:1521
192.168.31.88:15210--> 172.16.1.100:1521
2. 在宿主机上安装了PL/sql程序,修改tnsnames.ora文件,通过Connect TimeConnection Failover方式连接:
mydb =
(DESCRIPTION=
(FAILOVER=ON)
(ADDRESS_LIST=
(LOAD_BALANCE=OFF)
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.31.88)(PORT=15211))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.31.88)(PORT=15212))
)
(CONNECT_DATA=(SERVICE_NAME=mydb))
)
连接成功。
修改tnsnames.ora,通过Runtime Connection Failover方式连接:
mydb-scan =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=192.168.31.88)(PORT=15210))
)
(CONNECT_DATA =
(SERVICE_NAME = mydb)
(FAILOVER_MODE =
(TYPE = session)
(METHOD = basic)
(RETRIES = 180)
(DELAY = 5)
)
)
)
无论是sql*PLUS还是PL/sql均连接失败,提示信息为:连接超时,ORA-12170,Google了半天,几乎把所有解决方法都试了一遍,仍然没找到问题所在,看来很可能是当前测试环境造成的,没办法先开个Server2008的虚拟机(Oracle服务器,IP地址172.16.1.30),由于这台服务器属于内部网络LAN01,不通过RouterOS进行地址映射,需要对tnsnames.ora稍做改动:
mydb-scan =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=172.16.1.100)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = mydb)
(FAILOVER_MODE =
(TYPE = session)
(METHOD = basic)
(RETRIES = 180)
(DELAY = 5)
)
)
)
使用sql*PLUS连接成功,看来十有八九和网络环境有关了。
使用命令tcpdump –nn port 1521 看了下连接成功的数据包,发现前几个数据包是172.16.1.30和172.16.1.100收发的,第14个包是客户端(172.16.1.30)向172.16.1.11发送的SYN包,之后的数据包都是这两个地址在传输。
同样命令查看了下通过宿主机连接,并且失败情况下传输的数据,发现前13个数据包是宿主机和172.16.1.100收发的,之后再无捕获数据包,仔细想了下,如果存在第14个数据包,应该是宿主机向172.16.1.11或172.16.1.22发送的SYN包,但宿主机上并没有到172.16.1.0/24这个网络的路由存在,肯定会发送失败了,使用以下命令在宿主机上添加路由即可:
C:\>route –p add 172.16.1.0 mask 255.255.255.0 192.168.31.88
添加后再次连接成功。
原文链接:https://www.f2er.com/oracle/212535.html