查询来自不同模式的两个表

Gur*_*uru 10 database oracle

我在Oracle中有两个不同的模式(比如S1,S2)和这些模式中的两个表(比如S1.Table1,S2.Table2).我想从模式S1查询这两个表.

S1和S2都在不同的数据库中.从DB1 - Schema S1,我想做这样的事情,

select T1.Id
  from S1.Table1 T1
     , S2.Table2 T2 
 Where T1.Id = T2.refId
Run Code Online (Sandbox Code Playgroud)

我知道这样做的一种方法是为第二个模式创建一个DB Link并在查询中使用它.遗憾的是,我没有创建数据库链接所需的权限.有没有DB链接可以做到这一点?例如,在TOAD中,您可以比较两个模式对象.但同样,两个模式对象,它是一般比较.

任何想法,建议都非常感谢.提前致谢.

Vin*_*rat 16

如果两个模式位于同一数据库中,则不需要数据库链接.

您的查询应该从模式S1工作,前提是S1已被授予S2.table2的SELECT权限(来自dba帐户或来自S2模式:) GRANT SELECT ON S2.Table2 TO S1.


Jim*_*son 8

DB Links几乎就是这里游戏的名称.如果您无法自己创建,请检查是否有可以使用的公共数据库链接.

您的DBA也可能愿意使用其中一个DB链接在S1实例上创建S2.Table2的物化视图.

另一种选择可能是Web服务,但我猜你会遇到比使用简单数据库链接更多的管理问题.只有在没有链接的充分理由时才考虑这些(例如:两个不想在其数据库之间打开防火墙漏洞的独立组织).

如果失败了,你就会进入一个非常丑陋的领域,但你可能会有所作为.例如:

  • 从一个可以同时从多个连接读取的工具打开并在那里进行连接.访问.蟾蜍用于数据分析,无论如何.
  • 使用像Toad这样的工具将S2.Table2复制到您自己的架构("在另一个架构中创建",然后"将数据复制到另一个架构")
  • 如果您拥有或者可以获得在两个服务器上定义的互补目录对象,则在目录中创建S2的物化视图作为外部表,该目录可以从S2写入并从S1读取.

但是,你真的不希望长期维持这些解决方案.