Créer des tables fédérées à l'aide de liens hypertexte de table en définissant la portée

Vous pouvez créer une table fédérée via un lien hypertexte de table de base de données Autonomous AI. Une table fédérée est une table externe définie dans les liens hypertexte de table. Il permet l'agrégation de données à partir de plusieurs instances de bases de données d'IA autonomes.

Bien qu'une table fédérée utilise le même mécanisme de lien hypertexte qu'une table externe, le workflow de création diffère. Pour les tables externes, le fournisseur crée et partage des liens hypertexte de table, et chaque consommateur utilise ces liens hypertexte pour définir des tables externes. Pour les tables fédérées, le consommateur lance la création de la table, et les liens hypertexte de table sont automatiquement créés dans la base de données fournisseur, à condition que le consommateur soit dans la portée définie par le fournisseur.

En tant que fournisseur, vous pouvez définir des portées dans votre base de données pour accorder aux destinataires le privilège de créer automatiquement des liens hypertexte de table. Les destinataires autorisés dans ces portées peuvent créer des tables fédérées et interroger des données à partir de plusieurs bases de données source sans échange de liens manuel.

Les principaux avantages de la définition de portées pour créer des liens hypertexte de table sont les suivants :
  • Partage de données simplifié : les destinataires peuvent désormais lancer la création d'une table externe séparément et créer des liens hypertexte de table lorsqu'ils appartiennent à une portée autorisée.
  • Sécurité améliorée : élimine les méthodes de distribution URL (hyperlien de table) non sécurisées.
  • Fédération de données : les destinataires peuvent agréger les données de plusieurs bases de données de fournisseur via des tables fédérées.

Les sections suivantes décrivent le workflow détaillé sur la façon dont les bases de données autonomes fournisseur et consommateur créent des tables fédérées en définissant des portées dans un exemple de cas d'utilisation pratique. Ce flux de travail et les exemples de code associés peuvent être modifiés et implémentés en fonction de vos besoins.

Workflow de création de tables fédérées

Le workflow suivant a des responsabilités distinctes pour la base de données Autonomous AI du fournisseur et la base de données Autonomous AI du consommateur.

Du côté du fournisseur, la première étape consiste à définir une portée de création qui spécifie les bases de données Autonomous AI consommateur autorisées à créer des liens hypertexte de table à distance dans le fournisseur. La portée peut être définie au niveau du schéma ou de l'objet.

Ensuite, le DBA du fournisseur contrôle qui peut gérer les portées en appelant DBMS_DATA_ACCESS_ADMIN.GRANT_REGISTER pour les utilisateurs sélectionnés. Ces utilisateurs privilégiés peuvent utiliser DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE, UPDATE_CREATION_SCOPE et UNREGISTER_CREATION_SCOPE pour enregistrer, modifier ou enlever des portées pour des tables ou des schémas spécifiques, et LIST_CREATION_SCOPES pour vérifier la configuration en cours. Lorsqu'un destinataire demande ultérieurement un lien hypertexte, le fournisseur vérifie que la base de données Autonomous AI du destinataire demandeur correspond à la portée inscrite avant d'autoriser la génération d'URL, en veillant à ce que seuls les destinataires autorisés puissent créer des liens hypertexte dans les données du fournisseur.

Du point de vue du consommateur, le workflow démarre une fois que le fournisseur a défini des portées incluant la base de données du consommateur. Le DBA du consommateur accorde à des utilisateurs spécifiques le privilège de créer des tables fédérées sur les données du fournisseur en appelant DBMS_DATA_ACCESS_ADMIN.GRANT_READ.

Un destinataire peut ensuite appeler DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE pour créer des liens hypertexte de table dans la base de données du fournisseur pour le compte du destinataire. La table fédérée résultante du destinataire peut ensuite interroger les données du fournisseur comme s'il s'agissait d'une table externe locale.

Lorsque l'accès fédéré n'est plus requis, le destinataire nettoie en appelant DBMS_DATA_ACCESS.DROP_FEDERATED_TABLE, ce qui enlève l'objet de table fédérée dans le destinataire tout en laissant intactes les portées du fournisseur.

