本機資料庫資料庫鏈無法訪問遠端資料庫

yangtingkun發表於2012-10-30

在筆記本的本地資料庫中建立資料庫鏈,訪問遠端資料庫,出現ORA-12170訪問超時錯誤。

[@more@]

由於訪問超時,首先檢查網路,確認遠端伺服器是可以訪問的:

C:Userslenovo>ping 192.168.0.56

正在 Ping 192.168.0.56 具有 32 位元組的資料:
來自 192.168.0.56 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.0.56 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.0.56 的回覆: 位元組=32 時間<1ms TTL=64
來自 192.168.0.56 的回覆: 位元組=32 時間<1ms TTL=64

192.168.0.56 Ping 統計資訊:
資料包: 已傳送 = 4,已接收 = 4,丟失 = 0 (0% 丟失)
往返行程的估計時間(以毫秒為單位):
最短 = 0ms,最長 = 0ms,平均 = 0ms

顯然遠端節點是可以訪問的,嘗試透過tnsping進行測試:

C:Userslenovo>tnsping 192.168.0.56/enmo10

TNS Ping Utility for 32-bit Windows: Version 10.2.0.5.0 - Production on 24-10 -
2012 15:39:59

Copyright (c) 1997, 2010, Oracle. All rights reserved.

已使用的引數檔案:
d:oracleproduct10.2.0networkadminsqlnet.ora

已使用 HOSTNAME 介面卡來解析別名
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=enmo10))(ADDRESS=
(PROTOCOL=TCP)(HOST=192.168.0.56)(PORT=1521)))
OK (20
毫秒)

同樣tnsping連線測試正常。登入目標資料庫伺服器,檢查監聽狀態同樣正常。

這說明遠端資料庫是可以訪問的,看來問題多半出在本地設定上。透過本地SQLPLUS客戶端直接連線遠端資料庫,同樣無法連線:

SQL> conn test/test@192.168.0.56/enmo10
ERROR:
ORA-12170: TNS:
連線超時

警告: 您不再連線到 ORACLE

看來可能是本地防火牆導致了網路連線被阻止。找到防火牆設定介面,將sqlplus工具新增到允許程式訪問列表中,透過sqlplus連線遠端資料庫成功,但是透過dblink訪問問題依舊:

SQL> conn test/test@192.168.0.56/enmo10
已連線。
SQL> conn test/test
已連線。
SQL> create database link enmo10 connect to test identified by test using '192.168.0.56/enmo10';

資料庫連結已建立。

SQL> select * from tab@enmo10;
select * from tab@enmo10
*
1 行出現錯誤:
ORA-12170: TNS:
連線超時

表面上看似乎是一個很詭異的問題,其實如果瞭解資料庫鏈的工作原理就很清楚,在透過資料庫鏈訪問遠端資料庫時,訪問遠端站點的程式並不是sqlplus而是本地的oracle.exe程式。

oracle新增到防火牆的允許訪問列表中,問題解決:

SQL> select * from tab@enmo10;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
T_CHAR TABLE
T TABLE

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-1060617/,如需轉載,請註明出處,否則將追究法律責任。

相關文章