问题 如何使用位于不同模式的DBLINK在Oracle中进行选择?


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

  • 数据库用户“MYUSER”
  • 两个模式“MYUSER”和“SCHEMA_B”
  • 用户“MYUSER”可以访问“SCHEMA_B”并对其表具有READ权限
  • 位于“SCHEMA_B”中的公共数据库链接“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 - “找不到远程数据库的连接描述”

谢谢你的任何建议!


5353
2017-09-27 14:57


起源



答案:


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

解决此问题的一个好方法是在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;

12
2017-09-27 15:28



要与所有用户共享数据库链接,请使用“PUBLIC”指令。创建公共数据库链接... - Rusty1


答案:


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

解决此问题的一个好方法是在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;

12
2017-09-27 15:28



要与所有用户共享数据库链接,请使用“PUBLIC”指令。创建公共数据库链接... - Rusty1