Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Filtrar por SQL Loader

Estas en el tema de Filtrar por SQL Loader en el foro de Oracle en Foros del Web. Saludos, tengo 2 pequeñas consultas... una de ellas es referente a SQL Loader: tengo una tabla y un archivo .dat a cargar... ambos están correctos ...
  #1 (permalink)  
Antiguo 23/11/2007, 14:25
 
Fecha de Ingreso: enero-2004
Mensajes: 52
Antigüedad: 20 años, 3 meses
Puntos: 0
Filtrar por SQL Loader

Saludos,

tengo 2 pequeñas consultas... una de ellas es referente a SQL Loader:

tengo una tabla y un archivo .dat a cargar... ambos están correctos en cuanto al nro de campos y la data... la tabla tiene 3 campos como llave... cuando se carga la data, existe la probabilidad de que existan registros repetidos... estos NO deben ser descartados del ingreso a la tabla.... sino que en vez de eso, cuando la llave se repita, se deben sumar el resto de los campos...

ej:
registro en la tabla
mes | nro_abonado | nro_cliente | consumo_mes | dias_consumo
12 5554 44874 12500 12

registro en archivo .dat
mes | nro_abonado | nro_cliente | consumo_mes | dias_consumo
12 5554 44874 40000 10
12 5554 44874 22500 5

resultado que debe quedar en la tabla:
mes | nro_abonado | nro_cliente | consumo_mes | dias_consumo
12 5554 44874 75000 27


la segunda consulta... es referente al servidor que estamos levantando... buscando distribuciones linux (netamente porque necesitamos realizar cargas remotamente a través de shell unix (linux en este caso)) encontré que RedHat y United Linux están oficialmente soportados... creo que tb SuSe y Oracle Enterprise Linux...

alguna recomendación de sistema operativo para usar con Oracle 10g release 2?
__________________
I can see the bodies on the wall... all the nightmare dreams i can't recall come...
  #2 (permalink)  
Antiguo 23/11/2007, 15:08
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Filtrar por SQL Loader

Hola,

SQL*Loader no actualiza filas en la carga, trabaja a nivel de tabla. La unica opcion que se me ocurre, de momento, es generar un fichero .bad con todas las filas descartadas por clave duplicada, y generar una tabla externa que tenga como source el fichero .bad, a partir de ahi, y despues de cada carga del SQL*Loader, utilizar un UPDATE para agregar el consumo_mes a la tabla de destino.

A esto le veo varias ventajas.

1. Puedes reutilizar el fichero de control para definir la tabla externa, que estara basada en el motor del loader.
2. El proceso sera rapido, para cargar la tabla externa Oracle utiliza el mismo loader.
3. El update sera rapido porque estara basado en un indice unico, la clave primaria.
3. El fichero .bad se genera automaticamente en cada carga, por lo tanto el contenido de la tabla externa se actualiza justo despues de la carga.

Lo malo, los registros que iran al fichero .bad, y que no tengan nada que ver con la clave primaria, es decir, que los envie al .bad porque, por ejemplo, no se cumplan con la longitud de algun campo, de todos modos si la tabla externa tiene la misma logica que el fichero de control, entonces tambien seran descartados.

En cuanto a la segunda pregunta, los Linux soportados para 10g segun la documentacion son,

Red Hat Enterprise Linux AS/ES 3.0 (Update 4 or later)
Red Hat Linux 4.0
SUSE Linux Enterprise Server 9.0 with SP 2 or later
Asianux 1.0
Asianux 2.0

A lo que hay que agregarle Oracle Enterprise Linux, que en realidad es Red Hat Enterprise sin el Logo, y United Linux.
La forma de elegir uno, facil, con el que te sientas mas comodo trabajando, con cualquier de ellos obtendras soporte de Oracle en caso que lo necesites. Ademas debes considerar el soporte sobre Linux, se que Red Hat, Suse y Oracle dan buenos contratos de soporte.

