编辑: 我测试了更多......如果我将 nslookup 从 Windows 目录复制到我的映射网络驱动器,它不能'解析主机名:
H:\nslookup dbserver
(null) UnKnown
Address: 192.168.0.195
如果我使用 C:: 中的默认 nslookup
C:\>nslookup dbserver
Server: dnsserver.dom.local
Address: 192.168.0.195
Name: dbserver.dom.local
Address: 192.168.0.231
所以它与oracle没有任何关系,我将更改标题和标签。
我的同事创建了使用已安装的 Oracle 客户端连接到远程 Oracle 数据库的应用程序。从 DFS 上的映射驱动器(在两台服务器上)运行这些应用程序会导致连接成功。从另一台服务器(独立文件服务器)上的映射驱动器运行它们会导致没有任何连接。我通过 Wireshark 对其进行了跟踪,并观察到甚至没有尝试建立连接(根本没有 oracle 数据包正在退出客户端)。
我在数据库服务器、filserver 和客户端上禁用了防火墙,但无济于事。所有映射的网络驱动器(DFS 和标准文件服务器)都已放入 Intranet 区域。
如果我tnsping
从本地 Oracle 客户端安装中使用,我可以解析主机:
OK (20 ms)
如果我使用tnsping
放置在文件服务器上的映射网络驱动器中,我不能:
TNS-12545: Connect failed because target host or object does not exist
到相同的 Oracle-DB。
我在这里不知所措,请参阅下面的失败尝试日志摘录:
nfun2awanm: Getting the path of sqlnet.ora
nnfun2awanm: Getting the adapter name
nnfun2awanm: exit
nsmal: 216 bytes at 0x75e228
nscall: connecting...
snlinGetAddrInfo: entry
snlinGetAddrInfo: getaddrinfo() failed with error 11003
snlinGetAddrInfo: exit
nlad_expand_hst: GetAddrInfo call failed
nladini: entry
nladini: exit
nladget: entry
nladget: exit
nsmal: 89 bytes at 0x7b2c48
nsc2addr: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SID=instance)))
nttbnd2addr: entry
snlinGetAddrInfo: entry
snlinGetAddrInfo: getaddrinfo() failed with error 11001
snlinGetAddrInfo: exit
nttbnd2addr: looking up IP addr for host: dbserver
snlinGetAddrInfo: entry
snlinGetAddrInfo: getaddrinfo() failed with error 11003
snlinGetAddrInfo: exit
nttbnd2addr: *** hostname lookup failure! ***
nttbnd2addr: exit
nserror: nsres: id=0, op=77, ns=12545, ns2=12560; nt[0]=515, nt[1]=1003, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
nsmfr: 89 bytes at 0x7b2c48
nscall: connecting...
nladget: entry
nladget: exit
与成功的 tnsping 相比:
nnfun2awanm: Getting the path of sqlnet.ora
nnfun2awanm: Getting the adapter name
nnfun2awanm: exit
nsmal: 216 bytes at 0x31426e8
nscall: connecting...
snlinGetAddrInfo: entry
snlinGetAddrInfo: exit
snlinGetNameInfo: entry
snlinGetNameInfo: exit
snlinFreeAddrInfo: entry
snlinFreeAddrInfo: exit
nladini: entry
nladini: exit
nladget: entry
nladget: exit
nsmal: 95 bytes at 0x30f3158
nsc2addr: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.231)(PORT=1521))(CONNECT_DATA=(SID=instance)))
nttbnd2addr: entry
snlinGetAddrInfo: entry
snlinGetAddrInfo: exit
nttbnd2addr: using host IP address: 192.168.0.231
snlinFreeAddrInfo: entry
snlinFreeAddrInfo: exit
nttbnd2addr: exit
nsmal: 996 bytes at 0x3142bc8
nsmal: 2120 bytes at 0x3142fb8
nsmal: 84 bytes at 0x3143948
nsopen: opening transport...
nttcon: entry
nttcon: toc = 1
nttcnp: entry
nttcnp: exit
nttcni: entry
nttcni: Tcp conn timeout = 60000 (ms)
nttctl: entry
nttctl: Setting connection into non-blocking mode
nttcni: trying to connect to socket 564.
ntt2err: entry
ntt2err: exit
ntctst: size of NTTEST list is 1 - not calling poll
nttctl: entry
nttctl: Clearing non-blocking mode
snlinGetNameInfo: entry
snlinGetNameInfo: exit
nttcni: connected on ipaddr 192.168.0.99
nttcni: exit
nttcon: set TCP_NODELAY on 564
nttcon: exit
nsopen: transport is open
通过将这些结果粘贴到 serverfault 中,我才意识到成功的尝试可以通过 DNS 解析主机名,而失败的则不能。所以它似乎甚至与 Oracle 无关?
如您所想,这是独立服务器上的主机名解析问题。
使用名称的独立服务器上的 TNS 别名
dbserver
似乎与使用 tnsping 工作的服务器上192.168.0.231
使用 IP 的别名不同。您可以修改
tnsnames.ora
独立服务器上的文件以使用 IP192.168.0.231
或在文件中添加条目以hosts
解析名称 dbserver