Está en la página 1de 28

Universidad de la Amazonia Florencia - Caquet

DLINK: Propsito Requisitos Previos Sintaxis Palabras Claves y Parmetros Ejemplos

Un Database Link (DBLink) en Oracle es un tipo de objeto que permite realizar una conexin desde una base de datos a otra. Su principal objetivo es ocultar el detalle de los parmetros de conexin necesarios, facilitndonos un sencillo acceso a los recursos disponibles en otras bases de datos, independientemente de que estas se encuentren instaladas en el mismo servidor o no.

Una vez creado un enlace de base de datos, se puede utilizar para hacer referencia a las tablas y vistas de la base de datos. En las sentencias de SQL, puede hacer referencia a una tabla o vista en la base de datos distinta aadiendo @ dblink a la tabla o nombre de vista. Puede consultar una tabla o vista en la base de datos con el SELECT comunicado. Tambin puede acceder a tablas remotas y vistas usando cualquier INSERT , UPDATE , DELETE , o LOCK TABLA comunicado.

Para crear un enlace de base de datos privada, debe tener el CREATE DATABASE LINK privilegio del sistema. Para crear un enlace de base de datos pblica, debe tener el CREATE PUBLIC DATABASE LINK privilegio del sistema. Adems, debe tener el CREATE SESIN privilegio del sistema sobre la base de datos remota Oracle. Red de Oracle debe estar instalado en ambas bases de datos Oracle locales y remotos.

CREATE [ SHARED ] [ PUBLIC ] DATABASE LINK dblink [ CONNECT TO { CURRENT_USER | user IDENTIFIED BY password [ dblink_authentication ] } | dblink_authentication ] [ USING 'connect_string' ] ;

COMPARTIDO (SHARED) Especifique COMPARTIDA utilizar una nica conexin de red para crear un enlace de base de datos pblica que se puede compartir entre varios usuarios. PBLICO (PUBLIC) Especifique PBLICA para crear un enlace de base de datos pblica disponible para todos los usuarios. Si se omite esta clusula, el enlace de base de datos es privada y slo est disponible para usted.

DBLINK
Especificar el nombre completo o parcial de la base de datos de enlace. Si slo se especifica el nombre de base de datos, base de datos Oracle implcitamente aade el dominio de base de datos de la base de datos local. Si el valor de la GLOBAL_NAMES parmetro de inicializacin es VERDADERO , entonces el enlace de base de datos debe tener el mismo nombre que la base de datos al que se conecta. Si el valor de GLOBAL_NAMES es FALSO , y si se ha cambiado el nombre global de la base de datos, entonces usted puede especificar el nombre global.

Restriccin de la Creacin de vnculos de base de datos No se puede crear un enlace de base de datos en el esquema de otro usuario, y no se puede calificar dblink con el nombre de un esquema. Periodos estn permitidos en los nombres de los enlaces de la base de datos, por lo que la base de datos Oracle interpreta el nombre completo, tal como ralph.linktosales , como el nombre de un enlace de base de datos en el esquema en lugar de como un enlace de base de datos con nombre linktosales en el esquema ralph .)

CONECTAR A LA CLUSULA El CONNECT TO clusula le permite habilitar una conexin a la base de datos remota. CURRENT_USER Clusula

Especifique CURRENT_USER para crear un enlace de usuario de base de datos actual . El usuario actual debe ser un usuario global con una cuenta vlida en la base de datos remota

usuario SEALADAS POR contrasea

Especifique el nombre de usuario y contrasea que utiliza para conectarse a la base de datos remota utilizando una conexin de usuario de base de datos fija . Si se omite esta clusula, el enlace de base de datos utiliza el nombre de usuario y contrasea de cada usuario que se conecta a la base de datos. Esto se conoce como un enlace de base de datos de usuario conectado .

dblink_authentication Especifique el nombre de usuario y contrasea en la instancia de destino. Esta clusula autentica al usuario para el servidor remoto y se requiere para la seguridad. El nombre de usuario y la contrasea especificados debe ser un nombre de usuario vlido y la contrasea en la instancia remota. El nombre de usuario y la contrasea slo se utilizan para la autenticacin. No hay otras operaciones se llevan a cabo en nombre de este usuario. Debe especificar esta clusula cuando se utiliza el COMPARTIDA clusula

El uso de ' cadena de conexin Especifique el nombre del servicio de base de datos remota. Si slo se especifica el nombre de base de datos, base de datos Oracle implcitamente aade el dominio de base de datos para la cadena de conexin para crear un nombre de servicio completo. Por lo tanto, si el dominio de base de datos de la base de datos remota es diferente de la de la base de datos actual, entonces se debe especificar el nombre del servicio completo.

