Índice
¿Qué es un DBLINK?
Un DBLINK (o database link) no es más que un enlace a una base de datos remota, es decir, un mecanismo que nos permite obtener información de una base de datos remota.
Requisitos previos
Por defecto los usuarios no pueden crear DBLINK. Deberemos darle los permisos de la siguiente forma:
GRANT CREATE DATABASE LINK TO <NOMBRE_USUARIO>;
Si queremos que sea un enlace público, lo tendremos que hacer de la siguiente forma:
GRANT CREATE PUBLIC DATABASE LINK TO <NOMBRE_USUARIO>;
Crear DBLINK
Para crear el DBLINK tenemos que lanzar la siguiente sentencia:
CREATE DATABASE LINK <NOMBRE_DBLINK>
CONNECT TO <USUARIO_REMOTO> IDENTIFIED BY <CONTRASEÑA>
USING <BASE_DE_DATOS_REMOTA>;
Podemos llamar al DBLINK de la forma en que queramos. Personalmente me gusta utilizar nombres simples y muy concretos. Después tendremos que dar los datos del usuario remoto y la contraseña al que vamos a enlazar y, por último, especificar la base de datos a la que vamos a conectar.
Habitualmente, tendremos que definir primero la base de datos en nuestro fichero tnsnames.ora. En el tendremos que añadir la información de la base de datos, que será algo muy parecido a ésto:
<NOMBRE_BASE_DE_DATOS> =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = <PROTOCOLO>)(HOST = <HOST_O_IP>)(PORT = <PUERTO>))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <SID>)
)
)
Para comprobar si la hemos añadido correctamente podemos realizar un tnsping al nombre de la base de datos:
tnsping <NOMBRE_BASE_DE_DATOS>
Si funciona correctamente nos debería devolver algo así:
Con esto bien configurado deberíamos ser capaces de lanzar correctamente la sentencia de creación.
Últimos pasos
Una vez tenemos creado el DBLINK podemos volver a un usuario con privilegios y revocar los permisos que le habíamos concedido previamente:
REVOKE CREATE DATABASE LINK TO <NOMBRE_USUARIO>;
En caso de ser públicos:
REVOKE CREATE PUBLIC DATABASE LINK TO <NOMBRE_USUARIO>;
Y eso es todo. Esto último no es estrictamente necesario y podríamos dejar al usuario con los privilegios de creación, pero a mi personalmente me gusta tener la base de datos los más capada posible para evitar errores.