Diario de SQL Server

Eliminar muchos registros mientras la tabla sigue disponible

Escrito por qwalgrande 13-11-2009 en General. Comentarios (0)

Es una práctica habitual, más propia de principios de año que de finales, tener que pasar datos a histórico. El volcado no suele ser problemático, pero eliminar un volumen importante de registros sí, y más cuanto mayor sea el tamaño de la tabla a trasvasar.

 

Cabe decir que en este tipo de operaciones la disponibilidad que deba tener la tabla mientras se vacía es lo más importante. Si podemos hacerlo a nuestras anchas, con tiempo de mantenimiento, la cosa es mucho más sencilla, podemos hacerlo de cien formas. Así que me centraré en la parte complicada, esto es, cómo eliminar la hueva de registros, gigas y gigas, mientras los accesos a la tabla continuan como si nada.

 

Aunque hay muchos otros métodos, expongo aquí uno que vengo usando últimamente. Lo primero es preparar una tabla que tenga únicamente la clave primaria de la tabla objeto del borrado y que contenga los valores que tenemos que borrar, cargándola mediante un método lo más ligero posible, es decir, no con un select..into, que es de lo más agresivo, sino por ejemplo usando el asistente de exportación de datos del Management Studio, con una consulta tal que "select IdTabla from Tabla with(nolock) where fecha < '20050101'". Llamaré a esta tabla, "TablaRef".

 

El borrado se haría de la siguiente script:

 

while exists(select top 1 IdTabla from TablaRef with(nolock)

  begin

    begin tran

    ;with Cte (IdTabla) as (select top 1000 IdTabla from TablaRef order by IdTabla)

    delete from Tabla where IdTabla in (select IdTabla from Cte)

    ;with Cte (IdTabla) as (select top 1000 IdTabla from TablaRef order by IdTabla)

    delete from TablaRef where IdTabla in (select IdTabla from Cte)

    commit

  end


Desde luego, hay otros métodos, pero este permite hacer un seguimiento de lo que queda por borrar y al ir eliminando registros de 1000 en 1000, evitas tener mucho tiempo bloquedos los registros que no se van a eliminar. Además, buscamos los registros siempre por la clave primaria, con lo que el rendimiento del borrado será, por lo general, bastante bueno.

 

Cancerbero y la portera

Escrito por qwalgrande 07-11-2009 en General. Comentarios (0)

La vanidad es uno de los pecados más comunes y yo no estoy exento de ello. Cualquier DBA que se precie de serlo o querer serlo deberá combatir con ella y a menudo caerá en sus redes. Tener acceso a la información y administrar quién más lo tiene es uno de esos poderes que puede corromper. El conocimiento, saber lo que otros no saben. Secretos oscuros, contraseñas, hasta cuentas bancarias puede que estén en nuestras manos y tenemos la opción de ser el cancerbero o la portera.

 

Si eres de esos que no sabe guardar a un secreto, no sigas leyendo, nada encontrarás en este blog que haga de ti un DBA competente y digno de confianza. Es posible que seamos suficientemente fuertes como para no caer en la tentación de meter la mano en la bolsa de los duros, pero ¿seremos capaces de mantener la boca cerrada? Sí, también es posible. ¿Y tendremos esa misma seguridad cuando estemos en un ambiente distendido, a lo mejor con un par de copas de más y mientras los que nos acompañan ya andan regodeándose en esa vanidad contra la que luchamos, y alardean despreocupados de lo que podrían hacer si quisieran? Uf, qué difícil parece.

 

Puede que lo sepamos todo, pero que no lo parezca. La discreción de un contable es la que debemos perseguir.

 

Por último, otra reflexión. Además de ti, ¿quién más conoce la combinación de la caja fuerte? ¿Te fías de él?