Definicin de un enlace de base de datos pblica: Ejemplo La siguiente declaracin define un enlace de base de datos compartida pblica llamada remota que se refiere a la base de datos especificada por el nombre del servicio remoto : CREATE PUBLIC DATABASE LINK remoto USING "remota";

Este enlace permite que el usuario de base de datos de recursos humanos en el local de la base de datos para actualizar una tabla en la remota base de datos (suponiendo que h tiene los privilegios adecuados):

Empleados update @ remoto SET salario = salario * 1,1 WHERE last_name = 'Baer';

Definicin de un enlace de base de datos fija Usuario: Ejemplo En la siguiente declaracin, el usuario hr en la remota base de datos define un enlace de base de datos fija usuario llamado locales a la hora de esquema en el local de base de datos: CREATE DATABASE LINK locales CONNECT TO HR IDENTIFIED BY hr USING 'local';

Una vez que esta conexin de base de datos es creada, hr puede consultar las tablas en el esquema horas en el local de la base de datos de esta manera: SELECT * FROM empleados @ local; Usuario hr Tambin puede utilizar las sentencias DML para modificar los datos en el local de base de datos: INSERT INTO empleados @ local (Employee_id, apellidos, correo electrnico, hire_date, job_id) VALUES (999, 'Claus', 'sclaus@oracle.com', SYSDATE, 'SH_CLERK');

UPDATE Empleo min_salary SET local = 3000 WHERE job_id = 'SH_CLERK'; DELETE FROM empleados @ local WHERE employee_id = 999;

El uso de este enlace de datos fija, el usuario h en la remota base de datos tambin puede tener acceso a tablas que pertenecen a otros usuarios en la misma base de datos. Esta afirmacin supone que el usuario hr ha SELECCIONAR privilegios en el oe.customers mesa. La declaracin se conecta al usuario horas en el local de base de datos y luego consulta el oe . clientes tabla: SELECT * FROM oe.customers @ local;

Definicin de un enlace de base de datos CURRENT_USER: Ejemplo La siguiente declaracin define un enlace de base de datos actual del usuario a la remota base de datos, usando el nombre de servicio completo como el nombre del enlace:

CREATE DATABASE LINK remote.us.oracle.com CONNECT TO CURRENT_USER USING "remota";

Supongamos que tenemos dos bases de datos: productos y usuarios. La base de datos de productos almacena el inventario de una empresa, con los detalles de los artculos que oferta y entre los que se incluye el tipo de pblico al que se dirige cada artculo en particular. Por su parte la base de datos de usuarios contiene un ficha detallada de cada uno de los usuarios registrados en una web en la que se incluye la edad, sexo y lugar de residencia. En un determinado momento, la web decide realizar un estudio para comprobar que producto dentro de los ofertados por la empresa seran del agrado de sus usuarios en funcin de sus datos personales. Para realizar tal estudio decide contrastar la informacin de las dos bases de datos, y para ello deciden utilizar un DBLink que permita consultar datos de los productos desde la base de datos de usuarios. Cuales seran los pasos a seguir?

En primer lugar, en la base de datos de productos, debera crearse un usuario nuevo, que ser el que se utilice para acceder a los datos de productos. Dicho usuario ser un usuario normal de Oracle, y debera tener como mnimo permiso para conectar e iniciar sesin en la base de datos de productos, y por supuesto para acceder a los objetos (tablas, vistas, ...) que contengan los datos que se quieren poder consultar desde la base de datos de usuarios. En un caso bastante tpico de este tipo de accesos lo que se har ser crear un role para aglutinar en l los permisos, en vez de asignrselos directamente al usuario, y crear vistas especficas para los datos que deben poder consultarse, en vez de permitir que pueda accederse directamente a toda la base de datos.

BD 1 CREATE ROLE rol; GRANT CONNECT TO rol; GRANT SELECT ON vista1 TO rol; GRANT SELECT ON vista2 TO rol; CREATE USER usuario IDENTIFIED BY clave; GRANT rol TO usuario; BD2 CREATE PUBLIC DATABASE LINK db_productos CONNECT TO usuario IDENTIFIED BY clave USING 'connect_string_productos';

SELECT * FROM vista1@db_productos; Aunque para simplificar las sentencias se puede crear un sinnimo en la base de datos de usuarios: CREATE PUBLIC SYNONYM vista1_productos FOR vista1@db_productos; De forma que pueda escribirse: SELECT * FROM vista1_productos;

Eliminar conexin DROP DATABASE LINK <link_name>; Eliminar conexin publica PUBLIC DATABASE LINK <link_name>;

CREATE DATABASE LINK PEPOTE_DBLINK CONNECT TO pepe IDENTIFIED BY pepote USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = MiHostname)(PORT = 1521)) (CONNECT_DATA = (SID = Oracle2))) SELECT id,name FROM Usuarios@Pepote_dblink;