Ahora si me permites, esto me llamo la atencion

Cita:
...buscando distribuciones linux (netamente porque necesitamos realizar cargas remotamente a través de shell unix (linux en este caso))
La eleccion del sistema operativo, desde el punto de vista de Oracle, es importante y es la primera vez que leo que se elige uno en funcion de una tarea de carga de datos. Asegurate bien, de que de hecho, no puedas resolver la problematica en algun otro sistema operativo con el que estes mas familiarizado. Esto ultimo es simplemente una opinion, nada mas :)

Saludos.
  #3 (permalink)  
Antiguo 23/11/2007, 21:19
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Re: Filtrar por SQL Loader

regla numero uno

no complicarte la vida haciendo lo facil dificil

usa tablas externas y ese caso lo resuelves con plsql
__________________
Blogzote.com :-) Mi blog
  #4 (permalink)  
Antiguo 24/11/2007, 06:28
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Filtrar por SQL Loader

Hola,

Buen post kikolice, es cierto, utilizando una tabla externa y procesarla para agrupar los duplicados resuelve el problema en varios pasos menos, pero hay que tener en cuenta que, no siempre simple es igual a optimo, de una manera haces un full-scan sobre toda la carga y de la otra manera haces un full-scan solo sobre los registros duplicados.

Siempre es bueno tener opciones a la hora de resolver un problema, en esta caso habra que tener en cuenta el tamaño promedio de la carga y la necesidad de realizarlo en el menor tiempo posible.

Saludos
  #5 (permalink)  
Antiguo 27/11/2007, 09:07
 
Fecha de Ingreso: enero-2004
Mensajes: 52
Antigüedad: 20 años, 3 meses
Puntos: 0
Re: Filtrar por SQL Loader

a lo que me refería con la elección de linux, es que la mayoría de los procesos en la empresa están sobre Unix, Linux o SunOS, por lo que Windows queda absolutamente descartado... además que tienen herramientas de shell mucho más poderosas (awk, grep, manejo de texto avanzado)

en cuanto al problema de filtrar, ya lo hice por medio de tablas externas... se pensaba hacer por sqlldr por el problema de que no siempre se tienen los permisos para ocupar tablas externas...
__________________
I can see the bodies on the wall... all the nightmare dreams i can't recall come...
  #6 (permalink)  
Antiguo 27/11/2007, 09:42
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Filtrar por SQL Loader

Hola,

Cita:
..además que tienen herramientas de shell mucho más poderosas (awk, grep, manejo de texto avanzado)
No podria estar mas de acuerdo, las herramientas de scripting que provee Linux/Unix son mucho mas potentes que las de Windows cuando se las compara con DOS.

Hace algun tiempo atras comence a evaluar la posibilidad de utilizar WScript, que da un nivel mas avanzado y tiene la posibilidad de instanciar objetos COM, como por ejemplo ADO, para establecer conexiones a la base y realizar cualquier tarea de mantenimiento.

Finalmente me decidi por perl, de esta manera solo tengo que codificar una sola vez, ya que es multiplataforma, ahora estoy en el proceso de migrar todos mis scripts de administracion y monitoreo.

Saludos
  #7 (permalink)  
Antiguo 07/10/2008, 15:10
 
Fecha de Ingreso: marzo-2008
Mensajes: 10
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Filtrar por SQL Loader

Hola a tod@s tengo un pequeño problemilla con una insercion utilizando SQL* LOADER

tengo un archivo .bat que carga los datos que están en un archivo .csv por medio de un archivo de control.
La primera vez que cargo el archivo, carga bien, pero el probema se presenta cuando lo voy a cargar por segunda vez, se supone que no me debería dejar, puesto que la llave primaria de mi bd no lo permite, pero no es asi. Me ingresa los datos, y aparte de eso me bloquea la tabla de la bd...no puedo realizar inserciones, ni puedo eliminar el registro...
que puedo hacer???

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:47.