Consejo

Cómo crear un enlace a la base de datos en Oracle

Dentro de nuestra serie “¿Cómo hago eso en Oracle?” el presente artículo, elaborado en gran parte con consejos de Brian Peasland, nuestro experto en diseño y arquitectura de bases de datos Oracle, explica detalladamente

Requiere de una membresía gratis para poder ver

  • Al hacer clic aquí para convertirse en miembro usted esta aceptando los términos de la Declaración de Consentimiento.

cómo crear un enlace a bases de datos en Oracle y solucionar los problemas que pueden surgir con el mismo.

El enlace de bases de datos crea una conexión entre una base de datos local y otra remota. Entre las razones para crear este enlace están, por ejemplo, la necesidad de actualizar la base de datos remota cuando se lleva a cabo una actualización de la base de datos local. Así es como se hace:

Lo primero que necesitamos es crear un enlace desde una base de datos que apunte a la otra ubicación. El enlace se puede crear con un comando similar a éste:

CREATE DATABASE LINK other_db CONNECT TO scott IDENTIFIED BY tiger USING 'tns_alias';

Será necesario dar al enlace un nombre mejor, usar el nombre de usuario/contraseña adecuada para conectarse a la base de datos remota y configurar el archivo TNSNAMES.ORA con un alias del TNS que apunte a esa base de datos. Podemos probar el enlace con una consulta simple como la siguiente:

SELECT sysdate FROM dual@other_db;

La cláusula "@other_db" usa el enlace que hemos creado. Si la consulta devuelve la fecha, quiere decir que el enlace funciona correctamente. Una vez establecido el enlace, podemos emitir un comando para modificar los datos en la base de datos remota cuando se modifiquen en la local, o podemos usar un disparador (trigger) de bases de datos. Por ejemplo, si la aplicación modifica la base de datos local mediante la ejecución de un INSERT similar al siguiente:

INSERT INTO my_table VALUES (1,'Two');

entonces podemos codificar también otra sentencia SQL para insertar los mismos valores en el enlace de base de datos.

INSERT INTO my_table@other_db VALUES (1,'Two');

Además, podemos crear un disparador:

CREATE TRIGGER modify_remote_my_table BEFORE INSERT ON my_table BEGIN INSERT INTO my_table@other_db VALUES(:new.colA, :n

ew.colB); END; /

