none
Extraer información desde Oracle usando un inner join con una tabla en SQL Server RRS feed

  • Pregunta

  • Hola

    Actualmente estoy migrando un proceso que se ejecuta en access a SSIS. Tengo un GRAN problema con una de las consultas que allí se encuentra. La consulta involucra un inner join entre una tabla de una base de datos en Oracle y una tabla localizada en un servidor SQL. La tabla de Oracle posee 3 campos: ID, Car_ID, Value. Su llave primaria es compuesta: (ID, Car_ID).  De manera esquematica el inner join es el siguiente:

    SELECT
    O.ID, O.CAR_ID, O.VALUE
    FROM SQL_TABLE S INNER JOIN ORACLE_TABLE O ON 
    S.ID = O.ID

    La table de SQL tiene cerca de 850 registros, pero la tabla de Oracle tiene mas de 700 millones de registros. Como se puede ver el campo de join es el valor de la columna ID, que es parte de la clave primaria de la tabla de Oracle.

    Intenté entonces dos enfoques para resolver ésta consulta, aquellos en la imagen. El primero es simplemente inviable; la cantidad de datos desde Oracle y la necesidad de organizarlos posteriormente resultan ser imposibles. Luego intenté la implementación de un Lookup que me entregara los valores buscados. El problema es que este componente SÓLO me entrega la primera coincidencia que encuentra por el campo ID. Pero éste está asociado a varios valores de la columna CAR_ID que yo necesito, por lo que tuve que descartarlo.

    La pregunta es, que otro tipo de aproximación puedo usar para poder darle respuesta a esta consulta de una manera adecuada?. 

    Nota: Migrar la tabla desde Oracla a una Staging Area está fuera de discusión (observación del DBA). Además, él sólo tiene autoridad sobre la base de datos de SQL, aquella de ORACLE es administrada por otra área de la empresa y no existe la menor posibilidad de negociar algo con ellos.

    Agradezco enormemente sus respuestas u observaciones. Si necesitan más información para aclara mi inquietud por favor no duden en hacerlo.
    • Editado dj2907 miércoles, 20 de mayo de 2015 18:39
    miércoles, 20 de mayo de 2015 17:57

Respuestas

Todas las respuestas

  • En oracle pidele al dba que cree una tabla identica o con un servidor vinculado a la de sql y crea una vista en oracle que te entrege los resultados, así haras una carga mucho menor del lado de SSIS.
    miércoles, 20 de mayo de 2015 18:10
  • Estimado, te sugiero que puedas crear un Linked-Server para poder obtner los datos de oracle, te dejo una url donde explica como se puede crear un Linked-Server

    http://www.codeproject.com/Articles/35943/How-to-Config-Linked-Servers-in-a-Minute

    Saludos,


    Ian Rubilar Medina.

    miércoles, 27 de mayo de 2015 20:38
  • Se que es tremendamente tarde para esto, pero bueno. Lo que falla es que tienes que hacer un sort, puedes evitarlo si vienen los datos ordenados desde el origen. Adicionalmente podrias hacer la lectura completa de Oracle y el lookup a la de SQL Server.

    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    miércoles, 15 de julio de 2015 10:53
    Moderador