Gestionar catálogos con DBMS_CATALOG

El paquete DBMS_CATALOG proporciona un juego completo de procedimientos, funciones y tipos para gestionar catálogos de bases de datos para Oracle Autonomous AI Database.

¿Qué es un catálogo?

Un catálogo se define como una recopilación de esquemas con nombre, cada uno de los cuales contiene una recopilación de objetos con nombre, como Tablas o Vistas. Cada base de datos Oracle tiene un único catálogo local: el diccionario de datos. Este catálogo siempre está presente y no se puede eliminar. Sin embargo, hay otros ejemplos de catálogos definidos fuera de la base de datos.
  • Juego de objetos disponibles a través de un enlace de base de datos
  • Un conjunto de objetos compartidos disponibles a través de DBMS_SHARE (por ejemplo, Delta Sharing);
  • Un conjunto de mesas Iceberg gestionadas por un Catálogo REST de Iceberg;
  • Un conjunto de objetos definidos por un producto de terceros, como Amazon Glue, Databricks Unity Catalog o Snowflakes Polaris;
  • Juego de objetos definido por el servicio Oracle OCI Data Catalog.
  • Un catálogo también se puede considerar un "dominio" o un "producto de datos", que es un juego de objetos agrupados para un propósito de negocio específico.

Para obtener más información sobre la herramienta Catálogo del conjunto de herramientas Data Studio, consulte Herramienta Catálogo.

En un sistema operativo, puede acceder a archivos de datos externos mediante el montaje de un sistema de archivos. Por analogía, puede acceder a datos externos en una base de datos de IA autónoma montaje de un catálogo mediante el paquete DBMS_CATALOG.

En el siguiente ejemplo, se muestra cómo montar un catálogo REST de Iceberg externo. Para usarlo, necesitaría tres piezas de información.

  • El punto final del catálogo REST de Iceberg;
  • Una credencial (por ejemplo, un token portador) utilizada para llamar a este punto final;
  • Credencial (por ejemplo, un nombre de usuario/contraseña) que se utiliza para acceder al cubo donde se almacenan los archivos de datos de 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 se utiliza para definir y manejar operaciones relacionadas con el catálogo.

Proporciona un juego completo de procedimientos, funciones y tipos para gestionar catálogos en la base de datos autónoma de Oracle. Soporta operaciones como el montaje y desmontaje de catálogos, la gestión de propiedades de catálogo, el manejo de credenciales y el trabajo con entidades de catálogo como tablas, esquemas y objetos. Este paquete es esencial para integrar orígenes de datos externos y gestionar metadatos de forma segura y eficaz.

Modelo de Seguridad

El paquete DBMS_CATALOG funciona con el modelo AUTHID CURRENT_USER, lo que significa que se ejecuta con los privilegios del usuario actual. Debe tener los permisos adecuados para realizar operaciones como montar catálogos, actualizar propiedades o gestionar credenciales.
Nota

Pocos catálogos requieren que la base de datos de IA autónoma se conecte a recursos de Internet externos. Por lo tanto, debe agregar las direcciones externas relevantes a las listas de control de acceso para el usuario de base de datos asociado. Por ejemplo, al activar el acceso a un catálogo de Databricks Unity Iceberg en Azure, puede que tenga que incluir dos direcciones en la lista blanca: una para acceder a las API de REST de Iceberg y otra si el usuario necesita acceder a los datos subyacentes.
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;
/

Debe tener DWROLE para ejecutar los métodos DBMS_CATALOG.

Ejecute el siguiente comando para otorgar DWROLE al usuario:
GRANT DWROLE TO MY_USER;

Constantes y tipos de catálogos

En este apartado se ofrece una descripción general de los tipos de catálogo y las constantes clave definidos en el paquete. Explica las diferentes categorías de catálogo utilizadas para organizar varios orígenes de catálogo y describe las constantes esenciales para configurar y gestionar las propiedades y los comportamientos del catálogo.

Tipos de catálogo

