Oracle的dblink簡單使用心得,TNS:Connect timeout occurred
情景:不同伺服器之間的資料庫中的資料需要通訊(想用觸發器)。然後就考慮新建dblink來完成這個需求
類似的這種方式在MySQL中是用FEDERATED引擎,而oracle中是dblink。
##########################################################################################
create public database link 自定義的連線名字 connect to 連線遠端伺服器的使用者 identified by 連線遠端伺服器的密碼 using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 目標伺服器的ip)(PORT = 目標伺服器的埠)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = 目標伺服器的服務名) ) )';
windows上的oracle服務名可以去服務裡看。oracleservicexxx xxx就是服務名
或者用這個 select name,value from v$parameter where name='service_names'
也能查出來服務名
-----------------------------------------
然後我遇到的最噁心的問題就是測試的時候 報這個錯:TNS:Connect timeout occurred
連線超時 ,然後我一直測啊測,防火牆啥的都關了,ping 目標ip,telnet 目標ip 埠 也都通
後來發現時網路質量問題,賊噁心。
測試方法
select * from 遠端伺服器的表@你建的連線名字
能查出結果就是沒問題。
上邊建立的時候
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 目標伺服器的ip)(PORT = 目標伺服器的埠))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 目標伺服器的服務名)
)
)
這個東西,可以在using後邊直接寫,也可以在配置檔案裡邊寫。。就是在tnsnames.ora檔案中配置的目標資料庫的連線資訊,就是定義一個這樣的:
aaa= (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 目標伺服器的ip)(PORT = 目標伺服器的埠))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 目標伺服器的服務名)
)
)
這樣的話,建立的時候using後邊直接寫aaa就好了。