Prenons l'exemple d'une entreprise qui utilise des instances Oracle Autonomous AI Database où un fournisseur central Autonomous AI Database détient des données principales partagées, et où les bases de données d'IA autonomes grand public du service ont besoin d'un accès analytique sans duplication des données ni tickets de support. Les analystes métier du service Analytics ont besoin de la création en libre-service de tables externes sur les données des fournisseurs pour exécuter les rapports plus rapidement, tout en maintenant la gouvernance via des portées définies par les fournisseurs. Ils ont mis la dernière main aux exigences suivantes :
  1. Le fournisseur (ADMIN) accorde le privilège d'enregistrement de portée au propriétaire des données à l'aide de la procédure DBMS_DATA_ACCESS_ADMIN.GRANT_REGISTER.
    BEGIN
    DBMS_DATA_ACCESS_ADMIN.GRANT_REGISTER(
    username => 'DATA_OWNER',
    scope => 'MY$COMPARTMENT'
    );
    END;
    /
  2. En tant qu'utilisateur ADMIN, accordez des privilèges d'exécution à l'utilisateur propriétaire des données (DATA_OWNER).
    grant execute on DBMS_DATA_ACCESS_SCOPE to DATA_OWNER;
  3. Le propriétaire des données inscrit la portée de création sur un schéma ou un objet partagé dans la base de données Autonomous AI du fournisseur à l'aide de la procédure DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE. Les bases de données Autonomous AI grand public du même compartiment peuvent ainsi créer des liens hypertexte de table à distance.
    BEGIN
    DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE(
    schema_name => 'DATA_OWNER',
    schema_object_name => 'SALES_DATA',
    scope => 'MY$COMPARTMENT'
    );
    END;
    /
  4. Le destinataire ADMIN accorde le privilège de lecture à l'analyste métier à l'aide de la procédure DBMS_DATA_ACCESS_ADMIN.GRANT_READ.

    Ainsi, l'analyste peut lancer la création de tables fédérées.

  5. Le destinataire ADMIN accorde des privilèges d'exécution à l'utilisateur bi_analyst.
    grant execute on DBMS_DATA_ACCESS to bi_analyst;
  6. L'analyste d'entreprise crée une table externe fédérée dans la base de données d'IA autonome consommateur à l'aide de la procédure DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE. Le lien hypertexte Table est généré automatiquement si la portée correspond à l'absence d'intervention du soignant.

    BEGIN
    DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE(
    table_name => 'DEPT_SALES_XT',
    remote_schema_name => 'SHARED_SCHEMA',
    remote_schema_object_name => 'SALES_DATA',
    db_ocids => '[{"region": "IAD", "db_ocid": "OCID1.AUTONOMOUSDATABASE.OC1.IAD.EXAMPLE123"}]'
    );
    END;
    /
    Remarque

    L'OCID de base de données (db_ocid) doit être en majuscules.
  7. L'analyste interroge la table externe pour les analyses de service :
    SELECT * FROM DEPT_SALES_XT WHERE region = 'West';
Remarque

Les exemples de code ci-dessus peuvent être modifiés et implémentés en fonction de vos besoins.

Pour plus d'informations sur les fonctions et paramètres ci-dessus, reportez-vous aux sections DBMS_DATA_ACCESS_SCOPE Package, DBMS_DATA_ACCESS_ADMIN Package et DBMS_DATA_ACCESS Package.

Le tableau suivant répertorie les opérations impliquées dans le workflow de création de tables fédérées en définissant la portée avec leurs descriptions :
Opération Description Utilisateur qui exécute cette opération
Définir la portée de la création Définit les bases de données autorisées à créer des liens hypertexte de table à distance dans une instance de base de données Autonomous AI de fournisseur. Pour plus d'informations, reportez-vous à Portée de création. Fournisseur
Octroyer l'inscription

Permet aux utilisateurs d'une instance de base de données Autonomous AI de fournisseur d'inscrire ou de mettre à jour la portée.

Pour plus d'informations, reportez-vous à Registre des subventions.

Fournisseur
Portée de création de registre

Définit les objets de base de données pouvant comporter des liens hypertexte de table créés sous une portée d'autorisation spécifiée.

Pour plus d'informations, reportez-vous à Portée de création d'inscription.

