网络共享上的应用程序连接失败

网络共享上的应用程序连接失败

编辑: 我进行了更多测试...如果我将 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 数据包退出客户端)。

我禁用了数据库服务器、文件服务器和客户端上的防火墙,但无济于事。所有映射的网络驱动器(DFS 和标准文件服务器)都已放入内联网区域。

如果我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 无关?

答案1

正如您所想,这是独立服务器上的主机名解析问题。

独立服务器上dbserver使用名称的 TNS 别名似乎与 tnsping 工作的服务器上192.168.0.231使用 IP 的 TNS 别名不同。

您可以修改tnsnames.ora独立服务器上的文件以使用 IP 192.168.0.231,或向文件添加条目hosts以解析名称 dbserver

相关内容