Sie sind auf Seite 1von 5

http://daniel.

ec/2007/12/06/el-caso-de-las-fuentes-heterogeneas/

El caso de las Fuentes Heterogneas


.Alguna vez han necesitado pasar informacin entre dos DBMS? En mi trabajo tengo una base de datos SQL Server 2005 y otra Oracle 8i (ambas en versin Estndar). Para pasar informacin de una a otra usamos archivos como intermediarios. No es divertido ni fcil programar para eso, las validaciones son ridculamente complicadas en Oracle Developer, aunque el PL/SQL deja escribir cdigo bellamente estructurado y con buen manejo de excepciones, es largo validarlas todas Entonces se me ocurri probar los vnculos de base de datos del SQL Server, que supuestamente son sencillos. Como en realidad no lo conozco ms que lo suficiente de este, segu alegremente los pasos del asistente (e instale las herramientas de cliente del Oracle 9i, ese es mi dominio). Muy simple, se configura la distribucin de datos, luego se crea el vnculo. Qu? Es directo contra mi base Oracle. Fantstico. Luego al hacer clic en Finalizar, acabo mi alegra. Despus de hacer todo, despus de haber configurado todo, me advirti que solo la versin Empresarial del SQL Server permite acceder a bases de Datos Oracle. Un fiasco total. (Ver ac la solucin) Con esa decepcin decid buscar una solucin del lado de mi base Oracle, quizs deb hacerlo desde el inicio pero ca en la tentacin de los asistentes de SiguienteSiguiente-Finalizar de Microsoft. En Oracle la solucin ms barata se llama Fuentes Heterogneas. Esta no solo permite acceder datos de SQL Server sino de cualquier base de datos que tenga ODBC (muchas, desde Access). Pero en Oracle NADA INTERESANTE es Siguiente-Siguiente-Finalizar (Salvo la instalacin y la creacin de una instancia). No hay mucha documentacin en lnea y no saba dnde quedaron los libros (adems eran de la versin 7 en UNIX). As que usando la instancia de pruebas me lance al ruedo. Me tomo algunas horas, sobre todo porque mi estado anmico no es del todo adecuado para algo as. Aqu les detallo los pasos, para hacer lo que yo hice, para que se ayuden si necesitan hacerlo. Nota: Luego de ms pruebas y practicas he refinado este tutorial, ahora es algo mas simple.

Que necesitas
1. Una Maquina Windows (se puede usar otro SO, mientras tenga los controladores ODBC, que es complicado) 2. El Disco Instalador de la base por si las dudas. 3. Los Controladores ODBC se la base que quieres acceder. 4. Una instancia de Oracle Funcionando. 5. Golosinas. 6. Vida social, si ests leyendo esto o peor escribindolo, ese un mal sntoma.

Servidor 1, de la Fuente Heterognea (Windows + Oracle + ODBC)


Configurar el DSN
En el Panel de Control, Herramientas Administrativas, Orgenes de Datos ODBC, configuramos un DSN de sistema. No importa el sabor, solo importa configurarlo bien y probarlo. Tambin he notado que es mejor seleccionar una Base de Datos predeterminada, para este ejemplo le puse el nombre DSN_LINK. Adems para SQL Server lo mejor es crear o usar autenticacin del servidor y no la de Windows (A menos que tu servidor Oracle este bien configurado para esto y tu dominio Windows NT tambin lo est) En esta mquina debe estar instalada una instancia de la base de datos, no basta con las herramientas de cliente. Si no conocen como esta su licenciamiento es mejor que sea la misma mquina del servidor principal (Que para poder usar ODBC mejor si es tiene que ser Windows MUAHAHAHAHAHAHA)

Preparar la Instancia
Como primer paso recomiendo desactivar los nombres globales para hacer la vida ms placentera: alter system set global_names=false; Y se deben crear los objetos para el vnculo heterogneo, afortunadamente podemos ejecutar este archivo (debe hacerse como el usuario internal): ORACLE_HOME\rdbms\admin\caths.sql ORACLE_HOME se refiere al directorio en donde est instalada la base, obvio no?

Preparar el nuevo Listener


Ahora se sebe preparar el nuevo servicio de escucha para la funciona de fuente heterognea, editando el archivo ORACLE_HOME\network\ADMIN\LISTENER.ORA se le aade algo as: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = [Nombre o IP del SERVIDOR])(PORT = [Puerto])) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (SID_NAME=FHLISTENER) (ORACLE_HOME = [SU DIRECTORIO DE ORACLE_HOME AQUI, TIPO C:\ORACLE]) (PROGRAM=hsodbc)

) ) Deben notar algunas cosas, primero el puesto, la base Oracle normalmente usa el 1521, adems si hacemos esto en el mismo servidor de nuestra base solo hay que aadir el servicio, as en SID_LIST: (SID_DESC= (SID_NAME=FHLISTENER) (ORACLE_HOME = [SU DIRECTORIO DE ORACLE_HOME AQUI, TIPO C:\ORACLE]) (PROGRAM=hsodbc) ) Tambin debe notarse que es importante configurar el ORACLE_HOME. Guardamos los cambios.

