Usando Database Links en Oracle

Esta mañana necesitaba hacer una migracion de datos de una serie de tablas desde una base de datos Oracle a otra base de datos. Podria haber pensado en hacer un export/import de la base de datos. Pero es que realmente no necesitaba copiar todo el esquema de la base de datos, ni perder demasiado tiempo, simplemente queria copiar el contenido de una serie de tablas origen desde la base de datos inicial a las mismas tablas destino de la base de datos destino.
Mi solucion ha sido usar Database Links.

¿Que es un database link?

Voy a intentar explicarlo de manera muy sencilla aunque no sea la mas correcta. Un Database Link es como un puntero desde una base de datos hacia otra base de datos remota. ¿Y que nos va a permitir eso?. Pues acceder a las tablas de la base de datos remota como si fueran tablas de nuestra misma base de datos.

Por ejemplo tengo la Tabla1 en mi Base de datos Oracle1 y quiero hacer un SELECT sobre la Tabla2 de la Base de datos Oracle2. Si creo en Oracle1 un database link llamado por ejemplo “Oracle2Dblink” esta consulta seria tan simple como ejecutar:

SELECT * FROM Tabla2@Oracle2Dblink

¿Simple, no?. Basta con concatenar al identificador de la tabla “@DatabaseLink_a_usar”.
Y desde nuestra base de datos Oracle1, podriamos estar consultando los datos de la tabla Tabla2 de la base de datos remota Oracle2.

Y si hacemos:

INSERT INTO Tabla1 (select * from Tabla2@Oracle2Dblink where id=condicion)

Pues que insertaria en Tabla1, todos los datos de Tabla2 cuyo id fuera igual a condicion. ¿vas pillando la idea?. Los databaseLink pueden ser muy utiles.

Veamos como crearlo.
Si queremos crear un database link podemos ejecutar:

CREATE DATABASE LINK nombre_del_dblink
CONNECT TO usuario
IDENTIFIED BY password
USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =
hostname)(PORT = 1521)) (CONNECT_DATA = (SID = sidname)))'

Un ejemplo:

CREATE DATABASE LINK PEPOTE_DBLINK
CONNECT TO pepe
IDENTIFIED BY pepote
USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =
MiHostname)(PORT = 1521)) (CONNECT_DATA = (SID = Oracle2)))'

Creariamos entonces un dblink llamado “PEPOTE_DBLINK” que nos permite conectar desde la base de datos actual a una base de datos remota Oracle, situada en el host=”MiHostname” y con el SID=”Oracle2″

Ahora si quisieramos usar el dblink ejecutamos la SELECT concatenando al identificador de la tabla “@PEPOTE_DBLINK”:

SELECT id,name FROM Usuarios@Pepote_dblink;

El Dblink incluso te permite copiar campos BLOB de tablas si estas mantienen la misma estructura. Si acaso las tablas no son iguales, siempre puedes crear una tabla temporal que mantenga el esquema de la tabla inicial y despues la copie en el destino.

Si de todas formas usar DbLinks te parece complicado, tambien puedes emplear plugins como DBCopy (ver imagen al principio del articulo) que permiten en el IDE Eclipse, copiar tablas entre bases de datos distintas.

