在我们的一个局域网中.有三个数据库 mobile_test,mobile_exp,mobile
其中三个的连接字串如下:mobile_test=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.9.18.17)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = mobile_test)
    )
  )mobile_exp =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.21.16.52)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = bar1)
      (SERVER = DEDICATED)
    )
  )mobile =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.5.27.41)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = mobile)
      (SERVER = DEDICATED)
    )
  )
现在的问题是:我通过建立dblink使这三个数据库能相互访问.本来按道理是三个数据彼此间都能相互访问,但是事实却不是。
            mobile_test 与 mobile_exp 可以相互访问; 
            mobile_test 可以访问 mobile ,但mobile 不能访问 mobile_test ;
            mobile_exp 可以访问 mobile ,但mobile 不能访问 mobile_exp ;            在mobile下访问mobile_exp语句如下:select * from dual@mobile_exp ;
           错误:  TNS: protocol adapter error 
        而且,我这里在 mobile_test 下建立 访问 mobile_exp 的dblink 
        与 mobile 下建立 访问 mobile_exp 的dblink 是一样的,是复制过去的。
create database link mobile_exp
  connect to mobile_dba identified by mobile_dba
  using '(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.21.16.52)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = bar1)
      (SERVER = DEDICATED)
    )
  )';  这三个数据库理论上没有什么区别,唯一的是 mobile数据库下有多个oracle_sid   . 上述问题百思不得其解,请各位高手指点,不甚感激!!!!!!!!!

解决方案 »

  1.   

    1,先排除网络问题,确认三台主机都能彼此互相访问 
    2,把mobile_test= 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.9.18.17)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SERVICE_NAME = mobile_test) 
        ) 
      ) mobile_exp = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.21.16.52)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SID = bar1) 
          (SERVER = DEDICATED) 
        ) 
      ) mobile = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = 10.5.27.41)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SID = mobile) 
          (SERVER = DEDICATED) 
        ) 
      ) 
    分别放在三台主机相应的tnsnames.ora中
    3,请确认三台主机sqlnet.ora的认证方式是否有tns
      

  2.   

    对于第1点我认同,网络完全没有问题.第二点,我很不解,为什么一定要放在tnsnames.ora里面去。不放进去,可以吗?第三点,怎么确认主机sqlnet.ora的认证方式是否有tns
    请楼上的补充。
      

  3.   


    复制tnsnames.ora的目的是为了采用
    create database link mobile_exp 
      connect to mobile_dba identified by mobile_dba 
      using 'mobile_test'; 的方式建立dblink在三台主机上tnsping下个mobile_test,mobile,mobile_exp
    确认sqlnet.ora是否为一下内容NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
      

  4.   

    ORA-12560: TNS: protocol adapter error 
     
    Cause: A generic protocol adapter error occurred. Action: Check addresses used for proper protocol specification. Before reporting this error, look at the error stack and check for lower level transport errors. For further details, turn on tracing and reexecute the operation. Turn off tracing when the operation is complete. 建议你查查mobile机器上的数据库日志,看看其中是否有报ORA-12560,如果有,日志中那么还会告诉你生成了相应的trace文件,再查那个trace文件。
      

  5.   

    还是用tnsnames.ora吧,起码你能用tnsping看看连接是否正确