如何通过DBLINK调用DBLINK上的SELECT?

WBA*_*BAR 1 sql oracle oracle11g

在Oracle 11G中,我可以轻松调用:

SELECT * FROM TABLE@DB_LINK_NAME;
Run Code Online (Sandbox Code Playgroud)

但是如何调用SELECT另一个DB_LINK上的DB_LINK?

像这样的东西:

SELECT * FROM TABLE@REMOTE_DB_LINK_NAME@DB_LINK_NAME;
Run Code Online (Sandbox Code Playgroud)

Jus*_*ave 7

首先,在架构上,我对任何涉及在多个数据库链接上提取数据的设计都非常谨慎.我已经看到,当最终源是Oracle的一些古老版本时,目标数据库无法直接连接,因此使用了运行中间版Oracle的中间数据库.但这在实践中非常罕见.

从性能角度来看,这种方法存在严重问题.当然,问题是数据将通过网络发送两次.但更令人担忧的是,您正在解决一个难题,优化分布式SQL语句,并使其几乎难以处理.您基本上必须要么保证永远不会在同一个查询中查询本地数据和远程数据,要么如果Oracle决定使用愚蠢的查询计划,您将不得不忍受所产生的性能,因为剩下的工具集允许您优化这种查询是最小的.

话虽这么说,中间数据库需要有同义词或视图来抽象出数据库链接.所以

在A:

  • 创建到B的数据库链接

在B:

  • 创建到C的数据库链接
  • 创建同义词tabletable@C

在A上,你可以

SELECT *
  FROM table@B
Run Code Online (Sandbox Code Playgroud)