在我们的一个局域网中.有三个数据库 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 . 上述问题百思不得其解,请各位高手指点,不甚感激!!!!!!!!!
其中三个的连接字串如下: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 . 上述问题百思不得其解,请各位高手指点,不甚感激!!!!!!!!!
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
请楼上的补充。
复制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)
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文件。