Как выбрать в Oracle, используя DBLINK, расположенную в другой схеме?

Имеем СУБД Oracle (11g) и следующую конфигурацию:

  • Пользователь БД "MYUSER"
  • Две схемы "MYUSER" и "SCHEMA_B"
  • Пользователь "MYUSER" может получить доступ к "SCHEMA_B" и имеет права ЧТЕНИЯ для своих таблиц.
  • Общедоступная ссылка на БД "DB_LINK", расположенная в "SCHEMA_B"
  • DB_LINK работает при непосредственном использовании пользователя БД "SCHEMA_B"

Вопрос: при входе в систему как "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 - "описание подключения к удаленной базе данных не найдено"

Спасибо за любое предложение!


person Steffen    schedule 27.09.2012    source источник


Ответы (2)


Я не думаю, что можно поделиться ссылкой на базу данных между несколькими пользователями, но не всеми. Они либо частные (только для одного пользователя), либо общедоступные (для всех пользователей).

Хороший способ обойти это — создать представление в 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;
person GTG    schedule 27.09.2012
comment
Чтобы поделиться ссылкой на базу данных со всеми пользователями, используйте директиву PUBLIC. СОЗДАТЬ ССЫЛКУ НА ОБЩЕСТВЕННУЮ БАЗУ ДАННЫХ... - person Rusty1; 14.05.2015

У меня была та же проблема, я использовал решение, предложенное выше, - я удалил СИНОНИМ, создал ВИД с тем же именем, что и синоним. у него был выбор с использованием dblink, и он дал GRANT SELECT другой схеме. Он отлично работал.

person user14570900    schedule 23.12.2020