在多个Oracle服务器和聚合结果上运行相同sql查询的工具

时间:2017-02-05 18:34:07

标签: sql database oracle multi-tenant

我正在寻找一个数据库客户端工具,它允许我在许多服务器上的多个相同数据库上运行相同的查询。

我们有100多台服务器,每台服务器都有一些自定义数据需要从多个服务器中的相同表(分片)中提取和聚合。

我希望能够像这样运行

select COL1,COL2 from MY_TABLE  

此查询将返回一行或多行。所有这些都需要汇总在一个表格中。

任何独立或基于Web或开源或许可的工具请建议。

2 个答案:

答案 0 :(得分:1)

您可以使用Oracle数据库并创建指向服务器上数据库的数据库链接。每个数据库需要一个数据库链接。然后,您可以运行以下查询。

select COL1,COL2 
  from MY_TABLE@db1
union all
select COL1,COL2 
  from MY_TABLE@db2
union all
select COL1,COL2 
  from MY_TABLE@db3
union all
select COL1,COL2 
  from MY_TABLE@db4

必须在服务器上创建此数据库,才能访问其他数据库,它可以是任意数据库,例如, Oracle数据库快捷版。 Express Edition不需要任何费用。

另一个可能性是使用MS Access数据库 - 对于远程数据库中的表,您可以在Access数据库中创建连接到远程表的表。我有时会使用这种方法,但此刻我不记得更多细节了。

我更喜欢Oracle解决方案。您可以创建包含上述选择的视图。您可以使用Oracle SQL查询视图。

答案 1 :(得分:1)

我的开源程序Method5是为这样的任务而构建的。

该程序在Oracle服务器上运行,可以被任何SQL客户端调用,如下所示:

select * from table(m5('select COL1,COL2 from MY_TABLE'));

它返回请求的列以及名为DATABASE_NAME的其他列。它并行收集数据,处理异常,并将数据存储在表中。

有一个可选的第二个参数,可让您指定目标列表。默认情况下,Method5查询所有已配置的数据库,但您可以限制结果,如下所示:

select * from table(m5('select COL1,COL2 from MY_TABLE', 'dev,test,acme%,db1234'));

还有一个程序M5_PROC,它可以让您更好地控制存储结果的表以及是否异步运行。在实践中,你  可能会发现可靠地查询数百个数据库非常棘手。由于您无法控制的原因,少数数据库不可用并不罕见。这可能很困难,但Method5使您能够处理这些情况。

在某些方面,Method5是@miracle173答案的打包版本。如果您只需要一次性查询,那么最好采用他的解决方案。但是如果你需要一些更健壮的东西,它会被频繁调用,并且需要处理你抛出的任何代码,那么安装和配置Method5是值得的。如果您需要任何安装或配置帮助,可以直接与我联系。