加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle RAC 11g 通过SCAN连接遇到ORA-12170错误的解决办法

发布时间:2020-12-12 18:50:53 所属栏目:百科 来源:网络整理
导读:最近使用VirtualBox搭建了RAC测试环境,一共创建了4个虚拟机,如下: vm1: RouterOS,路由系统,虚拟机访问外网的网关,同时支持不同内网中的虚拟机互访 网卡1,桥接网卡,连接宿主机网卡,192.168.31.88/24 网卡2,内部网络,连接LAN01,用于RAC Public网络,172.1

最近使用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

添加后再次连接成功。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读