Windows

從網路共享上的應用程序連接失敗

  • July 23, 2015

編輯: 我測試了更多……如果我將 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

引用自:https://serverfault.com/questions/707878