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

时间:2015-03-26 17:48:42

标签: select oracle11g database-link

我可以访问数据库,并确保只需使用即可访问所有表/列:

select * from ALL_TAB_COLUMNS

我也可以使用" @"来访问一些表,因为我理解数据库链接机制,如下所示:

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

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

的表

但我在aaa.bbb_ddd@ffgh中没有看到此ALL_TAB_COLUMNS表。

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

1 个答案:

答案 0 :(得分:1)

您不能轻易地通过所有数据库链接访问所有列;通过查询远程数据库上的ALL_TAB_COLUMNS,可以通过一个数据库链接访问所有列

select * from all_tab_columns@<remote_server>

您示例中的<remote_server>ffgh

如果要为当前架构中的所有数据库链接获取相同的信息,则必须手动枚举它们并将结果联合起来:

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

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

As Justin says,如果添加数据来自哪个数据库,则更清楚;你可以通过在查询中写下它来做到这一点:

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表(还有更多方法):

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