Gérer les catalogues avec DBMS_CATALOG

L'ensemble DBMS_CATALOG fournit un jeu complet de procédures, de fonctions et de types pour la gestion des catalogues de base de données pour Oracle Autonomous AI Database.

Qu'est-ce qu'un catalogue?

Un catalogue est défini comme une collection de schémas nommés, chacun contenant une collection d'objets nommés, tels que TABLES ou VIEWS. Chaque base de données Oracle comporte un seul catalogue local : le dictionnaire de données. Ce catalogue est toujours présent et ne peut pas être supprimé. Mais il existe d'autres exemples de catalogues, définis en dehors de la base de données.
  • Ensemble d'objets disponibles via un lien de base de données
  • Ensemble d'objets partagés disponibles au moyen de DBMS_SHARE (par exemple, Delta Sharing);
  • Un ensemble de tables Iceberg gérées par un catalogue REST Iceberg;
  • Ensemble d'objets définis par un produit tiers, tel qu'Amazon Glue, Databricks Unity Catalog ou Snowflakes Polaris;
  • Jeu d'objets défini par le service de catalogue de données OCI Oracle.
  • Un catalogue peut également être considéré comme un "domaine" ou un "produit de données", qui est un jeu d'objets regroupés à des fins d'affaires spécifiques.

Pour plus d'informations sur l'outil de catalogue de la suite d'outils Data Studio, voir L'outil de catalogue.

Dans un système d'exploitation, vous pouvez accéder aux fichiers de données externes en montant un système de fichiers. Par analogie, vous pouvez accéder aux données externes dans une base de données d'IA autonome en montant un catalogue à l'aide de l'ensemble DBMS_CATALOG.

L'exemple suivant montre comment monter un catalogue REST Iceberg externe. Pour l'utiliser, vous aurez besoin de trois informations.

  • Point d'extrémité du catalogue REST Iceberg;
  • Données d'identification (par exemple, un jeton porteur) utilisées pour appeler ce point d'extrémité;
  • Données d'identification (par exemple, nom d'utilisateur/mot de passe) utilisées pour accéder au seau dans lequel sont stockés les fichiers de données Iceberg.
BEGIN
  -- Create a credential capable of accessing an external Iceberg REST catalog
  dbms_cloud.create_credential('ICEBERG_CATALOG_CRED', ...);

  -- Create a credential capable of accessing the bucket where the 
  -- Iceberg data files are stored.
  dbms_cloud.create_credential('ICEBERG_STORAGE_CRED', ...); 

  -- Mount the iceberg catalog
  dbms_catalog.mount_iceberg(
    catalog_name             => 'ICEBERG_CAT',
    endpoint                 => 'https://...',
    catalog_credential       => 'ICEBERG_CATALOG_CRED',
    data_storage_credential  => 'ICEBERG_STORAGE_CRED',
    catalog_type             => 'ICEBERG_UNITY');
END;
/

-- List tables in the iceberg catalog
SELECT owner, table_name 
FROM all_tables@iceberg_cat;

-- Read data from an iceberg table
SELECT *
FROM a_schema.a_table@iceberg_cat;

DBMS_CATALOG est utilisé pour définir et gérer les opérations liées au catalogue.

Il fournit un ensemble complet de procédures, de fonctions et de types pour la gestion des catalogues dans la base de données autonome d'Oracle. Il prend en charge des opérations telles que le montage et le démontage de catalogues, la gestion des propriétés de catalogue, le traitement des données d'identification et l'utilisation d'entités de catalogue telles que des tables, des schémas et des objets. Ce package est essentiel pour intégrer des sources de données externes et gérer les métadonnées de manière sécurisée et efficace.

Modèle de sécurité

L'ensemble DBMS_CATALOG fonctionne sous le modèle AUTHID CURRENT_USER, ce qui signifie qu'il s'exécute avec les privilèges de l'utilisateur courant. Vous devez disposer des autorisations appropriées pour effectuer des opérations telles que le montage de catalogues, la mise à jour des propriétés ou la gestion des données d'identification.
Note

