【问题标题】:How to SELECT in Oracle using a DBLINK located in a different schema?如何使用位于不同模式中的 DBLINK 在 Oracle 中选择?
【发布时间】:2012-09-19 09:51:32
【问题描述】:

我们有一个 Oracle DBMS (11g) 和以下配置:

  • 数据库用户“MYUSER”
  • 两个架构“MYUSER”和“SCHEMA_B”
  • 用户“MYUSER”可以访问“SCHEMA_B”并对其表具有读取权限
  • 位于“SCHEMA_B”中的公共数据库链接“DB_LINK”
  • 直接使用 DB 用户“SCHEMA_B”时,DB_LINK 工作正常

问题:以“MYUSER”身份登录时,使用“SCHEMA_B”的数据库链接访问表的正确语法是什么?有可能这样做吗?

我已经试过好几个星座了,都不行:

select * from dual@"DB_LINK"
select * from dual@"SCHEMA_B"."DB_LINK"
select * from dual@SCHEMA_B."DB_LINK"
select * from dual@SCHEMA_B.DB_LINK
select * from SCHEMA_B.dual@DB_LINK
select * from "SCHEMA_B".dual@DB_LINK

我收到的错误信息是: ORA-02019。 00000 - “未找到远程数据库的连接描述”

感谢您的任何建议!

【问题讨论】:

    标签: database oracle database-schema dblink


    【解决方案1】:

    我认为不可能在多个用户之间共享数据库链接,但不是所有用户。它们要么是私有的(仅适用于一个用户),要么是公共的(适用于所有用户)。

    解决此问题的一个好方法是在 SCHEMA_B 中创建一个视图,该视图公开您要通过数据库链接访问的表。这也可以让您很好地控制允许从数据库链接中选择的人员,因为您可以控制对视图的访问。

    这样做:

    create database link db_link... as before;
    create view mytable_view as select * from mytable@db_link;
    grant select on mytable_view to myuser;
    

    【讨论】:

    • 要与所有用户共享数据库链接,请使用“PUBLIC”指令。创建公共数据库链接 ...
    【解决方案2】:

    我遇到了同样的问题 我使用了上面提供的解决方案 - 我删除了同义词,创建了一个与同义词同名的视图。 它有一个使用 dblink 的选择, 并将 GRANT SELECT 给另一个模式 效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      相关资源
      最近更新 更多