Podemos escribir disparadores similares para actualizar y borrar filas también. (De "Actualización de datos en una base de datos remota cuando se actualiza una base de datos local”.  

Asimismo, podemos usar un enlace de base de datos para trasladar datos de una base de datos remota a otra local. Para mover datos a través de un enlace de bases de datos es preciso crear un enlace a la base de datos remota. Podemos construir comandos SQL para insertar datos en la base de datos local, seleccionándolos desde la base de datos remota. La sentencia SQL se vería así: 

 INSERT INTO my_local_table (ColA, ColB, ColC) SELECT ColA, ColB, ColC FROM remote_table@remotedb WHERE conditions are true;

En estas situaciones el lenguaje SQL es una herramienta muy potente y flexible, inmejorable. Pero tendremos que escribir nuestras propias rutinas para mover los datos. (De "Mover datos de una base de datos remota 8i a una base de datos 9i”).

Los enlaces también puede usarse para la replicación parcial de bases de datos. Oracle tiene un producto llamado Replication Services que lleva a cabo este tipo de replicación. Pero este producto exige desembolsar fondos adicionales, por lo que quizás no pueda justificarse su costo cuando se trate de replicar tan sólo un pequeño subconjunto de la base de datos. Si éste es su caso, puede usted escribir sus propias rutinas de replicación usando disparadores y enlaces de bases de datos.

Crear enlace a la base de datos remota:  

CREATE DATABASE LINK link_name CONNECT TO username IDENTIFIED BY password USING 'tns_alias';

Crear un disparador en la tabla que llene las filas nuevamente insertadas en la tabla de la base de datos remota:

CREATE TRIGGER my_table_insert_trig BEFORE INSERT ON my_table BEGIN INSERT INTO my_table@link_name VALUES (:new.colA, :new.colB, ..., :new.colX); END; /

Tendrá usted que crear sus propios triggers similares a los de arriba para que ejecuten la replicación por usted.  (De "Configuración para una replicación parcial de la base de datos").

Puede usted usar un enlace para migrar una base de datos o copiar la información de una a otra que tenga la misma estructura. Por ejemplo, para migrar de Oracle 9i a Oracle 10g: crear una base de datos Oracle 10g en el servidor de destino y crear un enlace desde la base de datos Oracle 10g a la Oracle 9i. Ejecutar sentencias 'create table as select …' (CTAS) para crear las tablas con los datos de la base Oracle 10g. Recuerde también que tiene que establecer los índices, restricciones y la integridad referencial necesarios. (De "Migración de una base de datos 9i en Windows a 10g en SLES”).

Además, podemos crear enlaces entre una base de datos Oracle y otra distinta como SQL Server o DB2. Para ello, usaremos Heterogeneous Services de Oracle, antes conocido como Transparent Gateways.

Si encuentra errores después de crear el enlace, lea el siguiente consejo.

Configure correctamente el archivo TNSNAMES.ORA o aparecerá el error ORA-12154 (TNS: no se ha podido resolver el nombre de servicio). Una cosa que la gente no entiende respecto a los enlaces de bases de datos es que sólo buscarán el archivo TNSNAMES.ORA en $ORACLE_HOME/network/admin. Y este archivo debe residir en el servidor que ¡esté operando la base de datos! Por eso es importante configurar correctamente el archivo en esta ubicación para los enlaces. Haga siempre una prueba de los enlaces de bases de datos ejecutando la siguiente consulta:

SELECT sysdate FROM dual@remotedb;

 

SI recibe los resultados, el enlace funciona correctamente. Si no es así, repare el error correspondiente. (De "Copiar tablas de una BD a otra mediante un enlace de bases de datos").

El error ORA-12505, por otro lado, sólo significa que el ORACLE_SID en el alias de su TNS no se corresponde con ningún ORACLE_SID definido para la base de datos a la escucha. En estos casos habrá de comprobar que el alias de su TNS se corresponde con el definido en el archivo de configuración LISTENER.ORA de la escucha. (De “El enlace BD sólo funciona en una dirección").

Para revisar y solventar el error ORA-02068: el enlace de la base de datos requiere el alias de TNS que usted especificó en la cláusula USING del comando CREATE DATABASE LINK. Fuera de Oracle, asegúrese de que puede usar este alias de TNS para conectarse a la base de datos. Con SQL*Plus compruebe si puede conectarse a esta base de datos remota.

sqlplus system/password@tns_alias

Imagino que la línea de arriba le dará el mismo error. Esto significa una de dos cosas: o el alias de TNS está definido incorrectamente o la instancia realmente no funciona. Si puede usted conectarse con SQL*Plus, el enlace de bases de datos debería funcionar correctamente. (De "ORA-02068 con enlace de bases de datos").

 

Esto fue publicado por primera vez en enero 2008

Unirse a la conversación Comenta

Compartir
Comentas

    Resultados

    Contribuye a la conversacion

    Todos los campos son obligatorios. Los comentarios aparecerán en la parte inferior del artículo

    Aviso Legal: Nuestro Intercambio de Consejos es un foro para compartir asesoramiento técnico y conocimientos con sus compañeros y aprender de otros profesionales de TI . TechTarget proporciona la infraestructura para facilitar este intercambio de información. Sin embargo, no podemos garantizar la exactitud o validez del material presentado. Usted acepta que el uso del servicio de Preguntale al Experto su dependencia en las preguntas, respuestas, información u otros materiales recibidos a través de este sitio web está bajo su propio riesgo.