Peu de catalogues nécessitent une base de données autonome d'intelligence artificielle pour se connecter à des ressources Internet externes. Par conséquent, vous devez ajouter les adresses externes pertinentes aux listes de contrôle d'accès de l'utilisateur de base de données associé. Par exemple, lors de l'activation de l'accès à un catalogue Iceberg de Databricks Unity sur Azure, vous devrez peut-être ajouter deux adresses dans la liste blanche : une pour accéder aux API REST d'Iceberg et une autre si l'utilisateur a besoin d'accéder aux données sous-jacentes.
BEGIN
  dbms_network_acl_admin.append_host_ace(
    host => '*.azuredatabricks.net',
    lower_port => 443,
    upper_port => 443,
    ace => xs$ace_type(
      privilege_list => xs$name_list('http', 'http_proxy'),
      principal_name => 'DBUSER',
      principal_type => xs_acl.ptype_db));

  dbms_network_acl_admin.append_host_ace(
    host => '*.blob.core.windows.net',
    ace => xs$ace_type(
      privilege_list => xs$name_list('http', 'http_proxy'),
      principal_name =>  'DBUSER',
      principal_type => xs_acl.ptype_db));
END;
/

Vous devez disposer de DWROLE pour exécuter les méthodes DBMS_CATALOG.

Exécutez la commande suivante pour accorder DWROLE à l'utilisateur :
GRANT DWROLE TO MY_USER;

Types et constantes de catalogue

La présente section donne un aperçu des types de catalogues et des constantes clés définis dans l'ensemble. Il explique les différentes catégories de catalogue utilisées pour organiser diverses sources de catalogue et décrit les constantes essentielles pour configurer et gérer les propriétés et les comportements de catalogue.

Types de catalogue

L'ensemble spécifie plusieurs types de catalogue pour classer et traiter différentes catégories de catalogues. Il s'agit de :
  • CATALOG_TYPE_SHARE:

    Représente un catalogue basé sur le partage, conçu principalement pour le partage de données entre les systèmes ou les utilisateurs. Par exemple, un service de partage de données tel que Data Sharing de Data Studio utilise des catalogues basés sur le partage pour distribuer les données en toute sécurité.

  • CATALOG_TYPE_DATA_CATALOG : Représente des catalogues de données externes tels que AWS Glue ou OCI Data Catalog. Ces catalogues servent de référentiels centralisés pour les métadonnées sur les jeux de données. Par exemple, le catalogue de données AWS Glue détecte et gère automatiquement les métadonnées des sources de données sur les services AWS tels que S3 et Redshift, ce qui permet une intégration et une interrogation transparentes des données.
  • CATALOG_TYPE_DB_LINK : Représente une catégorie de catalogue créée à partir d'un lien de base de données. Ce type de catalogue vous permet d'accéder et d'organiser les métadonnées et les objets qui résident dans une base de données distante ou externe, en les connectant au moyen d'une base de données établie.

    Pour plus d'informations, voir Charger des données à partir de bases de données Oracle et non Oracle à l'aide de liens de base de données.

  • CATALOG_TYPE_VIRTUAL : Représente les catalogues virtuels qui fournissent une abstraction par rapport aux sources de données physiques. Les catalogues virtuels ne stockent pas les données eux-mêmes, mais présentent une interface unifiée pour interroger des sources de données disparates (par exemple, des vues virtuelles créées dans une plate-forme de virtualisation des données).
  • CATALOG_TYPE_ICEBERG : Représente un catalogue Iceberg, qui gère les métadonnées des tables stockées au format Apache Iceberg. Iceberg est un format de table conçu pour d'énormes jeux de données analytiques, prenant en charge des fonctionnalités telles que l'évolution du schéma et le voyage dans le temps.

    Pour plus d'informations, voir Gérer les catalogues.