El paquete especifica varios tipos de catálogos para clasificar y manejar diferentes categorías de catálogos. Son:
  • CATALOG_TYPE_SHARE:

    Representa un catálogo basado en recursos compartidos, que está diseñado principalmente para compartir datos entre sistemas o usuarios. Por ejemplo, un servicio de uso compartido de datos como el uso compartido de datos de Data Studio utiliza catálogos basados en recursos compartidos para distribuir datos de forma segura.

  • CATALOG_TYPE_DATA_CATALOG: representa catálogos de datos externos como AWS Glue o OCI Data Catalog. Estos catálogos sirven como repositorios centralizados para metadatos sobre juegos de datos. Por ejemplo, el catálogo de datos de AWS Glue detecta y gestiona automáticamente metadatos de fuentes de datos en servicios de AWS como S3 y Redshift, lo que permite una integración y consulta de datos sin problemas.
  • CATALOG_TYPE_DB_LINK: representa una categoría de catálogo creada a partir de un enlace de base de datos. Este tipo de catálogo permite acceder y organizar metadatos y objetos que residen en una base de datos remota o externa, conectándolos a través de una base de datos establecida.

    Consulte Carga de datos de bases de datos de Oracle y no de Oracle mediante enlaces de base de datos para obtener más información.

  • CATALOG_TYPE_VIRTUAL: representa catálogos virtuales que proporcionan una abstracción sobre los orígenes de datos físicos. Los catálogos virtuales no almacenan datos por sí mismos, sino que presentan una interfaz unificada para consultar fuentes de datos dispares, por ejemplo, vistas virtuales creadas en una plataforma de virtualización de datos.
  • CATALOG_TYPE_ICEBERG: representa un catálogo de Iceberg, que gestiona los metadatos de las tablas almacenadas en el formato Apache Iceberg. Iceberg es un formato de tabla diseñado para enormes conjuntos de datos analíticos, que admite características como la evolución del esquema y el viaje en el tiempo.

    Consulte Gestión de catálogos para obtener más información.

Constantes

