Yo subiria los archivos mediante bulk insert a tablas auxiliares con un
indice clustered. Trataria de que los datos dentro de los archivos vengan
ordenados por ese indice clustered. Una vez en la base el proceso lo haria
mediante un trigger de delete y aplicando transacciones por cada bloque de
proceso, de esa manera me aseguro que se cumplen las reglas y que no me
queda nada por procesar y ademas el proceso lo hago reenganchable (si se
detiene lo pongo a correr de nuevo).

Mediante este mecanismo, no tendrias bloqueo de tablas de destino ya que el
bloqueo seria solo durante el bloque de proceso en lugar de todo el
proceso completo y es muy probable que no te bloquee la tabla.


--------------------------------
Atte.
Ing. Jose Mariano Alvarez
SQL Total Consulting



2008/7/3 PabloC <[EMAIL PROTECTED]>:

> Hacelas sin miedo
> Cualquier cosa chifla
>
> Saludos
> PabloC
>
>
> -----Mensaje original-----
> De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Diego Jancic
> Enviado el: Jueves, 03 de Julio de 2008 15:37
>  Para: pablo.canonico
> Asunto: [dbms] Proceso sin bloqueos
>
> Gracias Pablo... suena bien... despues hago un par de pruebas.
>
> Saludos a todos!
>
> 2008/7/3 PabloC <[EMAIL PROTECTED]>:
> > Diego, si el capo al que hace referencia Leonardo es Maxi o Mariano, yo
> use
> > algo que explicaron y dieron ejemplos en alguna charla y que es
> exactamente
> > lo que te comentan, funciona muy bien
> >
> > Saludos
> > PabloC
> >
> > -----Mensaje original-----
> > De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Diego Jancic
> > Enviado el: Jueves, 03 de Julio de 2008 15:16
> > Para: pablo.canonico
> > Asunto: [dbms] Proceso sin bloqueos
> >
> > Wow!... Lindo tip!..
> > Vere si es muy complicado de adaptar..
> >
> > Gracias!
> >
> > 2008/7/3 Leonardo Micheloni <[EMAIL PROTECTED]>:
> >> Hay una solución más compleja que me contó un capo ;-)
> >>
> >> Subís todo a una tabla temporal (una tabla física pero que no se use)
> >> con el bulk insert
> >>
> >> le ponés un trigger para delete (que se ejecuta antes del delete)
> >>
> >> con ese trigger hacés el insert/update/delete con una transacción, si
> >> algo falla no se hace el delete que disparó el trigger
> >>
> >> en algún momento (no sé si tenés la posiblidad de hacer ese proceso tipo
> > batch)
> >>
> >> Te tiras un delete top 1000 (sql 2005 soporta TOP en el delete) por
> >> ejemplo y se te van pasando y borrando los datos automáticamente.
> >>
> >> Seguro que quien me mostró esto te lo puede contar mejor, pero es un
> gran
> > truco.
> >>
> >> Saludos,
> >>
> >> 2008/7/3 Diego Jancic <[EMAIL PROTECTED]>:
> >>> Hola,
> >>>
> >>> Leonardo: Creo que corte la explicacion por la mitad, lo que quiero
> >>> hacer es meter todo dentro de una transaccion, y como la transaccion
> >>> bloquea la tabla que usa mientras esta activa (la transaccion) me va a
> >>> bloquear a todos los usuarios que quieran usar esta tabla.
> >>>
> >>> Hernan: Parece buena idea, a excepcion de performance. Para hacer lo
> >>> que decis deberia usar un cursor o algo asi y creo que va a ser medio
> >>> lento...
> >>> Igual se me ocurre que podria hacer lo mismo que tengo ahora pero
> >>> usando un TOP n y corriendolo varias veces (es decir, hacerlo en
> >>> batches mas pequeños)
> >>> Creo que de esa forma podria "calibrar" el tiempo que se bloquea, para
> >>> equilibrar velocidad de import versus tiempo de tabla bloqueada.
> >>>
> >>> Gracias!
> >>> Diego
> >>>
> >>> 2008/7/3 Hernán Zaldívar <[EMAIL PROTECTED]>:
> >>>> Siempre que hagas un bulk va a bloquear todo y es por proteccion... si
> > le sacas el bloqueo se pueden producir errores no muy buenos...
> >>>>
> >>>> Y si actualizas uno a uno en vez de bulk? Uno a uno va bloqueando de a
> > un registro a la vez y soltandonlo cuando lo termina de usar.. esto es
> > rapido
> >>>>
> >>>> -----Mensaje original-----
> >>>> De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Leonardo
> > Micheloni
> >>>> Enviado el: Jueves, 03 de Julio de 2008 2:13 p.m.
> >>>> Para: Hernán Zaldívar
> >>>> Asunto: [dbms] Proceso sin bloqueos
> >>>>
> >>>> Hola Diego,
> >>>>  No entiendo qué querés decir con "bloquear toda la aplicación web"
> >>>>
> >>>> On Thu, Jul 3, 2008 at 1:04 PM, Diego Jancic <[EMAIL PROTECTED]>
> wrote:
> >>>>> Hola gente!,
> >>>>> Tengo un problema (posiblemente de diseño), tengo una app web que
> >>>>> permite importar algunas cosas (usuarios, permisos, etc) desde csv.
> Ya
> >>>>> esta funcionando todo en un proceso aparte, lo que se hace es:
> >>>>> 1 - importar cada linea del csv a una tabla temporal, sin hacer mucho
> >>>>> procesamiento
> >>>>> 2 - ejecutar bulk inserts para los nuevos usuarios
> >>>>> 3 - ejecutar bulk updates para actualizar los usuarios existentes
> >>>>> 4 - ejecutar bulk inserts para los nuevos permisos
> >>>>> 5 - ejecutar bulk updates para actualizar los permisos existentes
> >>>>> 6 - ....
> >>>>>
> >>>>> Como puedo hacer para ejecutar los pasos 2, 3, 4, 5, ..., n sin
> >>>>> bloquear a toda la aplicacion web ?
> >>>>> Posiblemente tarde poco el import, pero bloquear todo durante algunos
> >>>>> segundos no es muy bueno que digamos...
> >>>>>
> >>>>> Alguna idea?
> >>>>>
> >>>>> Gracias,
> >>>>> Diego
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Leonardo Micheloni.
> >>>> Ayudando a organizar las primeras jornadas ágiles de Latinoamérica
> >>>>
> >>>> http://agiles2008.org/
> >>>>
> >>>> Blog Personal
> >>>>
> >>>> http://leomicheloni.blogspot.com/
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>
> >>
> >>
> >> --
> >> Leonardo Micheloni.
> >> Ayudando a organizar las primeras jornadas ágiles de Latinoamérica
> >>
> >> http://agiles2008.org/
> >>
> >> Blog Personal
> >>
> >> http://leomicheloni.blogspot.com/
> >>
> >>
> >
> >
> >
> >
>
>
>
>

Responder a