一个很奇怪的dblink 问题,高手请进.

wdslhr 2008-04-28 05:08:32
在我们的一个局域网中.有三个数据库 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 .



上述问题百思不得其解,请各位高手指点,不甚感激!!!!!!!!!
...全文
245 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
AFIC 2008-04-30
  • 打赏
  • 举报
回复
还是用tnsnames.ora吧,起码你能用tnsping看看连接是否正确
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
没遇到过这种情况.
gxhsnowflower 2008-04-30
  • 打赏
  • 举报
回复
楼主成功的话共享一下:解决的方法,谢谢!
zhu_gx 2008-04-29
  • 打赏
  • 举报
回复
帮你顶上去
zhu_gx 2008-04-29
  • 打赏
  • 举报
回复
顶你
bobfang 2008-04-29
  • 打赏
  • 举报
回复
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文件。
fjmingyang 2008-04-29
  • 打赏
  • 举报
回复

复制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)

我是风 2008-04-29
  • 打赏
  • 举报
回复
oracle_dba_11 2008-04-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wdslhr 的回复:]
对于第1点我认同,网络完全没有问题.

第二点,我很不解,为什么一定要放在tnsnames.ora里面去。不放进去,可以吗?

第三点,怎么确认主机sqlnet.ora的认证方式是否有tns


请楼上的补充。
[/Quote]

等待
wdslhr 2008-04-28
  • 打赏
  • 举报
回复
对于第1点我认同,网络完全没有问题.

第二点,我很不解,为什么一定要放在tnsnames.ora里面去。不放进去,可以吗?

第三点,怎么确认主机sqlnet.ora的认证方式是否有tns


请楼上的补充。
fjmingyang 2008-04-28
  • 打赏
  • 举报
回复
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

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