Gérer les catalogues avec DBMS_CATALOG

Le package DBMS_CATALOG fournit un ensemble 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 un ensemble de schémas nommés, chacun contenant un ensemble d'objets nommés, tels que des TABLES ou des vues. Chaque base de données Oracle dispose d'un catalogue local unique : 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 via 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, comme Amazon Glue, Databricks Unity Catalog ou Snowflakes Polaris ;
  • Ensemble d'objets défini par le service Oracle OCI Data Catalog.
  • Un catalogue peut également être considéré comme un "domaine" ou un "produit de données", qui est un ensemble d'objets regroupés dans un but commercial spécifique.

Pour plus d'informations sur l'outil Catalogue de la suite d'outils Data Studio, reportez-vous à Outil 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 du package DBMS_CATALOG.

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

  • Adresse du catalogue REST Iceberg ;
  • Informations d'identification (par exemple, un jeton de support) utilisées pour appeler cette adresse ;
  • Informations d'identification (par exemple, nom utilisateur/mot de passe) utilisées pour accéder au bucket dans lequel les fichiers de données Iceberg sont stockés.
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 permet de définir et de 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 une base de données autonome 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, la gestion des informations d'identification et de connexion 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é

Le package 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 en cours. Vous devez disposer des droits d'accès appropriés pour effectuer des opérations telles que le montage de catalogues, la mise à jour des propriétés ou la gestion des informations d'identification.
Remarque

Peu de catalogues nécessitent une base de données d'IA autonome pour se connecter à des ressources Internet externes. Par conséquent, vous devez ajouter les adresses externes appropriées aux listes de contrôle d'accès de l'utilisateur de base de données associé. Par exemple, lorsque vous activez l'accès à un catalogue Iceberg Databricks Unity sur Azure, vous pouvez avoir besoin de mettre sur liste blanche deux adresses : une pour accéder aux API REST 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 la valeur 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 de catalogue et constantes

Cette section présente les types de catalogue et les constantes clés définis dans le package. Il explique les différentes catégories de catalogue utilisées pour organiser les différentes sources de catalogue et décrit les constantes essentielles pour configurer et gérer les propriétés et les comportements du catalogue.

Types de catalogue

Le package spécifie plusieurs types de catalogue pour classer et gérer différentes catégories de catalogues. Elles sont les suivantes :
  • CATALOG_TYPE_SHARE:

    Représente un catalogue basé sur le partage, conçu principalement pour le partage de données entre des systèmes ou des 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 les catalogues de données externes tels qu'AWS Glue ou OCI Data Catalog. Ces catalogues servent de référentiels centralisés pour les métadonnées relatives aux ensembles de données. Par exemple, AWS Glue Data Catalog détecte et gère automatiquement les métadonnées des sources de données dans 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 via une base de données établie.

    Pour plus d'informations, reportez-vous à Chargement de 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 ensembles de données analytiques, prenant en charge des fonctionnalités telles que l'évolution des schémas et le voyage dans le temps.

    Pour plus d'informations, reportez-vous à Gestion des 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 comme CATALOG.
  • DEFAULT_CATALOG : nom de catalogue par défaut défini sur LOCAL.
  • Constantes de propriété telles que PROP_IS_ENABLED, PROP_IS_SYNCHRONIZED, PROP_CACHE_ENABLED, PROP_CACHE_DURATION et autres pour la gestion du comportement du catalogue et de la mise en 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 la requête et la recherche.

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

    • NON : le catalogue sera répertorié dans la vue ALL_MOUNTED_CATALOGS, mais ne sera pas inclus dans les recherches d'interface utilisateur Data Studio et ne pourra pas être utilisé dans la syntaxe de 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 cache dans la base de données locale pour améliorer les performances.

    Valeurs valides

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

      Les métadonnées ne seront pas mises en cache. Toutes les tentatives d'accès aux objets du catalogue vont atteindre, 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 le cache à tout moment en appelant DBMS_CATALOG.PREFILL_CATALOG_CACHE.

    PROP_CACHE_ASYNC 'CACHE_ASYNC'

    Ce champ s'affiche si le cache est renseigné à l'aide de travaux asynchrones.

    Valeurs valides

    • OUI :

      Les métadonnées sont mises en cache à l'aide d'un travail DBMS_SCHEDULER qui est créé la première fois qu'un utilisateur demande les métadonnées.

    • NON :

      Les métadonnées mettront en cache 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 requête 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 sur un référentiel AWS Glue distant.
    • OCI_DCAT : le catalogue est défini sur une instance OCI Data Catalog.
    Remarque

    Il s'agit d'une propriété de 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 du catalogue.

    Il existe deux manières d'indiquer une propriété personnalisée :
    • Vous pouvez définir une seule propriété personnalisée, disons "MY_PROP", en indiquant 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 indiquer un groupe de propriétés client en indiquant le nom de propriété simple "CUSTOM" avec un objet JSON contenant des paires nom/valeur.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'CUSTOM',
         new_value        => '{"Property1" : "Value 1",
                               "Property2" : "Value 2",
                               ...}');
      
      Remarque

      Les noms de propriété personnalisée respectent la casse. Par conséquent, CUSTOM:MY_PROP est distinct de CUSTOM:My_Prop.

      Pour supprimer une propriété personnalisée, définissez la valeur sur NULL.

      Les propriétés personnalisées peuvent être utilisées comme termes de recherche dans l'interface utilisateur Data Studio. Par exemple, vous pouvez rechercher toutes les tables avec la propriété MY_PROP en indiquant 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 un format JSON 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, au format JSON, en utilisant le 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 permet de 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

Le package DBMS_CATALOG introduit différents types de données personnalisés pour gérer les informations relatives au catalogue. Elles sont les suivantes :
  • credential_info et credential_info_map : structures permettant de stocker et de mettre en correspondance les informations d'identification.
  • catalog_table et catalog_tables : enregistrements et tables de stockage des métadonnées de table détaillées (par exemple, propriétaire, nom, description, statut).
  • catalog_schema et catalog_schemas : enregistrements et tables pour les métadonnées de schéma.
  • catalog_object et catalog_objects : enregistrements et tables pour les métadonnées d'objet dans un catalogue.