Muchas veces en las aplicaciones de negocio es necesario obtener datos que no necesariamente están en las mismas bases de datos o en los mismos servidores. Para poder suplir esta necesidad Oracle tiene un objeto llamado “DATABASE LINK” o “DBLINK”. Mediante a este objeto es posible realizar una conección entre dos bases de datos, las cuales NO necesariamente pueden ser Oracle - Oracle, sin que pueden ser desde Oracle a diferentes motores de bases de datos.-
Ahora bien, hay que tener una serie de consideraciones al momento de crear un DBLINK:
- Tener claro si el DBLINK a generar será Publico o sólo podrá ser usado bajo un esquema determinado
- Utilizar una cuenta con los privilegios que sólo necesita el DBLINK y NO el user y pass del esquema, ya que no tenemos control de quien estará utilizando el DBLINK en la otra base de datos
La siguiente figura es un template que en lo personal utilzo para crear DBLINK, ya que ahi uno incluye toda la información del DBLINK que se va a crear

Mediante el template anterior es posible definir:
- Nombre del DBLINK
- Nombre del servidor (ORIGEN y DESTINO)
- IP del Servidor (ORIGEN y DESTINO)
- Nombre de Base de Datos (ORIGEN y DESTINO)
- Esquema de Base de Datos (ORIGEN y DESTINO)
- Observacion (indica si es PUBLICO o Privado [Sólo a un esquema])
- Usuario y Password que se utiliza
- Objetos que requieren ser accesados
- Permisos sobre estos objetos
- Script de creación del DBLINK
- Script de creación del usuario
Una vez ya se tiene toda la información establecida, se procede a crear el DATABASE LINK
1.- Creación de la cuenta de usuario del DBLINK, Esto se debe realizar desde la instancia DESTINO
CREATE USER USER_DBLINK IDENTIFIED BY PASS_DBLINK
DEFAULT TABLESPACE USER_DBLINK
TEMPORARY TABLESPACE TEMPORAL
QUOTA UNLIMITED ON USER_DBLINK
PROFILE DEFAULT
ACCOUNT UNLOCK
/
GRANT "CONNECT" TO USER_DBLINK
/
ALTER USER USER_DBLINK DEFAULT ROLE "CONNECT"
/
NOTA IMPORTANTE 1: La cuenta de usuario sólo debe tener el rol de CONNECT para establecer la conección a través del DBLINK, NO es recomendable otorgar otro rol.-
2.- Una vez creado el usuario se deben otorgar los privilegios que tendrá el DBLINK. Importante el DBLINK por si sólo no tiene privilegios sobre los objetos de la base DESTINO, sino que es la cuenta de base de datos que posee estos permisos.-
GRANT SELECT ESQUEMA.OBJETOS TO USER_DBLINK
/
GRANT INSERT ESQUEMA.OBJETOS TO USER_DBLINK
/
GRANT DELETE ESQUEMA.OBJETOS TO USER_DBLINK
/
GRANT UPDATE ESQUEMA.OBJETOS TO USER_DBLINK
/
3.- Ahora es necesario crear el DBLINK. La creación del script del DBLINK debe ser realizada desde la base ORIGEN.-
CREATE PUBLIC DATABASE NOMBRE:DBLINK
CONNECT TO USER_DBLINK
IDENTIFIED BY PASS_DBLINK
USING 'NOMBRE_TNSNAMES'
NOTA IMPORTANTE 2: Al comienzo del script se define si este es PUBLICO o PRIVADO, en caso de ser privado la opcion PUBLIC no se incluye en el script y el DBLINK sólo será utilizado por el esquema con el cual el DBLINK se creó.-
NOTA IMPORTANTE 3: En la linea USING ‘NOMBRE_TNSNAMES’ se debe verificar el string de conección desde el servidor ORIGEN al servidor DESTINO, se deben validar los accesos, y realizar una prueba de conección
Este post aún NO está terminado







Juan Jose Puga Germany
September 13, 2010 | 1:07 am hMariano… aca hay una nota de como conectar un oracle y un mysql…
http://www.blogzote.com/2007/03/13/oracle-heterogeneous-services/
Aca el concepto de Oracle…
http://www.oracle.com/technetwork/indexes/products/index.html
Saludos
Juan Jose Puga Germany
September 13, 2010 | 1:03 am hNicolas… la verdad administrar 1 bd o 100 según mi experiencia hay diferencias… pero creo que en tu caso son tablas dentro de una base de datos … tus bd en q motor estan? Oracle, sybase, sql server?… Quizas te conviene dejar todas las tablas en una misma BD y luego hacer consultas entre varias tablas…. sino puedes usar DBLINK…
saludos
Arturo Iniestra
September 7, 2010 | 2:45 pm hHola, buena tarde:
Una pregunta, cómo puedo saber mediante una consulta, cual es el servidor Origen y Destino, así como las bases a las cuales puedo acceder mediante un DBLink ya creado???
Gracias por tu ayuda.
bases empresas
September 6, 2010 | 2:34 am hBuenos dias, te queria consultar si es muy dificil manejar las bases de datos en sql?, ya que tengo muchas bases de datos y las quiero juntar en un archivo para poderlas filtrar en forma facil.
Saludos.
Nicolas.
huep1lman
December 10, 2009 | 11:05 am hJuanjo, hola.. consulta. en sql server 2000, o 2005, es posible otorgar permisos de ejecucion sobre un procedimiento almacenado desde otra base de datos, por ej.. se que esto no resulta pero para explicarme mejor:
GRANT Execute BaseDeDatosDestino..Procedimiento on rolUsuario
lo que necesito es algo parecido, pero nose si es posible, y como hacerlo, necesito asignar permisos sobre cualquier objeto de una base de datos pero sin la necesidad de situarme en ella, esto no lo hare mediante sql por lo que no puedo utilizar “USE BaseDeDatos”.
Vale juanjinio.. ojala me pueda ayudar.. desde ya gracias..
Juan Jose Puga Germany
October 7, 2009 | 11:57 am hMariano, entiendo que si se pueden hacer dblink entre diferentes motores de BD, pero ahi tienes que uscar conectores especificos que no vienen con las versiones normales de BD, para eso deberías revisar en el sitio de Mysql, posiblemente ahi hay información de como hacerlo.
Saludos
Diego
August 18, 2009 | 4:34 pm hTe quedo bonito el template . . .
Mariano
January 30, 2009 | 2:18 pm hHola te tengo una pregunta ,, se pueden crear dblink en mysql, es que en mi caso de una bd en mysql quiero obtener información de una en oracle…
gracias…