Fournisseur
Mettre à jour la portée de création Modifie la portée de création existante. Pour plus d'informations, voir Mettre à jour la portée de création. Fournisseur
Désinscrire la portée de la création Supprime les paramètres de portée de création enregistrés précédemment pour un schéma, un seul objet ou une liste d'objets. Pour plus d'informations, reportez-vous à Désinscription de la portée de création. Fournisseur
Extraire la portée de création Interroge et extrait les portées de création enregistrées pour les schémas ou objets spécifiés. Pour plus d'informations, reportez-vous à Portées de création de liste. Fournisseur
Créer une table fédérée Crée une table fédérée. Pour plus d'informations, reportez-vous à Créer une table fédérée. Destinataire
Octroyer l'accès en lecture Accorde des privilèges de lecture à un utilisateur destinataire pour les schémas ou objets distants, ce qui permet la création de tables fédérées. Pour plus d'informations, reportez-vous à Octroi de la lecture. Destinataire
Révoquer la lecture Révoque un privilège de lecture accordé précédemment pour créer une table fédérée. Pour plus d'informations, reportez-vous à Révoquer la lecture. Destinataire
Supprimer la table fédérée Supprime de la base de données les tables fédérées indiquées. Pour plus d'informations, reportez-vous à Suppression de la table fédérée. Destinataire

Portée de création

Une portée de création dans une base de données de fournisseur détermine les instances de base de données Autonomous AI de consommateur autorisées à créer des liens hypertexte de table à distance dans la base de données de fournisseur.

La portée peut être définie à plusieurs niveaux :
  • Basé sur la location : (MY$TENANCY) base de données de la même location que la base de données du fournisseur.
  • Basé sur le compartiment : (MY$COMPARTMENT) base de données du même compartiment que la base de données du fournisseur.
  • Niveau objet : tables ou vues spécifiques au sein d'un schéma.
  • Niveau du schéma : tous les objets d'un schéma spécifique.

Vous pouvez gérer les portées de création à l'aide du package DBMS_DATA_ACCESS_SCOPE, qui fournit des procédures d'enregistrement, d'annulation d'enregistrement, de mise à jour et d'extraction des portées. Pour plus d'informations, reportez-vous à DBMS_DATA_ACCESS_SCOPE.

Octroyer l'inscription

L'élément ADMIN (ou PDB_DBA) dans la base de données Autonomous AI du fournisseur utilise l'élément DBMS_DATA_ACCESS_ADMIN.GRANT_REGISTER pour décider quels utilisateurs locaux sont autorisés à gérer les portées de création.

Seuls ces utilisateurs privilégiés peuvent enregistrer, mettre à jour ou annuler l'enregistrement des portées, ce qui empêche l'exposition incontrôlée des tables de fournisseurs.

Exemple

BEGIN
DBMS_DATA_ACCESS_ADMIN.GRANT_REGISTER(
username => 'ANALYTICS_ADMIN',
scope => 'MY$COMPARTMENT'
);
END;
/

L'exemple ci-dessus accorde à l'utilisateur ANALYTICS_ADMIN le droit d'enregistrer des ensembles de données dans la portée MY$COMPARTMENT.

Reportez-vous à GRANT_REGISTER pour obtenir une référence de syntaxe.

Portée de création de registre

Un fournisseur appelle DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE pour inscrire la portée autorisée pour des tables spécifiques ou des schémas entiers afin de créer des liens hypertexte de table dans ces objets.

Exemple : enregistrement d'une portée de niveau schéma
BEGIN
DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE(
schema_name => 'ANALYTICS',
schema_object_name => 'NULL',
scope => 'MY$COMPARTMENT'
);
END;
/

Cet exemple inscrit une portée d'accès aux données au niveau du schéma pour le schéma ANALYTICS, en l'associant au compartiment MY$COMPARTMENT.

Exemple : enregistrement d'une portée de niveau objet

BEGIN
DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE(
schema_name => 'ANALYTICS',
schema_object_name => 'SALES_DATA',
scope => 'MY$TENANCY'
);
END;
/

Cet exemple enregistre une portée d'accès aux données plus ciblée pour un objet spécifique SALES_DATA dans le schéma ANALYTICS, en le liant à la location MY$TENANCY. Contrairement à la version de niveau schéma, schema_object_name limite l'application à cette table, ce qui permet un contrôle granulaire des droits de création.

Exemple : enregistrement de plusieurs objets
BEGIN
DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE(
schema_name => 'ANALYTICS',
schema_object_list => '["SALES_DATA", "CUSTOMER_DATA", "PRODUCT_DATA"]',
scope => 'MY$COMPARTMENT'
);
END;
/

Cette procédure associe les objets de schéma répertoriés (SALES_DATA, CUSTOMER_DATA et PRODUCT_DATA) à la portée MY$COMPARTMENT, ce qui limite leur création ou leur accès aux entités de ce compartiment.

Pour plus d'informations sur la syntaxe, reportez-vous à Portée de création d'enregistrement.

Mettre à jour la portée de création

