Créer des tables fédérées à l'aide d'hyperliens de table en définissant l'étendue

Vous pouvez créer une table fédérée sur un hyperlien de table de base de données de l'IA autonome. Une table fédérée est une table externe définie sur les hyperliens de table. Il permet l'agrégation des données de plusieurs instances de base de données autonome avec intelligence artificielle.

Bien qu'une table fédérée utilise le même mécanisme d'hyperlien qu'une table externe, le flux de travail de création diffère. Pour les tables externes, le fournisseur crée et partage des hyperliens de table, et chaque consommateur utilise ces hyperliens pour définir des tables externes. Pour les tables fédérées, le consommateur lance la création de la table et les hyperliens de table sont créés automatiquement 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 consommateurs le privilège de créer automatiquement des hyperliens de table. Les consommateurs autorisés dans ces portées peuvent créer des tables fédérées et interroger les données de plusieurs bases de données sources sans échange de liens manuel.

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

Les sections suivantes décrivent le flux de travail détaillé sur la façon dont les bases de données autonomes fournisseur et consommateur créent ensemble 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.

Flux de travail pour créer des tables fédérées

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

Du côté du fournisseur, la première étape consiste à définir une portée de création qui spécifie quelles bases de données d'IA autonomes consommateurs sont autorisées à créer à distance des hyperliens de table dans le fournisseur. L'étendue peut être définie au niveau du schéma ou de l'objet.

Ensuite, le DBA 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 supprimer des étendues pour des tables ou des schémas spécifiques, et LIST_CREATION_SCOPES pour vérifier la configuration courante. Lorsqu'un consommateur demande plus tard un hyperlien, le fournisseur vérifie que la base de données d'IA autonome du consommateur demandeur correspond à la portée enregistrée avant d'autoriser la génération d'URL, en s'assurant que seuls les consommateurs autorisés peuvent créer des hyperliens dans les données du fournisseur.

Du point de vue du consommateur, le flux de travail commence une fois que le fournisseur a défini des portées qui incluent la base de données du consommateur. L'administrateur de base de données 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 consommateur peut ensuite appeler DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE pour créer des hyperliens de table dans la base de données du fournisseur pour le compte du consommateur et la table fédérée résultante dans le consommateur 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 consommateur nettoie en appelant DBMS_DATA_ACCESS.DROP_FEDERATED_TABLE, ce qui supprime l'objet de table fédérée dans le consommateur tout en laissant intactes les étendues du fournisseur.

Prenons l'exemple d'une organisation utilisant des instances Oracle Autonomous AI Database, où une base de données Autonomous AI Database de fournisseur central détient des données principales partagées, et où les bases de données Autonomous AI Databases départementales de consommation ont besoin d'un accès d'analyse sans duplication des données ou de tickets de soutien. Les analystes d'affaires du service d'analyse ont besoin de la création en libre-service de tables externes sur les données du fournisseur pour exécuter des rapports plus rapidement, tout en maintenant la gouvernance au moyen de portées définies par le fournisseur. Ils ont mis la dernière main aux exigences suivantes :
  1. Le ADMIN (fournisseur) accorde le privilège d'enregistrement de portée au responsable 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 que ADMIN, accordez des privilèges d'exécution à l'utilisateur responsable des données (DATA_OWNER).
    grant execute on DBMS_DATA_ACCESS_SCOPE to DATA_OWNER;
  3. Le responsable des données enregistre la portée de création sur un schéma ou un objet partagé dans la base de données d'intelligence artificielle autonome du fournisseur à l'aide de la procédure DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE. Ainsi, les bases de données autonomes d'IA du même compartiment sont autorisées à créer des hyperliens 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 consommateur ADMIN accorde le privilège de lecture à l'analyste d'affaires à l'aide de la procédure DBMS_DATA_ACCESS_ADMIN.GRANT_READ.
    {{BEGIN
    DBMS_DATA_ACCESS_ADMIN.GRANT_READ(
    username => 'BI_ANALYST',
    remote_schema_name => 'DATA_OWNER',
    remote_schema_object_name=> 'SALES_DATA'
    );
    END;
    /}}

    Ainsi, l'analyste peut lancer la création d'une table fédérée.

  5. Le consommateur 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'affaires crée une table externe fédérée dans la base de données d'IA autonome du consommateur à l'aide de la procédure DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE. Cela génère automatiquement l'hyperlien Table si la portée correspond à celle où aucune intervention du fournisseur n'est requise.

    Exemples :

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

    L'OCID de la base de données (db_ocid) doit être en majuscules.
    BEGIN
    DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE(
    table_name                => 'DEPT_SALES_XT',
    remote_schema_name        => 'SHARED_SCHEMA',
    remote_schema_object_name => 'SALES_DATA',
    db_names                  => '[{"region": "IAD", "db_name": "NU8PYOYTEWX1L5M_SALESDB"}]'
    );
    END;
    /
  7. L'analyste interroge la table externe pour l'analyse des services :
    SELECT * FROM DEPT_SALES_XT WHERE region = 'West';
