29
Sep

Database links

Cuando trabajas en un proyecto más o menos grande, lo normal es que tengan diferentes entornos, y esto hace que a veces el mantenimiento sea un poco engorroso. En el proyecto en el que ahora mismo estoy trabajando usamos 3 servidores (desarrollo, pruebas, producción) de base de datos oracle, cada uno de ellos en maquinas físicamente distintas. En el día a día, cuando trabajas con estos servidores es común hacer muchos cambios, consultas, insertar, borrar datos, etc.. y esto puede a llegar a ser un poco lioso, teniendo que tener varias ventanas abiertas de tu software cliente de base de datos (toad, pl/sql developer).

Hace poco descubrí una herramienta que desconocía y que puede llegar a ser muy útil, sobre todo para copias datos entre diferentes base de datos: los Database links.  ¿Qué narices es esto?. Pues muy sencillo, es un “enlace” entre dos base de datos,dicho de manera algo profana. De esta manera puedo tirar sentencias estando conectado desde una DDBB A a una DDBB B. Veamos un ejemplo :

SELECT * FROM usuarios@varma2

Siendo “varma2″ en nombre de Database link. Simplemente habrá que ponerlo inmediatamente a continuación del nombre de la tabla seguido de una arroba. Es bastante sencillo. Veamos cómo crear uno:

CREATE DATABASE LINK varma2
CONNECT TO "usuario"
IDENTIFIED BY "password"
USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =
MiHostname)(PORT = 1521)) (CONNECT_DATA = (SID = VARMA2)))'

Esta sentencia bastaría con ejecutarla desde la bbdd A, llamemosle VARMA1, desde la que deseariamos lanzar las consultas contra esta bbdd identificada con el SID = VARMA2 Podríamos crear una relación circular entre ambas simplemente creado otro enlace desde VARMA2 que apuntara a VARMA1

CREATE DATABASE LINK varma1
CONNECT TO "usuario"
IDENTIFIED BY "password"
USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =
MiHostname)(PORT = 1521)) (CONNECT_DATA = (SID = VARMA1)))'

Ya tenemos creados nuestros links entre ambas base de datos. Ahora las posiblidades son infinitas, ya que podremos realizar consultas, borrados, insercciones de una manera muy rápida entre ellas. Fijaros en esta sentencia:

INSERT INTO usuarios (select * from usuarios@varma1)

Podremos hacer migraciones de datos sencillas y muy rápidas sin tener que usar las herramientas exp/imp, mucho más potentes, pero mucho engorrosas.Por último, os preguntareis, donde consulto los links que tiene creados mi bbdd, muy fácil, la tabla de sistema que soporta esto es : “all_db_links”.

Espero que os sirva de introducción y de ayuda, al menos tanto como me ha sido útiles para mi. Los Database links tienen muchísimas más opciones y posibilidades, pero creo os ayudará mucho mejor un buen manual de Oracle.

free blog themes

3 respuestas a “Database links”

  1. Jerónimo Dice:

    Sí, muy interesante el poder hacer querys a bases de datos situadas en máquinas distintas con una sola conexión.
    ¿Sabes si se pueden hacer joins entre tablas de distintas bases de datos?

  2. Raul Cotrina Dice:

    Hola Jero. Sí, puedes hacer joins entre tablas de diferentes bases de datos, curioso, verdad?

  3. vilches Dice:

    Muy bueno Cotri, estoy suscrito a tu feed :D

Deja un comentario

free blog themes