¿Qué sucede durante una copia de seguridad de SQL Server en vivo?

18

Algunos de mis compañeros de trabajo se sorprendieron cuando les dije que podía hacer una copia de seguridad de una base de datos de SQL Server mientras todavía se está ejecutando y me pregunté cómo era posible. Sé que SQL Server es capaz de hacer una copia de seguridad de una base de datos mientras aún está en línea, pero no estoy seguro de cómo explicar por qué es posible. Mi pregunta es ¿qué efecto tiene esto en la base de datos?

Si los datos se modifican (mediante una inserción, actualización o eliminación) mientras se ejecuta la copia de seguridad, ¿la copia de seguridad contendrá esos cambios o se agregará a la base de datos después?

Supongo que el archivo de registro juega un papel importante aquí, pero no estoy muy seguro de cómo.

editar: Solo como una nota, mi caso implica hacer una copia de seguridad de las bases de datos utilizando el Agente SQL Server y los efectos de las modificaciones de la base de datos durante este proceso.

Sean Howat
fuente

Respuestas:

24

La copia de seguridad completa contiene tanto los datos como el registro. Para los datos, simplemente copia cada página de la base de datos en la copia de seguridad, tal como está en el momento en que lee la página. Luego agrega al medio de respaldo todo el registro 'relevante'. Esto incluye, como mínimo, todo el registro entre el LSN al comienzo de la operación de respaldo y el LSN al final de la operación de respaldo. En realidad, generalmente hay más registros, ya que tiene que incluir todas las transacciones activas al inicio de la copia de seguridad y el registro necesarios para la replicación. Consulte Desmontar un par de mitos sobre las copias de seguridad completas de la base de datos .

Cuando se restaura la base de datos, todas las páginas de datos se copian en los archivos de la base de datos, luego todas las páginas de registro se copian en los archivos de registro. La base de datos es inconsistente en este momento, ya que contiene imágenes de la página de datos que pueden no estar sincronizadas entre sí. Pero ahora se ejecuta una recuperación normal . Dado que el registro contiene todo el registro durante la copia de seguridad, al final de la recuperación la base de datos es consistente.

Remus Rusanu
fuente
1
Gran publicación y el enlace ayudaron a proporcionar un buen ejemplo. Gracias.
Sean Howat
Muy conciso. ¡Buen trabajo!
allen1
2

Durante la copia de seguridad, se creará una instantánea para la base de datos y los datos se leerán para la copia de seguridad de esa instantánea. Las operaciones reales de DB en vivo no afectarán la operación de respaldo.

Aravind
fuente
1

No puede simplemente copiarlo, ya que puede haber alteraciones en la copia de la base de datos a la mitad de lo que mencionó en la pregunta.

Tiene que hacerse con agentes que conocen la funcionalidad de la base de datos y luego toman una "instantánea" a través de las funciones del sistema operativo o pueden usar una utilidad para volcar la base de datos en un estado seguro (como mysqldump, si usa mysql).

De lo contrario, obtendrá una copia de seguridad que puede estar dañada y no la sabrá hasta que la restaure. Creo que Joel y Jeff recientemente hablaron un poco sobre esto en un reciente podcast de StackOverflow.

Y tiene razón en que el archivo de registro es importante. Si el archivo de diario / registro no está sincronizado con los datos reales, la restauración de los archivos provocará daños.

Se reduce a una copia de seguridad realizada utilizando un estado seguro de la base de datos, ya sea a través de un agente compatible con la base de datos o una aplicación de instantánea o aplicación que es consciente de cómo enganchar correctamente la base de datos en la caída de datos sin interferir con las actualizaciones durante el volcado de datos y luego respaldar arriba el archivo resultante.

Bart Silverstrim
fuente
Esta es una respuesta más generalizada pero olvidé incluir que estaba trabajando a través del Agente SQL Server al principio. Todavía proporcionó algunos buenos detalles sobre lo que podría estar sucediendo durante este proceso a pesar del método, ¡así que ayudó de todos modos! Gracias.
Sean Howat el
0

Hay tantas maneras de hacer esto (en general, no tengo idea de cómo lo hace normalmente MSSQL) como simplemente volcar la base de datos al archivo y agregar cualquier cambio en un archivo de registro que se confirma después de que se completa el volcado, para utilizar una instantánea específica del sistema de archivos características como VSS en Windows.

Oskar Duveborn
fuente
Además, las bases de datos basadas en MVCC desde cero (como PostGres) pueden hacer uso de ese conjunto de comportamientos para mantener una instantánea de la que copia la copia de seguridad y al mismo tiempo permitir actualizaciones a los archivos de datos por transacciones que comienzan durante la ejecución de la copia de seguridad. Como usted dice que hay varios métodos, el utilizado depende del diseño central del motor de almacenamiento de datos y de las funciones de procesamiento de transacciones.
David Spillett
-1

Puede tomar lo que se conoce como copia de seguridad de solo copia. No afectará la base de datos mientras está en línea

darotweiler
fuente
¿Qué es una copia de seguridad de solo copia? ¿Cómo se realiza? ¿Hay alguna advertencia a tener en cuenta? ¿Algún enlace a ejemplos de semejante bestia siendo ejecutada? Si va a enviar una respuesta, imagine lo que podría ser útil encontrar si alguien tuviera esta pregunta en 2-3 años.
rnxrx