Note

Les exemples de code ci-dessus peuvent être modifiés et mis en oeuvre selon vos besoins.

Pour plus d'informations sur les fonctions et paramètres ci-dessus, voir 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 flux de travail de création des tables fédérées en définissant la portée et leurs descriptions :
Opération Description Utilisateur qui exécute cette opération
Définir la portée de création Définit les bases de données autorisées à créer à distance des hyperliens de table dans une instance de base de données d'IA autonome de fournisseur. Pour plus d'informations, voir Portée de la création. Fournisseur
Registre des subventions

Permet aux utilisateurs d'une instance de base de données IA autonome du fournisseur d'enregistrer ou de mettre à jour la portée.

Pour plus d'informations, voir Registre des subventions.

Fournisseur
Enregistrer la portée de création

Définit les objets de base de données pour lesquels des hyperliens de table peuvent être créés sous une étendue d'autorisation spécifiée.

Pour plus d'informations, voir Enregistrer la portée de création.

Fournisseur
Mettre à jour la portée de création Modifie l'étendue de création existante. Pour plus d'informations, voir Mettre à jour la portée de création. Fournisseur
Annuler l'enregistrement de la portée de création Supprime les paramètres de portée de création précédemment enregistrés pour un schéma, un objet unique ou une liste d'objets. Pour plus d'informations, voir Annuler l'inscription de la portée de création. Fournisseur
Extraire la portée de création Interroge et extrait les étendues de création enregistrées pour les schémas ou objets spécifiés. Pour plus d'informations, voir 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, voir Créer une table fédérée. Grand public
Accorder la lecture Octroie des privilèges de lecture à un utilisateur consommateur pour les schémas ou objets distants, ce qui permet la création d'une table fédérée. Pour plus d'informations, voir Accorder la lecture. Grand public
Révoquer la lecture Révoque un privilège de lecture précédemment accordé pour créer une table fédérée. Pour plus d'informations, voir Révoquer la lecture. Grand public
Supprimer la table fédérée Supprime de la base de données les tables fédérées spécifiées. Pour plus d'informations, voir Supprimer la table fédérée. Grand public

Portée de création

Une portée de création dans une base de données de fournisseur détermine quelles instances de base de données d'IA autonome de consommateur sont autorisées à créer à distance des hyperliens de table dans la base de données de fournisseur.

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

Vous pouvez gérer les portées de création à l'aide de l'ensemble DBMS_DATA_ACCESS_SCOPE, qui fournit des procédures pour enregistrer, annuler l'enregistrement, mettre à jour et extraire les portées. Pour plus d'informations, voir DBMS_DATA_ACCESS_SCOPE.

Registre des subventions

ADMIN (ou PDB_DBA) dans la base de données d'intelligence artificielle autonome du fournisseur utilise 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, empêchant ainsi une exposition non contrô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 l'autorisation d'enregistrer des jeux de données dans l'étendue MY$COMPARTMENT.

Pour plus d'informations sur la syntaxe, voir GRANT_REGISTER.

Enregistrer la portée de création

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

Exemple : Enregistrer la portée au niveau du schéma
BEGIN
DBMS_DATA_ACCESS_SCOPE.REGISTER_CREATION_SCOPE(
schema_name => 'ANALYTICS',
schema_object_name => 'NULL',
scope => 'MY$COMPARTMENT'
);
END;
/

Cet exemple enregistre 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 : Enregistrer la portée au niveau de l'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 au niveau du schéma, schema_object_name limite l'application à cette table, ce qui permet un contrôle granulaire des autorisations de création.

Exemple : Enregistrer 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.

Voir Enregistrer la portée de création pour des informations de référence sur la syntaxe.

Mettre à jour la portée de création