Si un fournisseur doit modifier l'accès, le même utilisateur ou un autre utilisateur autorisé appelle UPDATE_CREATION_SCOPE pour élargir, restreindre ou ajuster les bases de données Autonomous AI consommateur qui peuvent créer des liens hypertexte pour des objets de schéma particuliers.

Exemple
BEGIN
DBMS_DATA_ACCESS_SCOPE.UPDATE_CREATION_SCOPE(
schema_name => 'ANALYTICS',
schema_object_name => 'SALES_DATA',
scope => 'MY$COMPARTMENT'
);
END;
/

Cet exemple met à jour la portée de création de la table SALES_DATA dans le schéma ANALYTICS vers MY$COMPARTMENT.

Pour plus d'informations sur la syntaxe, reportez-vous à Portée de création de mises à jour.

Désinscrire la portée de la création

Lorsqu'un fournisseur veut révoquer entièrement la fonctionnalité de création à distance (pour une table, une liste de tables ou un schéma), il appelle UNREGISTER_CREATION_SCOPE. Cela supprime la portée enregistrée et empêche la création de nouveaux liens hypertexte de table pour ces objets par les bases de données consommateur.

Exemple
BEGIN
DBMS_DATA_ACCESS_SCOPE.UNREGISTER_CREATION_SCOPE(
schema_name => 'ANALYTICS',
schema_object_name => 'SALES_DATA'
);
END;
/

Cet exemple de bloc supprime une étendue de création enregistrée précédemment pour SALES_DATA dans le schéma ANALYTICS, de sorte que les objets créés sous cette étendue ne soient plus régis par l'accès aux données qui contrôle la portée appliquée.

Pour plus d'informations sur la syntaxe, reportez-vous à Annulation de l'enregistrement de la portée de création.

Extraire les portées de création

A tout moment, un utilisateur autorisé peut appeler LIST_CREATION_SCOPES pour extraire les définitions de portée en cours.

Exemple
DECLARE
l_result CLOB;
BEGIN
DBMS_DATA_ACCESS_SCOPE.LIST_CREATION_SCOPES(
schema_name => 'ANALYTICS',
result => l_result
);
DBMS_OUTPUT.PUT_LINE(l_result);
END;
/

Reportez-vous à la section Extraire la portée de création pour obtenir une référence de syntaxe.

Octroyer l'accès en lecture

Dans la base de données Autonomous AI du consommateur, ADMIN (ou PDB_DBA) utilise DBMS_DATA_ACCESS_ADMIN.GRANT_READ pour accorder à des utilisateurs spécifiques le droit de créer des tables fédérées sur des schémas ou des objets de fournisseur distant.

Exemple : Accorder l'accès à un objet distant spécifique

BEGIN
DBMS_DATA_ACCESS_ADMIN.GRANT_READ(
username => 'BI_ANALYST',
remote_schema_name => 'ANALYTICS',
remote_schema_object_name => 'SALES_DATA'
);
END;
/

Cet exemple accorde à l'utilisateur BI_ANALYST un accès en lecture à l'objet SALES_DATA distant spécifique dans le schéma ANALYTICS d'un fournisseur de données externe.

Reportez-vous à Octroi d'une lecture pour obtenir une référence de syntaxe.

Révoquer la lecture

La procédure REVOKE_READ enlève le privilège d'un utilisateur de créer des tables fédérées sur un schéma distant ou un objet de schéma spécifié dans la base de données du fournisseur.

Si vous omettez le nom de l'objet distant, il révoque l'accès à la table fédérée de cet utilisateur pour tous les objets du schéma distant donné.

Exemple

BEGIN
DBMS_DATA_ACCESS_ADMIN.REVOKE_READ(
username => 'BI_ANALYST',
remote_schema_name => 'ANALYTICS',
remote_schema_object_name => 'SALES_DATA'
);
END;
/

Pour plus d'informations sur la syntaxe, reportez-vous à Révoquer la lecture.

Créer une table fédérée

Un utilisateur consommateur disposant de privilèges de lecture appelle DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE pour créer une table fédérée sur la vue ou la table de portée du fournisseur.

La procédure utilise les OCID de base de données et les informations de région pour établir des liens hypertexte de table afin que le consommateur puisse interroger des données distantes comme s'il s'agissait d'une table externe locale.

Conditions préalables

  • L'utilisateur doit disposer de privilèges de lecture via la procédure GRANT_READ.
  • L'utilisateur doit exister dans les bases de données consommateur et fournisseur avec les privilèges requis.
  • La base de données du consommateur doit appartenir à la portée de création du fournisseur.
  • Le fournisseur doit avoir une portée de création enregistrée pour les objets cible.
  • Connectivité réseau établie entre les bases de données consommateur et fournisseur.