Constantes

La section suivante met en évidence les constantes essentielles qui définissent les propriétés et les paramètres du catalogue. Les constantes sont les suivantes :
  • TYPE_CATALOG et NS_CATALOG : Définit le type de catalogue et l'espace de noms CATALOG.
  • DEFAULT_CATALOG : Nom de catalogue par défaut réglé à LOCAL.
  • Constantes de propriété telles que PROP_IS_ENABLED, PROP_IS_SYNCHRONIZED, PROP_CACHE_ENABLED, PROP_CACHE_DURATION et autres pour gérer le comportement du catalogue et la mise en mémoire cache des métadonnées.

    Nom de constante Valeur Description
    PROP_IS_ENABLED IS_ENABLED

    Cette propriété détermine si un catalogue est actuellement activé pour l'interrogation et la recherche.

    Valeurs valides :
    • OUI : Le catalogue apparaît dans la boîte de dialogue de recherche de l'interface utilisateur de Data Studio et peut être utilisé dans les interrogations SQL à l'aide de la syntaxe du lien de base de données (par exemple, sélectionnez un nom d'utilisateur dans all_users@catalog).

    • NON : Le catalogue sera répertorié dans la vue ALL_MOUNTED_CATALOGS, mais il ne sera pas inclus dans les recherches de l'interface utilisateur de Data Studio et ne pourra pas être utilisé dans la syntaxe du lien de base de données.

    PROP_CACHE_ENABLED CACHE_ENABLED

    Cette propriété détermine si les métadonnées d'un schéma distant doivent être mises en mémoire cache dans la base de données locale pour améliorer les performances.

    Valeurs valides

    • OUI Les métadonnées seront mises en mémoire cache au premier accès et resteront dans la mémoire cache pendant une période spécifiée par PROP_CACHE_DURATION.
    • NON :

      Les métadonnées ne seront pas mises en mémoire cache. Toutes les tentatives d'accès aux objets du catalogue atteindront, au moment de l'interrogation, la source de métadonnées distante.

    PROP_CACHE_DURATION CACHE_DURATION

    Nombre de secondes pendant lesquelles les métadonnées doivent être conservées dans le cache avant qu'elles ne deviennent obsolètes. La valeur par défaut est 3600 secondes (une heure).

    Notez que l'utilisateur peut vider le cache manuellement à tout moment en appelant DBMS_CATALOG.FLUSH_CATALOG_CACHE.

    L'utilisateur peut actualiser la mémoire cache à tout moment en appelant DBMS_CATALOG.PREFILL_CATALOG_CACHE.

    PROP_CACHE_ASYNC 'CACHE_ASYNC'

    Ce champ s'affiche si la mémoire cache est alimentée à l'aide de tâches asynchrones.

    Valeurs valides

    • OUI :

      Les métadonnées seront mises en mémoire cache à l'aide d'une tâche DBMS_SCHEDULER créée la première fois qu'un utilisateur demande les métadonnées.

    • NON :

      Les métadonnées mettront en cache l'utilisateur de la session de base de données de l'utilisateur qui demande les métadonnées.

    PROP_DEFAULT_SCHEMA DEFAULT_SCHEMA
    Nom d'un schéma distant qui sera choisi par défaut si l'utilisateur exécute une interrogation du formulaire :
    select * from table@catalog
    Le schéma par défaut joue le même rôle que le schéma de l'utilisateur dans la base de données locale.
    PROP_DCAT_TYPE DATA_CATALOG_TYPE

    Type d'un catalogue monté par DBMS_CATALOG.MOUNT_DATA_CATALOG

    Valeurs valides

    • AWS_GLUE : Le catalogue est défini au-dessus d'un référentiel AWS Glue distant.
    • OCI_DCAT : Le catalogue est défini au-dessus d'une instance de catalogue de données OCI.
    Note

    Il s'agit d'une propriété en lecture seule.
    PROP_CUSTOM CUSTOM

    Une propriété personnalisée est une paire nom/valeur associée, par l'utilisateur, à un catalogue, un schéma, une table ou un autre objet dans le catalogue.

    Il existe deux façons de spécifier une propriété personnalisée :
    • Vous pouvez définir une seule propriété personnalisée, "MY_PROP", par exemple, en spécifiant le nom de la propriété composite 'CUSTOM:MY_PROP' avec une valeur de chaîne arbitraire.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'CUSTOM:MY_PROP',
         new_value        => 'Property Value');
      
    • Vous pouvez spécifier un groupe de propriétés de client en spécifiant le nom de propriété simple 'CUSTOM' avec un objet JSON qui contient des paires de valeurs de nom.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'CUSTOM',
         new_value        => '{"Property1" : "Value 1",
                               "Property2" : "Value 2",
                               ...}');
      
      Note

      Les noms de propriété personnalisés sont sensibles à la casse, de sorte que CUSTOM:MY_PROP est distinct de CUSTOM:My_Prop.

      Pour supprimer une propriété personnalisée, réglez la valeur à NULL.

      Les propriétés personnalisées peuvent être utilisées en tant que termes de recherche dans l'interface utilisateur Data Studio. Par exemple, vous pouvez trouver toutes les tables avec la propriété MY_PROP en spécifiant le paramètre de conditions dans DBMS_CATALOG.GET_TABLES.
      SELECT table_name
      FROM DBMS_CATALOG.GET_TABLES(
             catalog_name => 'some_catalog',
             conditions => '#MY_PROP');
      

      Vous pouvez également rechercher des valeurs spécifiques.

      SELECT table_name
      FROM DBMS_CATALOG.GET_TABLES(
             catalog_name => 'some_catalog',
             conditions => '#MY_PROP="Property Value"');
      
    PROP_METADATA METADATA

    Les métadonnées personnalisées sont similaires aux propriétés personnalisées, mais elles peuvent contenir du JSON à structure libre. Les métadonnées sont stockées avec l'objet et peuvent être extraites, mais elles ne sont pas utilisées comme terme de recherche.

    Il existe deux façons de spécifier des métadonnées personnalisées :
    • Vous pouvez définir l'ensemble des métadonnées en tant que JSON à l'aide du nom de propriété 'METADATA'.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'METADATA',
         new_value        => '{"subObject":{"propName":"abc"}}');
      
    • Vous pouvez mettre à jour un sous-composant des métadonnées à l'aide du nom de propriété composite 'METADATA:path', où le chemin est un chemin JSON relatif.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'METADATA:subObject.propName',
         new_value        => 'xyz');
      
    PROP_CONFIGURATION CONFIGURATION

    La propriété de configuration est utilisée pour mettre à jour des propriétés de configuration spécifiques pour les catalogues Iceberg. Il fonctionne de la même manière que la propriété CUSTOM.

    BEGIN
      dbms_catalog.update_catalog_property(
        'iceberg_cat', 
        'CONFIGURATION:IS_CASE_SENSITIVE', 
        'YES');
    END;
    /
    

Types de données

L'ensemble DBMS_CATALOG introduit divers types de données personnalisées pour gérer les informations relatives au catalogue. Il s'agit de :
  • credential_info et credential_info_map : Il s'agit de structures pour stocker et mapper les informations de données d'identification.
  • catalog_table et catalog_tables : Il s'agit d'enregistrements et de tables pour le stockage des métadonnées de table détaillées (par exemple, responsable, nom, description, statut).
  • catalog_schema et catalog_schemas : Il s'agit d'enregistrements et de tables pour les métadonnées de schéma.
  • catalog_object et catalog_objects : Il s'agit d'enregistrements et de tables pour les métadonnées d'objet dans un catalogue.