En la siguiente sección, se resaltan las constantes esenciales que definen las propiedades y la configuración del catálogo. Las constantes incluyen:
  • TYPE_CATALOG y NS_CATALOG: define el tipo de catálogo y el espacio de nombres como CATALOG.
  • DEFAULT_CATALOG: nombre de catálogo por defecto definido en LOCAL.
  • Constantes de propiedades como PROP_IS_ENABLED, PROP_IS_SYNCHRONIZED, PROP_CACHE_ENABLED, PROP_CACHE_DURATION y otras para gestionar el comportamiento del catálogo y el almacenamiento en caché de metadatos.

    Nombre de constante Valor Descripción
    PROP_IS_ENABLED IS_ENABLED

    Esta propiedad determina si un catálogo está activado actualmente para consulta y búsqueda.

    Valores válidos:
    • : el catálogo aparecerá en el cuadro de diálogo de búsqueda de la interfaz de usuario de Data Studio y se puede utilizar en consultas SQL con la sintaxis de enlace de base de datos (por ejemplo, seleccione el nombre de usuario de all_users@catalog).

    • NO: el catálogo aparecerá en la vista ALL_MOUNTED_CATALOGS, pero NO se incluirá en las búsquedas de la interfaz de usuario de Data Studio y NO se podrá utilizar en la sintaxis de enlace de base de datos.

    PROP_CACHE_ENABLED CACHE_ENABLED

    Esta propiedad determina si los metadatos de un esquema remoto se deben almacenar en caché en la base de datos local para mejorar el rendimiento.

    Valores Válidos

    • Los metadatos se almacenarán en caché en el primer acceso y permanecerán en la caché durante un período especificado por PROP_CACHE_DURATION.
    • NO:

      Los metadatos no se almacenarán en caché. Todos los intentos de acceder a los objetos del catálogo llegarán, en el momento de la consulta, al origen de metadatos remoto.

    PROP_CACHE_DURATION CACHE_DURATION

    Número de segundos que se deben mantener los metadatos en la caché antes de que se conviertan en obsoletos. El valor por defecto es 3600 segundos (una hora).

    Tenga en cuenta que el usuario puede vaciar la caché manualmente en cualquier momento llamando a DBMS_CATALOG.FLUSH_CATALOG_CACHE.

    El usuario puede refrescar la caché en cualquier momento llamando a DBMS_CATALOG.PREFILL_CATALOG_CACHE.

    PROP_CACHE_ASYNC 'CACHE_ASYNC'

    Este campo se muestra si la caché se rellena mediante trabajos asíncronos.

    Valores Válidos

    • :

      Los metadatos se almacenarán en caché mediante un trabajo DBMS_SCHEDULER que se crea la primera vez que un usuario solicita los metadatos.

    • NO:

      Los metadatos almacenarán en caché al usuario la sesión de la base de datos del usuario que solicita los metadatos.

    PROP_DEFAULT_SCHEMA DEFAULT_SCHEMA
    Nombre de un esquema remoto que se seleccionará por defecto si el usuario ejecuta una consulta del formulario:
    select * from table@catalog
    El esquema por defecto desempeña el mismo rol que el propio esquema del usuario en la base de datos local.
    PROP_DCAT_TYPE DATA_CATALOG_TYPE

    Tipo de catálogo montado por DBMS_CATALOG.MOUNT_DATA_CATALOG

    Valores Válidos

    • AWS_GLUE: el catálogo se define sobre un repositorio remoto de AWS Glue.
    • OCI_DCAT: el catálogo se define sobre una instancia de OCI Data Catalog.
    Nota

    Ésta es una propiedad de solo lectura.
    PROP_CUSTOM CUSTOM

    Una propiedad personalizada es un par nombre/valor asociado, por el usuario, a un catálogo, esquema, tabla u otro objeto del catálogo.

    Hay dos formas de especificar una propiedad personalizada:
    • Puede definir una única propiedad personalizada, "MY_PROP", por ejemplo, especificando el nombre de la propiedad compuesta 'CUSTOM:MY_PROP' junto con un valor de cadena arbitrario.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'CUSTOM:MY_PROP',
         new_value        => 'Property Value');
      
    • Puede especificar un grupo de propiedades de cliente especificando el nombre de propiedad simple 'CUSTOM' junto con un objeto JSON que contiene pares de nombre y valor.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'CUSTOM',
         new_value        => '{"Property1" : "Value 1",
                               "Property2" : "Value 2",
                               ...}');
      
      Nota

      Los nombres de propiedades personalizadas distinguen entre mayúsculas y minúsculas, por lo que CUSTOM:MY_PROP es distinto de CUSTOM:My_Prop.

      Para eliminar una propiedad personalizada, defina el valor en NULL.

      Las propiedades personalizadas se pueden utilizar como términos de búsqueda en la interfaz de usuario de Data Studio. Por ejemplo, puede encontrar todas las tablas con la propiedad MY_PROP especificando el parámetro de condiciones en DBMS_CATALOG.GET_TABLES.
      SELECT table_name
      FROM DBMS_CATALOG.GET_TABLES(
             catalog_name => 'some_catalog',
             conditions => '#MY_PROP');
      

      También se pueden buscar valores específicos.

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

    Los metadatos personalizados son similares a las propiedades personalizadas, pero pueden contener JSON de formato libre. Los metadatos se almacenan con el objeto y se pueden recuperar, pero no se utilizan como término de búsqueda.

    Hay dos formas de especificar metadatos personalizados:
    • Puede definir los metadatos completos, como JSON, mediante el nombre de propiedad 'METADATA'.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'METADATA',
         new_value        => '{"subObject":{"propName":"abc"}}');
      
    • Puede actualizar un subcomponente de los metadatos mediante el nombre de la propiedad compuesta 'METADATA:path', donde la ruta es una ruta de acceso JSON relativa.
      DBMS_CATALOG.UPDATE_CATALOG_PROPERTY(
         catalog_name     => 'some_catalog',
         catalog_property => 'METADATA:subObject.propName',
         new_value        => 'xyz');
      
    PROP_CONFIGURATION CONFIGURATION

    La propiedad de configuración se utiliza para actualizar propiedades de configuración específicas para los catálogos de Iceberg. Funciona de forma similar a la propiedad CUSTOM.

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

Tipos de datos

El paquete DBMS_CATALOG introduce varios tipos de datos personalizados para gestionar la información relacionada con el catálogo. Son:
  • credential_info y credential_info_map: son estructuras para almacenar y asignar información de credenciales.
  • catalog_table y catalog_tables: son registros y tablas para almacenar metadatos detallados de la tabla (por ejemplo, propietario, nombre, descripción, estado).
  • catalog_schema y catalog_schemas: son registros y tablas para metadatos de esquema.
  • catalog_object y catalog_objects: son registros y tablas para metadatos de objetos dentro de un catálogo.