Si un fournisseur doit modifier l'accès, le même utilisateur autorisé ou un autre appelle UPDATE_CREATION_SCOPE pour élargir, restreindre ou ajuster autrement les bases de données d'IA autonomes consommateurs qui peuvent créer des hyperliens 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 à MY$COMPARTMENT.

Voir Mettre à jour la portée de création pour des informations de référence sur la syntaxe.

Annuler l'enregistrement de la portée de création

Lorsqu'un fournisseur souhaite révoquer entièrement la fonction 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 hyperliens de table pour ces objets par les bases de données de consommateurs.

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 précédemment enregistrée pour SALES_DATA dans le schéma ANALYTICS, de sorte que les nouveaux objets créés sous cette étendue ne sont plus régis par les contrôles d'accès aux données de la portée appliquée.

Voir Annuler l'enregistrement de la portée de création pour des informations de référence sur la syntaxe.

Extraire les étendues de création

À tout moment, un utilisateur autorisé peut appeler LIST_CREATION_SCOPES pour extraire les définitions de portée courantes.

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;
/

Voir Extraire la portée de création pour des informations de référence sur la syntaxe.

Accorder la lecture

Dans la base de données d'IA autonome 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 contre 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 l'accès en lecture à l'objet SALES_DATA distant spécifique dans le schéma ANALYTICS d'un fournisseur de données externe.

Pour plus d'informations sur la syntaxe, voir Accorder la lecture.

Révoquer la lecture

La procédure REVOKE_READ supprime le privilège d'un utilisateur pour 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 indiqué.

Exemple

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

Voir Révoquer la lecture pour des informations de référence sur la syntaxe.

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 table ou la vue incluse du fournisseur.

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

Conditions requises

  • Les privilèges de lecture doivent être accordés à l'utilisateur au moyen de la procédure GRANT_READ.
  • L'utilisateur doit exister dans les bases de données de consommateur et de fournisseur avec les privilèges requis.
  • La base de données du consommateur doit appartenir à l'étendue de création du fournisseur.
  • Le fournisseur doit avoir une étendue de création enregistrée pour les objets cibles.
  • Connectivité réseau établie entre les bases de données consommateur et fournisseur.
Soutien inter-régions
  • Lorsque les instances de base de données de l'IA autonome du fournisseur et du consommateur se trouvent dans différentes régions OCI, vous pouvez toujours créer des tables fédérées à l'aide d'hyperliens de table de portée fournisseur.

  • Cela signifie que, même si votre source de données (fournisseur) se trouve, par exemple, dans la région États-Unis - Est et que votre base de données de consommateurs se trouve dans Europe - Ouest, vous pouvez configurer une table fédérée au moyen d'hyperliens de table.

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 consommateur appelle DBMS_DATA_ACCESS.CREATE_FEDERATED_TABLE pour créer une table fédérée locale qui est liée à la table ou à la vue d'un fournisseur distant (par exemple, SALES_DATA dans le schéma ANALYTICS), à l'aide de JSON db_ocids pour spécifier la base de données du 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 des 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;

Voir Créer une table fédérée pour des informations de référence sur la syntaxe.

Supprimer la table fédérée

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

Cette procédure nettoie l'objet côté consommateur et met fin efficacement à ce chemin d'accès fédéré particulier, tandis que les étendues et les privilèges sous-jacents du fournisseur 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.

Voir Supprimer la table fédérée pour des informations de référence sur la syntaxe.

Scénarios de dépannage

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

  1. Base de données de consommateur non incluse

    Problème : Le consommateur 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 base de données du consommateur correspond aux critères d'étendue du fournisseur.
    • Vérifiez que les privilèges de lecture ont été accordés à l'utilisateur au moyen de la procédure GRANT_READ.
    • Le fournisseur de vérification a enregistré la portée de création appropriée à l'aide de la procédure REGISTER_CREATION_SCOPE.
    • Confirmez le statut d'enregistrement de la base de données dans la console OCI.
  2. Échec de la création de la table fédérée

    Problème : La procédure CREATE_FEDERATED_TABLE échoue malgré le respect des préalables.

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

    Problème : Les utilisateurs ne peuvent pas enregistrer des 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 au niveau de l'objet, vérifiez que l'utilisateur est responsable de l'objet ou dispose du privilège d'option GRANT.
    • Pour les opérations au niveau du schéma, vérifiez que l'utilisateur est ADMIN ou a le rôle PDB_DBA.
    • Vérifiez l'historique de révocation des privilèges pour vous assurer que les privilèges n'ont pas été explicitement révoqués.