• Crear un enlace a base de datos en Oracle Database

    Si queremos realizar consultas desde un servidor de bases de datos hacia otro, es necesario que dispongamos de un enlace de base de datos. Oracle permite realizar estos enlaces desde el servidor local siempre que se dispongan de los siguientes privilegios:

    • create database link
    • create public database link

    Si el enlace se va a relizar desde un servidor remoto, los privilegios necesarios serán:

    • create session

    ARCHIVO DE CONEXIONES

    Un enlace debe apuntar a una conexión disponible. Las conexiones disponibles se encuentran en el archivo tnsnames.ora. Dependiendo del sistema operativo y del tipo de instalación de Oracle Database, este archivo puede encontrarse en diferentes ubicaciones.

    Para Oracle Database XE, en Windows

    Lo encontramos en:

    c:\app\usuario\product\21c\dbhomeXE\network\admin

    Para Oracle Database XE, en Debian

    Lo encontramos en:

    /opt/oracle/product/21c/dbhomeXE/network/admin

    Si no tenemos ningún archivo tnsnames.ora en esa carpeta es porque todavía no hemos creado ninguna conexión. Dentro de la carpeta «samples» de esa misma ubicación encontraremos un archivo tnsnames.ora de ejemplo. Su contenido puede ser algo así;

    conexOracle2 = using (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.192)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=XE)))
    

    CREAR EL ENLACE

    Teniendo la conexión correcta dentro del archivo .ora y, al mismo tiempo éste ubicado en la carpeta correcta, podemos proceder con la creación del enlace. Para ello, previamente debemos saber cual es el usuario y contraseña del sistema remoto con el que nos conectaremos. Ese usuario, lógicamente, deberá tener los permisos correctos para interactuar con los recursos a los que queramos acceder. Si ya disponemos del usuario y contraseña, creamos en enlace con el usuario admin local ejecutando lo siguiente:

    create public database link enlOracle2
      connect to NombreDeUsuario identified by "Contraseña"
      using 'conexOracle2';

    Si no queremos que el enlace sea público, es decir, que lo puedan usar otros usuarios de la base de datos (además del admin), deberemos loguearnos con el usuario con el que queramos crear el enlace y crearlo de la siguiente forma:

    create database link enlOracle2
      connect to NombreDeUsuario identified by "Contraseña"
      using 'conexOracle2';

    Eso si, el usuario no admin, para crear ese enlace dentro de su propia sesión, debe tener permisos de este tipo:

    grant create database link to NombreDeUsuario;

    CREAR ENLACE SIN ARCHIVO .ORA

    Es posible crear un enlace sin disponer del archivo .ora. Para ello debemos declarar la conexión en la misma sentencia en la que declaramos en enlace, de esta forma:

    create database link enlOracle2
      connect to NombreDeUsuario identified by "Contraseña"
      using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.192)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=XE)))';

    El enlace de arriba se crea específicamente para el sid XE. Si queremos crear un enlace para un servicio específico, podemos usar:

    create database link enlOracle2
      connect to NombreDeUsuario identified by "Contraseña"
      using '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.192)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)))';

    CONSULTAR LOS ENLACES DISPONIBLES

    Para comprobar que enlaces hay creados en el sistema podemos utilizar las vistas user_db_links, all_db_links y dba_db_links. Lo hacemos de la siguiente manera:

    select * from user_db_links;

    o

    select * from all_db_links;

    o

    select * from dba_db_links;

    COMPROBAR SI EL ENLACE FUNCIONA

    Para comprobar si los enlaces que hemos creado funcionan correctamente, podemos ejecutar una consulta desde el servidor local hacia el servidor remoto. Esto lo hacemos indicando una arroba seguida del nombre del enlace. Por ejemplo:

    select * from tablaremota@enlOracle2;

    Si nos salen los nombres de las columnas (o atributos) pero no nos sale ningún registro, y estamos completamente seguros de que la tabla tiene registros, probablemente sea porque el usuario local con el que estamos ejecutando el enlace no tenga permisos de crear sesión. Lo resolvemos ejecutando como sysdba:

    grant create session to NombreDeUsuario;

     


    Deja una respuesta