web-dev-qa-db-fra.com

Comment sélectionner dans Oracle en utilisant un DBLINK situé dans un schéma différent?

Nous avons un SGBD Oracle (11g) et la configuration suivante:

  • Un utilisateur de base de données "MYUSER"
  • Deux schémas "MYUSER" et "SCHEMA_B"
  • L'utilisateur "MYUSER" peut accéder à "SCHEMA_B" et dispose d'autorisations de lecture sur ses tables
  • Un lien DB public "DB_LINK" situé dans "SCHEMA_B"
  • DB_LINK fonctionne lors de l'utilisation directe de l'utilisateur de base de données "SCHEMA_B"

Question: Lorsque vous êtes connecté en tant que "MYUSER", quelle est la syntaxe correcte pour accéder aux tables en utilisant le lien DB de "SCHEMA_B"? Est-il possible de le faire du tout?

J'ai déjà essayé plusieurs constellations, qui n'ont pas toutes fonctionné:

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

Le message d'erreur que je reçois est: ORA-02019. 00000 - "description de connexion pour la base de données distante introuvable"

Merci pour toute suggestion!

12
Steffen

Je ne pense pas qu'il soit possible de partager un lien de base de données entre plusieurs utilisateurs mais pas tous. Ils sont privés (pour un seul utilisateur) ou publics (pour tous les utilisateurs).

Une bonne solution consiste à créer une vue dans SCHEMA_B qui expose la table à laquelle vous souhaitez accéder via le lien de base de données. Cela vous donnera également un bon contrôle sur qui est autorisé à sélectionner dans le lien de la base de données, car vous pouvez contrôler l'accès à la vue.

Fait comme ça:

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