1. 程式人生 > >Oracle的dblink簡單使用心得,TNS:Connect timeout occurred

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就好了。