如何在Oracle中使用位于不同模式中的DBLINK进行SELECT?

baubqpgj  于 2023-05-16  发布在  Oracle
关注(0)|答案(3)|浏览(148)

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

  • DB用户“MYUSER”
  • 两个模式“MYUSER”和“SCHEMA_B”
  • 用户“MYUSER”可以访问“SCHEMA_B”,并对其表具有READ权限
  • 位于“SCHEMA_B”中的公共DB链接“DB_LINK”
  • 当直接使用DB用户“SCHEMA_B”时,DB_LINK正在工作
    问题:当以“MYUSER”登录时,使用“SCHEMA_B”的DB链接访问表的正确语法是什么?有可能这样做吗?

我已经尝试了几个星座,这一切都没有工作:

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 -“未找到远程数据库的连接描述”
感谢您的任何建议!

5gfr0r5j

5gfr0r5j1#

我不认为在多个用户之间共享数据库链接是可能的,但不是所有用户。它们可以是私有的(仅针对一个用户)或公共的(针对所有用户)。
一个很好的解决方法是在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;
jdg4fx2g

jdg4fx2g2#

我遇到了同样的问题,我使用了上面提供的解决方案-我放弃了同义词,创建了一个与同义词同名的视图。它有一个选择使用dblink,并给予GRANT SELECT到其他模式它工作得很好。

ykejflvf

ykejflvf3#

您也可以在SCHEMA B中创建一个指向dblink query的视图。当然,你需要一些特权,但它可以解决你的问题。查看下面的视图脚本:

create view SCHEMA_B.mytable_view as select * from mytable@db_link;
GRANT SELECT ON SCHEMA_B.mytable_view to MYUSER;

现在您可以从SCHEMA_B.mytable_view中选择数据。

相关问题