如何列出可通过数据库链接访问的表?

How to list tables from accessible via database links?

我可以访问数据库,并且确保我可以通过以下方式访问所有 tables/columns:

select * from ALL_TAB_COLUMNS

我还可以使用“@”访问某些 table,据我了解数据库 link 机制,如下所示:

select * from aaa.bbb_ddd@ffgh where jj = 55688

其中 aaa.bbb_ddd@ffgh 对应于某些 table 列 jj

但是我在 ALL_TAB_COLUMNS.

中没有看到这个 aaa.bbb_ddd@ffgh table

我如何通过这些数据库 link(左右)请求我可以访问的所有 table(以及其中的列)?

您无法轻松地通过所有数据库 link 访问所有列;您可以通过在远程数据库

上查询ALL_TAB_COLUMNS 来获取可通过一个数据库link 访问的所有列
select * from all_tab_columns@<remote_server>

在您的示例中,<remote_server>ffgh

如果您想在当前模式中为 所有 数据库 link 获取相同的信息,您要么必须手动枚举它们,然后 UNION 结果一起:

select * from all_tab_columns@dblink1
 union all
select * from all_tab_columns@dblink2

或者,动态地做一些事情。

,加上数据来自哪个数据库就更清楚了;您可以通过在查询中写入它来做到这一点:

select 'dblink1' as dblink, a.* from all_tab_columns@dblink1 a
 union all
select 'dblink2', a.* from all_tab_columns@dblink2 a

或者通过使用内置的 Oracle 来工作,例如 GLOBAL_NAME table(还有很多方法):

select db1g.global_name, db1a.*
  from all_tab_columns@dblink1 db1a
 cross join global_name@dblink1 db1g
 union all
select db2g.global_name, db2a.*
  from all_tab_columns@dblink2 db2a
 cross join global_name@dblink2 db2g