Exemple : fournisseur unique

BEGIN
DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE(
table_name => 'SALES_FED',
remote_schema_name => 'ANALYTICS',
remote_schema_object_name => 'SALES_DATA',
db_ocids => '[{"region": "IAD", "db_ocid": "OCID1.AUTONOMOUSDATABASE.OC1.IAD.EXAMPLE123"}]'
);
END;
/

Dans l'exemple ci-dessus, un destinataire appelle DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE pour créer une table fédérée locale qui connecte à la table ou à la vue d'un fournisseur distant (par exemple, SALES_DATA dans le schéma ANALYTICS), en utilisant JSON db_ocids pour indiquer la base de données de fournisseur OCIDs et les régions pour une interrogation transparente comme si elle était locale.

Lorsqu'un consommateur crée une table fédérée. Elles peuvent être interrogées comme les tables externes standard :
SELECT
REGION,
PRODUCT_ID,
SUM(SALES_AMOUNT) as total_sales,
COUNT(*) as transaction_count
FROM SALES_FED
GROUP BY REGION, PRODUCT_ID
ORDER BY total_sales DESC;

Reportez-vous à Création d'une table fédérée pour obtenir une référence de syntaxe.

Supprimer la table fédérée

Lorsque l'accès fédéré n'est plus requis, l'utilisateur destinataire appelle DBMS_DATA_ACCESS.DROP_FEDERATED_TABLE pour enlever la table fédérée.

Cette procédure nettoie l'objet côté consommateur et met fin à ce chemin d'accès fédéré particulier, tandis que les portées et privilèges du fournisseur sous-jacent restent sous le contrôle du fournisseur.

BEGIN
DBMS_DATA_ACCESS.DROP_FEDERATED_TABLE(
table_name => 'SALES_FED'
);
END;
/

L'exemple ci-dessus supprime la table SALES_FED.

Reportez-vous à Suppression de la table fédérée pour obtenir une référence de syntaxe.

Scénarios de dépannage

Cette section fournit des instructions sur les types de défaillance qui peuvent survenir et sur la façon de résoudre les problèmes.

  1. La base de données du consommateur n'est pas incluse

    Problème : le destinataire reçoit une erreur d'autorisation lors de la tentative de création de tables fédérées.

    Résolution

    • Vérifiez que l'ID de base de données du consommateur correspond aux critères de portée du fournisseur.
    • Vérifiez que des privilèges de lecture ont été accordés à l'utilisateur via la procédure GRANT_READ.
    • Le fournisseur de vérification a inscrit la portée de création appropriée à l'aide de la procédure REGISTER_CREATION_SCOPE.
    • Vérifiez la connectivité réseau entre les brokers consommateur et fournisseur.
    • Vérifiez le statut d'inscription de la base de données dans la console OCI.
  2. Echec de la création de la table fédérée

    Problème : la procédure CREATE_FEDERATED_TABLE échoue bien que les prérequis soient respectés.

    Résolution
    • Vérifiez que l'utilisateur existe dans les bases de données consommateur et fournisseur.
    • Vérifiez que l'utilisateur dispose du privilège GRANT OPTION ou de la propriété des objets sur les objets distants.
    • Vérifiez que les noms de schéma et d'objet distants sont corrects (sensible à la casse).
    • Vérifiez que le fichier JSON db_ocids contient des codes de région et des OCID de base de données valides.
    • Assurez-vous que la portée du fournisseur est activée et contient la base de données du consommateur.
    • Recherchez les erreurs dans les journaux de communication du broker.
  3. Erreurs d'autorisation

    Problème : les utilisateurs ne peuvent pas enregistrer les portées ni accéder aux tables fédérées.

    Résolution

    • Vérifiez que le privilège REGISTER a été accordé à l'utilisateur à l'aide de la procédure GRANT_REGISTER (côté fournisseur).
    • Vérifiez que le privilège READ a été accordé à l'utilisateur à l'aide de GRANT_READ (côté consommateur).
    • Pour les opérations de niveau objet, vérifiez que l'utilisateur est propriétaire de l'objet ou dispose du privilège d'option GRANT.
    • Pour les opérations de niveau schéma, vérifiez que l'utilisateur a le rôle ADMIN ou PDB_DBA.
    • Vérifiez l'historique des révocations de privilège pour vous assurer que les privilèges n'ont pas été révoqués explicitement.