Un consejo típico antes de cualquier implementación de producción es hacer una copia de seguridad de la base de datos primero. De esta manera, si la nueva actualización tiene algún problema que puede conducir a la pérdida potencial de datos o la corrupción de datos lógicos, entonces todavía tiene una copia de seguridad para comparar y corregir registros antiguos.
Sin embargo, esto puede funcionar bien hasta que el tamaño de la base de datos esté en pocos GB. Una vez que el tamaño de la base de datos es enorme, las copias de seguridad tardan mucho tiempo en completarse. ¿Cuáles son algunas de las mejores prácticas que se deben seguir en tales situaciones, para evitar la corrupción de datos lógicos debido a problemas lógicos en una implementación de código?
fuente
Respuestas:
Como alguien que se ocupó regularmente de actualizar la base de datos de producción para los clientes para nuestras actualizaciones de software, le digo que la mejor manera de minimizar los errores es realizar las actualizaciones de la manera más sencilla posible.
Si puede realizar un cambio en todos los registros en lugar de registros específicos, es preferible.
En otras palabras, si le dan una lista de identificadores de registros que necesitan cambiar su estado, debe preguntarse por qué se realiza la actualización en el contexto del programa. Puede ser que de los 10 registros que necesita actualizar, la tabla solo tenga 10 elementos. Por lo tanto, debe preguntarse si conceptualmente todo lo que está haciendo es actualizar el estado de todos los registros.
Si puede insertar, es preferible.
El acto de agregar un registro es autónomo. Con esto quiero decir que solo hay un efecto secundario de agregar un registro, y es la existencia de un registro que no existía antes. Por lo tanto, a menos que esté agregando un registro que no debería estar allí, no debería haber problemas.
Si puede evitar la eliminación, es preferible.
Si está realizando una eliminación, está eliminando datos que de otro modo serían irrecuperables sin una copia de seguridad. Si es posible, intente organizar los datos de tal manera que pueda deshabilitar los registros cambiando su estado en lugar de eliminarlos físicamente. El exceso de datos se puede colocar en una partición o se puede eliminar por completo en un momento posterior una vez que esté seguro de que no hay problemas.
Tener una política de actualización consistente.
Si necesita actualizar un registro, puede suceder una de varias cosas:
Debe tener una política para determinar el curso de acción en caso de que algo no salga según lo planeado. En aras de la simplicidad, debe ser coherente en todos los ámbitos y aplicar esta política en cualquier situación de este tipo, no solo para tablas específicas. Esto facilita la recuperación de datos más tarde. En general, mi política es escribir el script de tal manera que pueda volver a ejecutarlo más tarde. Si el script falla, es bueno saber que puede hacer los ajustes adecuados y volver a ejecutarlo, sin embargo, es libre de elegir la política que más le convenga.
Copias de seguridad
¡Esto de ninguna manera lo excusa de realizar una copia de seguridad antes de realizar cualquier actualización en un entorno de producción! Aunque incluso con una copia de seguridad, considero que no es necesario utilizar la copia de seguridad. La pérdida de datos no puede ser una posibilidad incluso en el peor de los casos .
Conclusión
No siempre podrás hacerlo a tu manera. Es probable que usted no determine el esquema de la tabla y, como tal, significa que los tipos de actualizaciones que puede realizar serán complicados y riesgosos. Aunque si tiene algo que decir al respecto, es útil tener en cuenta estos puntos, ya que hacen que las actualizaciones sean sencillas y sin un riesgo significativo.
¡Buena suerte!
fuente
En ese momento, debería estar utilizando un sistema de base de datos de grado comercial que admita instantáneas (Oracles lo llama Flashback ), para eso es exactamente el tipo de cosas para las que son.
Tenga en cuenta que necesita un concepto de copia de seguridad de todos modos: tener más datos no significa que descarte las copias de seguridad porque se vuelven difíciles, todo lo contrario. Necesita algún tipo de copia de seguridad continua, por ejemplo, basada en la replicación con conmutación por error automática.
fuente
Esta es un área masiva, así que espere que esta pregunta se cierre en un tiempo bastante corto pero, fuera de mi alcance (como un ex DBA en bases de datos de yuge):
Mart / Repository
Puede mitigar algunos riesgos si tiene una base de datos separada para actualizaciones y una base de datos separada que todos usan. Entonces es solo un caso de copiar los datos de una base de datos a la otra una vez que se han realizado varias verificaciones. Mart / repositorio es cómo se describe a veces, pero es posible que tenga primario / secundario, maestro / esclavo, etc.
Código fuente
Para todo lo que pueda cambiar, tenga un código fuente que se relacione con cómo se actualizaron los datos. La cantidad de estos que tiene varía de una base de datos a otra, pero puede tener una para cada usuario, rol, fuente de datos, módulo de código, etc.
Fecha de creación / actualización
Algo que puede ser de gran ayuda al rastrear dónde han ido mal las cosas es tener una creación y actualizar datos para cada fila. Luego puede ver de un vistazo qué filas se han actualizado.
ETL
Si la actualización de la base de datos participa como parte de una fábrica de datos, es posible que pueda restaurar una cosecha anterior de archivos planos.
Apoyo
Las copias de seguridad completas, por supuesto, ocupan mucho espacio, pero el escenario habitual es que se realice una copia de seguridad completa a intervalos regulares (por ejemplo, semanalmente) y parciales con mayor frecuencia (diariamente, etc.).
Punto en el tiempo de recuperación
Dependiendo de qué RDBMS está utilizando, algunos puntos de apoyo en el tiempo de recuperación. Esto le permite retroceder al momento en que se conocía un buen estado. Sin embargo, esto requiere una gran cantidad de almacenamiento, lo que aumenta hasta qué punto desea retroceder.
Auditoría
Tener tablas de auditoría le dirá quién (o qué) realizó una actualización de una fila. Esto puede darle un buen punto de partida para la investigación.
Historia
Para algunas tablas críticas, se toma una copia de la fila pertinente en el momento de la actualización para que los datos se puedan restaurar si es necesario.
Validación de datos
Asegúrese de que se realicen verificaciones de validación básicas en los datos antes de que se almacenen, además de las verificaciones de tipo de datos básicos.
Integridad referencial
La integridad referencial no es una bala de plata, pero puede ayudar a garantizar que los datos estén bien estructurados.
fuente
Muchas veces, si estamos haciendo una actualización "única", hacemos una copia de seguridad de la producción y la restauramos en un servidor de prueba. Luego creamos un juego de pruebas y ejecutamos un disparo. Verificamos que los datos han cambiado a través de las pruebas y nos sentimos cómodos con la actualización exitosa y modificamos los datos de la manera que esperamos. Esto se llama ejecución en seco o de prueba. Recomiendo hacer esto
Esto les da a todos una buena idea de que la única toma tendrá éxito. No podemos garantizar el 100% porque los datos se actualizarán a partir de la fecha de ejecución de la prueba, pero aumentamos la confianza y los factores de éxito. Esto también da una idea real de cualquier problema que pueda ocurrir ya que estamos usando una copia de producción. Ahora, si por alguna razón la actualización falla, siempre podemos volver a la ejecución anterior antes de restaurar si es necesario, pero deberíamos haber encontrado y reparado cualquier problema con la ejecución en seco.
Si no puede tomar toda la base de datos (si es realmente grande) intente exportar un tamaño de muestra más pequeño y ejecute la actualización (ejecución en seco pequeña) contra los datos reales. Preferiría todo el conjunto de datos si es posible para asegurar que la prueba sea lo más completa posible.
fuente