我不是DB,甚至不是Oracle专家,但我想了解Oracle何时以及为什么向客户端返回不同的非VIP地址,假设这是正确的行为?
LISTENER_DB-A =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = DB-A-VIP)(PORT = 1521)(IP = FIRST))
# this is the VIP 10.0.0.15
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.10)(PORT = 1521)(IP = FIRST))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)这里,在连接到IP地址10.0.0.15之后,Oracle服务器将10.0.0.10地址返回给客户端。这是我的网络嗅到的上述行为:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.15)(PORT=1521)))
(CONNECT_DATA=(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))(SERVER=DEDICATED)
(SERVICE_NAME=my_db)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=5)(DELAY=5))))(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=DB-A))(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.10)(PORT=1521)))我知道这种行为并不是强制性的,因为我看到Oracle服务器响应时没有提到重定向。服务器采取这种方式的原因是什么?提前感谢!
发布于 2015-02-04 12:28:11
当涉及到11 gR2和扫描侦听器时,它就更加复杂了。但是,假设背后的原因是负载平衡。侦听器将将客户端重定向到加载最少的节点。
另一个原因也可能是工作负载平衡。假设我们的集群上有两个服务(SERVICE_NAME)。其中一种称为加载器,由将数据推入数据库的进程使用。另一个是WEB,被应用程序使用,从数据库中获取数据。每个服务位于不同的节点上。然后,这个重定向将保证数据库被有效地使用,并且所有加载器都使用同一个集群节点,即使其中一个节点失败了。
顺便说一句:我认为重定向消息不包含IP地址,而是包含主机名。因此,DB客户端和DB服务器之间不应该存在任何NAT,而且它们也应该使用相同的DNS服务器。
https://dba.stackexchange.com/questions/91047
复制相似问题