none
Archivar tabla con muchos registros RRS feed

  • Pregunta

  • Hola,

    Tengo una tabla con mas de 100 millones de registros en mi base de datos y  quiero mover parte de esta información a otra Base de datos de archivo.
    La otra base de datos puede estar  alojada en otro servidor.

    ¿Pensé en hacerlo utilizando DTS,  hay alguna forma mas optima de hacerlo?

    A su vez en la base de datos principal a la tabla de 100 millones tengo que borrarle aproximadamente 90 millones. 
    Creo que la mejor opcion seria hacer un truncate e insertar los registros que no se van a borrar en una tabla temporal para posteriormente volver a volcarlos.

    Que oponíais sobre estos dos procesos?

    Muchas gracias
    Un saludo

    martes, 2 de febrero de 2021 15:48

Todas las respuestas

  • Si tienes la oportunidad de usar un dtsx, sí, es una buena opción. Internamente utiliza una serie de buffers para optimizar la transferencia, de manera que puede leer de un sitio y a la vez grabar en el otro haciendo una especie de "streaming" a través de los buffers, así que será bastante rápido dentro de lo que cabe.

    Para agilizarlo al máximo, utiliza el truco de deshabilitar todos los constraints e índices nonclustered en la tabla de destino, y luego habilitarlos de nuevo una vez que termine la transferencia.

    Para borrar el 90% de la tabla, si tiene índices, sí, es buena idea mover a otra los que vas a conservar y hacer un Truncate. Pero recuerda que el Truncate tiene varias restricciones, como por ejemplo que no se puede usar si la tabla tiene Foreign Keys. También tiene otros efectos, como por ejemplo resetear a 1 el identity si es que lo tiene. Si no te afectan estas limitaciones, entonces sí puede ser una opción válida.

    En caso de que no puedas usarlo, quita los índices de la tabla, haz el Delete de los registros, y después vuelve a crear los índices sobre ese 10% de registros que te quedará después del Delete. Será más rápido que "desindexar" el 90% de la tabla según se van borrando.

    Ten presente que esto requerirá una gran cantidad de espacio en el Log. Cerciórate de que está suficientemente dimensionado. Si no es posible hacerlo, entonces tendrás que ir borrando por bloques de registros, truncando el log entre bloque y bloque, en lugar de borrarlos todos de golpe.

    martes, 2 de febrero de 2021 18:16
  • Muchas gracias Alberto
    miércoles, 3 de febrero de 2021 8:28