22 Responses to “Usando Database Links en Oracle”


  1. 1 tomas septiembre 18, 2008 en 3:03 pm

    sabes si tiene beneficios con respecto a la performance?
    Es mejor usar DBLinks antes que conectarse directamente a la base.

  2. 2 giroco septiembre 23, 2008 en 12:27 am

    muy bueno el articulo, muy claras tus explicaciones solo me queda una duda como hago integridad referencial entre tablas que estan en diferentes equipos? me serviria mucho una respuesta

  3. 3 Eisenheim enero 15, 2009 en 3:00 pm

    Eres un dios!, muy buen articulo. Sintaxis y ejemplos es la mejor manera de aprender SQL y de aplicar respuestas rápidas.

    Mis respetos, y estare por aqui viendo haber que mas pones en tu blog. Gracias y hechale ganas xD.

    Con lo de la integridad referencial, no se con que comandos se pueda realizar eso, pero si es con puro comando SQL y estos dblinks sera consa de un ratito.

  4. 4 HASAN marzo 20, 2009 en 9:10 pm

    como pueso solucionar problema de timeout cuando realizo un dblink a una base de datos a la cual estoy conectado mediante una vpn

    • 5 ljcollazos mayo 27, 2009 en 11:56 am

      Lo he probado con BLOB y no funciona, me da este error al hacer un select de una tabla que tiene un campo BLOB:

      ORA-22992
      cannot use LOB locators selected from remote tables

      Como lo has podido hacer tu?

      • 6 superpiwi junio 27, 2010 en 10:51 am

        No he usado BLOBs con Dblinks, unicamente con PLSQL y creando tablas temporales.

        Por lo que te comenta no se puede:

        ORA-22992
        cannot use LOB locators selected from remote tables

  5. 7 z3ry junio 27, 2010 en 7:25 am

    hey tengo una pregunta, como obtengo el sid?? y si me podrias ayudar con otro ejemplito como hacer el dblink ya que necesito copiar algunas columnas de una tabla a otra pero con acceso remoto gracias de antemano

    • 8 superpiwi junio 27, 2010 en 10:56 am

      Hay una variable de entorno llamada ORACLE_SID puede que sea lo que buscas, se cargara en funcion del profile del usuario.

      Para copiar algunas columnas de una tabla a otra, usa PLSQL o alguna sentencia del estilo:

      INSERT into TABLA1(campo1,campo2,…,campoN) SELECT campo1,campo2,..,campoN from TABLA2 where condiciones;

      o lo que es lo mismo un INSERT con SELECT
      con Google una busqueda por “INSERT INTO with SELECT” te dara mas enlaces.

  6. 9 lopez agosto 4, 2010 en 2:22 pm

    Quisiera saber por que no puedo ejecutar un insert que carga datos de una base local a un servidor usando estos tipos de links en oracle form buiider.

    Agradesería la respuesta.

  7. 11 Ramon enero 19, 2011 en 7:38 pm

    Es importante destacar que en la sentencia del ejemplo:

    CREATE DATABASE LINK PEPOTE_DBLINK
    CONNECT TO pepe
    IDENTIFIED BY pepote
    USING ‘(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST =
    MiHostname)(PORT = 1521)) (CONNECT_DATA = (SID = Oracle2)))’

    ‘pepe’ es el nombre de usuario que se creo en la base de datos Oracle2 ‘pepote’ su clave. Por qué es importante destacarlo? por que de repente ese usuario tiene privilegios especificos para realizar una determinada tarea, ejemplo quizés solo pueda hacer select. En ese caso no podrías añadir registros en ninguna tabla de esa base de datos Oracle2, entre otras cosas.

  8. 12 Roman Hansen mayo 16, 2011 en 1:25 pm

    Muy bueno tu artículo, y con ejemplos muy útiles y concretos.

    Necesitamos mas de gente con la dedicación por ayudar y enseñar como tu!

  9. 13 LENIN mayo 17, 2011 en 3:08 am

    Muy bien explicado el artículo, pero despues de correr el sql del ejemplo con mi información, me aparece en la consola de administración de oracle, y cuando le doy click en probar, me dice “El enlace de base de datos no está activo”, tendras idea de que estoy omitiendo? de antemano gracias.

  10. 14 Word Press junio 12, 2011 en 11:19 pm

    Muy bien Felicidades !

    Si sabes explicar algo que es un poco complicado ,

    y no solo eso sino como hacerlo .

  11. 15 Fernanfo julio 19, 2011 en 1:55 pm

    Amigo, buena explicacion, yo despues de mucho luchar consegui un dblink con entre oracle y postgres, pero ahora tengo otro problema:

    no quiero hacer un select * from “c_invoice”@dblink
    quiero hacer un select client_ID, documentno, total from “c_invoice”@dblink y me da como respuesta que no existen dichas columnas.

    Sabes de algun formato especial para traer columnas especificas?.

    Ya probe con el formato que indicas.

    Exelente manual.
    Saludos
    Fernando
    Chile.

  12. 16 Valeska enero 5, 2012 en 5:15 pm

    Muchísimas Gracias por este articulo, super bien explicado. Ojala todo fuera asi.

  13. 17 felipe junio 28, 2012 en 8:17 pm

    me podrias pasar el tuto para crear en link entre oracle y postgres femano

  14. 18 Giancarlo octubre 12, 2012 en 9:22 pm

    Si muy bueno no quedan dudas!! Gracias por la Info.

  15. 19 Victor Martinez octubre 28, 2012 en 3:28 pm

    mUCHAS GRACIAS, YA ENTENDÍ LO DEL DBLINK…!

  16. 20 Care Narlga septiembre 12, 2013 en 8:08 pm

    Bruto, tapado, eso tan facil y usted no sabia eso Victor Martinez

  17. 21 Alex junio 8, 2014 en 6:02 am

    pero si las computadoras están en red? el “myhostname” lo cambio por mi dirección ip o la dirección ip de la otra computadora?


  1. 1 DBLinks en Oracle « Lyrux Corp® Trackback en octubre 1, 2008 en 5:59 am

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s





The next version of Ubuntu is coming soon


¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map
septiembre 2008
L M X J V S D
« ago   oct »
1234567
891011121314
15161718192021
22232425262728
2930  

Blog Stats

  • 26,803,120 hits

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.042 seguidores

%d personas les gusta esto: