martes, 25 de noviembre de 2008

Load desde windows

Caso de la vida real

Problema.-
Necesitamos cargar unos 70 mil registros en promedio, pero hacer un bucle insertando esa cantidad de registros en un poco lento. Lo ideal es igualar al tradicional LOAD FROM [archivo] INSERT INTO [Tabla] pero es imposible.

Solucion tomada (seguro que hay otras pero esta nos sirvio)
Herramientas
  1. Desde un programa windows podemos ejecutar un procedimiento almacenado :D
  2. Desde un procedimiento almacenado NO se puede ejecutar el LOAD :(
  3. Desde un procedimiento almacenado Se puede correr comandos del sistema :D
  4. Tanto el ISQL como es DBACCESS puedes ejecutar instrucciones sql que se encuentren en un archivo :D
Entonces....

se creo un procedimiento + o - asi

create procedure CargarDatos()

SYSTEM ' dbaccess [base de datos] [Archivo.sql]

end procedure

y el archivo Datos.sql contiene

load from datos.unl insert into [tabla]

SEGURIDAD
mmmmmmmm Pues Sí Estamos dejando un agujero muy grande de seguridad, imaginense si en vez de load cambian el contenido del archivo sql y ponen un drop database uuuuuyyyyyyy eso si doleria.

pues tiene que tener mucho cuidado y quitar los permisos de escritura en ese archivo y dejarlo en solo lectura

chmod 444 Datos.sql

que nadie lo modifique ni siquiera el dueño también serviría la seguridad de base de datos para q solo el usuario que ejecute este proc tenga permisos solo en la tabla afectada.

salu2







No hay comentarios: