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 = 目标服务器的服务名)
    )
  )';

// 如:
create public database link my_dblink connect to test1234 identified by pw123456
using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.2.5.201)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = test789)
    )
  )';

windows上的oracle服务名可以去服务里看。oracleservicexxx  xxx就是服务名

或者用这个 select name,value from v$parameter where name='service_names'

也能查出来服务名

Oracle的dblink简单使用心得,TNS:Connect timeout occurred_第1张图片

-----------------------------------------

然后我遇到的最恶心的问题就是测试的时候  报这个错: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就好了。

 

你可能感兴趣的:(Oracle的dblink简单使用心得,TNS:Connect timeout occurred)