jueves, 30 de marzo de 2023

Cloud Links en Autonomous Database

En el día de ayer Oracle introdujo una nueva funcionalidad que permite acceder remotamente en forma sencilla a datos disponibles en bases de datos autónomas sin necesidad de crear database links entre ellas. Esta nueva funcionalidad se llama Cloud Links y permite "publicar" en una base de datos autónoma un objeto en particular, el cual puede ser accedido por otras bases de datos autónomas.

¿Cómo se crea un Cloud Link?

Asumamos que tenemos un sistema con una tabla de Empleados y una vista vEmpleados que muestra toda la información de la tabla excepto la columna salario, como mostramos a continuación:



Nuestro objetivo es permitir a otras bases de datos autónomas acceder a las mismas.

Otorgando Permisos

El primer paso es otorgarle (con el usuario ADMIN de ADB) permiso al usuario dueño de los objetos que queremos compartir para poder "registrar" objetos en Cloud Link. Esto se hace utilizando el procedimiento "GRANT_REGISTER" del paquete "DBMS_CLOUD_LINK_ADMIN". En nuestro ejemplo, le daremos permiso al usuario DEMOLINK que es el dueño de los objetos que deseamos compartir:

BEGIN
    DBMS_CLOUD_LINK_ADMIN.GRANT_REGISTER(
       username => 'DEMOLINK',
       scope    => 'MY$REGION');
END;
/
En el parámetro Scope puede tener los valores "MY$COMPARTMENT" (sólo el compartimento), "MY$TENANCY" (solo la Tenancy) o "MY$REGION" (la región) los cuales definen el público potencial de los Cloud Links que podrá crear el usuario.

Adicionalmente, debemos otorgar permiso al usuario para ejecutar el paquete de administración de Cloud Links:

GRANT EXECUTE ON DBMS_CLOUD_LINK TO DEMOLINK;


Registrando un Objeto

Una vez otorgados estos permisos, y conectados con el usuario dueño de los objetos que queremos compartir, tenemos que registrar los mismos en Cloud Link usando la siguiente sintaxis:

BEGIN
   DBMS_CLOUD_LINK.REGISTER(
    schema_name => 'DEMOLINK',
    schema_object  => 'EMPLEADOS',
    namespace   => 'RRHH'
    name        => 'EMPLEADOS',
    description => 'Detalle de Empleados.',
    scope       => 'MY$COMPARTMENT' );
END;
/
BEGIN
   DBMS_CLOUD_LINK.REGISTER(
    schema_name => 'DEMOLINK',
    schema_object  => 'VEMPLEADOS',
    namespace   => 'RRHH'
    name        => 'RESUMEN_EMPLEADOS',
    description => 'Resumen de Empleados.',
    scope       => 'MY$TENANCY' );
END;
/
Debemos proporcionar los siguientes datos al momento de "registrar" un objeto en Cloud Links:

  • Schema_name: Nombre del esquema del objeto que deseamos compartir.
  • Schema_obect: Nombre del objeto que deseamos compartir.
  • Namespace: Es un nombre que agrupa objetos disponibles en Cloud Links. En este caso, usaremos RRHH para referirnos a la información de Recursos Humanos a la que pertenecen tanto la tabla como la vista de empleados.
  • Name: Es el nombre que queremos utilizar para compartir el objeto, no tiene por que coincidir.
  • Description: Descripción del objeto compartido.
  • Scope: Define el alcance con el cual se comparte el objeto. Puede ser "MY$COMPARTMENT" (sólo el compartimento), "MY$TENANCY" (solo la Tenancy) o "MY$REGION" (la región) o usar directamente un OCID (identificador de Oracle Cloud).

En el ejemplo anterior, registramos la tabla Empleados para que esté disponible en el mismo compartimento que la base de datos autónoma (usando MY$COMPARTMENT) y registramos la vista (que no contiene el salario) para que esté disponible en toda la Tenancy.

Una vez registrados los objetos, puede tardar hasta diez minutos para que los mismos estén disponibles para las otras bases de datos. Podemos consultar las registraciones disponibles usando la siguiente vista:

SELECT * FROM DBA_CLOUD_LINK_REGISTRATIONS;

¿Cómo se Accede a un Cloud Link?

Definir quién puede acceder a objetos

Para poder acceder a objetos compartidos mediante Cloud Link, es necesario darle permiso al usuario deseado mediante la siguiente sintaxis:

EXEC DBMS_CLOUD_LINK_ADMIN.GRANT_READ('READLINK');
En este caso, le permitimos al usuario READLINK acceder a los Cloud Links que esten disponibles en su Compartimiento / Tenancy / Región.

Accediendo a los objetos

Una vez hemos autorizado al usuario a acceder a Cloud Links, podemos consultar los mismos usando la siguiente sintaxis:

SELECT [* | columna1, columna 2] FROM <Namespace>.<Name>@cloud$link;
En nuestro caso, la sintaxis sería:

SELECT * FROM RRHH.EMPLEADOS@cloud$link;
Lo cual devuelve lo siguiente:



Como vemos, en la base de datos donde queremos consultar el Cloud Link no debemos definir ningún Database Link ni conocer nada en particular del recurso al que queremos acceder, solo debemos saber su namespace y nombre y estar dentro del Compartimento, Tenancy o Región donde el mismo fue compartido conectados con un usuario que puede acceder a Cloud Links.

A considerar...

Hay varias cosas a considerar al utilizar Cloud Links, pero las más importantes a tener en cuenta son:
  • Los Cloud Links son de sólo lectura, por lo que si debemos modificar datos tenemos que seguir usando Database Links.
  • Si se borra y vuelve a crear una tabla que está publicada con Cloud Link, hay que volver a registrar la misma aunque se vuelva a crear con el mismo nombre.

Documentación

La documentación de Cloud Links incluye todos los pasos necesarios para utilizar los mismos.

No hay comentarios.:

Publicar un comentario