Configurar la fuente Heterognea


El servicio se configura creando el archivo initFHLISTENER.ora (init + el nombre del listener) en el directorio ORACLE_HOME\hs\admin. HS_FDS_CONNECT_INFO guarda el nombre del DSN, HS_DB_NAME guarda el nombre de la base de datos predeterminada, general un archivo bsico solo tendra estas lneas: HS_FDS_CONNECT_INFO = DSN_LINK HS_FDS_TRACE_LEVEL = off HS_DB_NAME= [BASE DE DATOS PREDETERMINADA] Me dio mejores resultados al poner un nombre para la base de datos predeterminada. Con esto listo reiniciamos el servicio de escucha

Servidor 2, de la Base de Datos Oracle (Cualquier SO + Oracle)


Configurar el TNS en el servidor Oracle
Antes a que no sabas que TNS es acrnimo de Transparent Network Substrate, y uno configurando algo con un nombre tan geek interesante. El archivo de configuracin de los TNS lo encuentras en: ORACLE_HOME\network\ADMIN\ TNSNAMES.ORA NOMBREDELTNS = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=[Nombre o IP del servidor DSN])(PORT=[EL puerto del servicio, eg. 1521])) (CONNECT_DATA=(SID=FHLISTENER)) (HS=OK) ) Unas aclaraciones. Ntese el HS=OK para este TSN en particular, adicionalmente este servidor no necesariamente tienen que estar una maquina Windows, ya que usa el TSN nativo de Oracle para conectarse.

Crear el Vnculo
En el servidor Oracle todo es tan simple como usar esta instruccin para conectar todo: CREATE DATABASE LINK sql_link CONNECT TO "USUARIO SQL SERVER" IDENTIFIED BY "CONTASEA" USING ' NOMBREDELTNS'; Es importante notar el nombre de usuario y la contrasea. Esto suponiendo que uso la autenticacin de SQL Server. Adems NO RECOMIENDO USAR EL USUARIO SA, aunque este viene desactivado en SQL Server 2005. Es mejor crear un usuario para esto. Si quieren librarse del vnculo pueden usar: DROP DATABASE LINK sql_link Un ejemplo de consulta sencilla: SELECT * FROM tabla@sql_link Hay que recordar que los nombres de las tablas no existen en nuestra base Oracle, si queremos seleccionar ciertas columnas, o usar una clausula Where se deben poner los nombres entre comillas: SELECT "columna1", "columna2" FROM tabla@sql_link where "columna1" = condicin Incluso la vida puede ser mucho mas simple usando CREATE SYNONYM.

Notas para usar con Oracle Developer 6i


Oracle Developer est diseado para acceder a los datos de una base Oracle, no de un vinculo de fuentes heterogneas, no a menos que se lo engae Primero se crea una vista, esto hace que el Bloque de Datos en Developer sea de solo lectura, pero lo dems se puede compensar en Triggers, adems mi objetivo inicial era este. Probado en Oracle 8i CREATE OR REPLACE VIEW vista ("ROWID", columna1, columna2) AS SELECT ROWNUM, "columna1", "columna2" FROM tabla@sql_link; Probado en Oracle 10g CREATE OR REPLACE VIEW vista AS SELECT ROWNUM as "ROWID", "columna1" columna1, "columna2" columna2 FROM tabla@sql_link; No olvidar los permisos (en modo absoluto y no recomendable para todos): GRANT ALL ON vista TO PUBLIC; Esto es porque Developer necesita la columna ROWID, pero la fuente heterognea no la proporciona. En ese momento se me ocurri crear una vista de la fuente. Funciona porque tomo la columna ROWNUM y la renombro como ROWID en la

vista, el truco es poner ROWID entre comillas en Oracle 8i y usar los alias en el select en Oracle 10g. Con eso puedo ver los datos de SQL Server directamente en Oracle Forms, procesarlos, realizar importaciones y incluso usar el Reports contra SQL Server.

Nota de Descarga
Como todo, este post se proporciona como referencia, tal cual como es. No me culpen si rompen algn servidor, aunque si lo hacen quizs pueda ayudar

2 comments to El caso de las Fuentes Heterogneas

EDUARDO DIEDRICH
Viernes, febrero 22, 2008 at 18:15

Me pareci muy interesante tu artculo El caso de las Fuentes Heterogneas, pero me quedan dudas cuando te tienes que conectar a un DSN que apunta a una BD access o un archivo DBF de DBASE, en tales casos como no son servidores de BD propiamente dichos es imposible asignarles un puerto y un Host, por lo menos eso es lo que creo. Si me puedes ayudar con esa cuestin te lo agradecera. Saludos Eduardo

daniel
Jueves, febrero 28, 2008 at 23:48

Asi es, el puerto y el host son los del servicio de escucha de las fuentes heterogneas de Oracle. Este servicio accede a los datos por medio de ODBC. Afortunadamente la existen drivers ODBC para la gran mayora de bases de datos.

Das könnte Ihnen auch gefallen