Qué es la instantánea de base de datos en SQL Server

La instantánea de base de datos es la creación de una imagen inmutable de la base de datos, puede pensar en ella como tomar una foto actual de la base de datos.

Si lo explico a través de un ejemplo, será más claro.

Por ejemplo, tomamos la instantánea de la base de datos AdventureWorks2014. Estamos leyendo esta instantánea. Todavía no se han realizado cambios en la base de datos AdventureWorks2014. Nuestras selecciones van a la base de datos original porque no hay ningún cambio en la base de datos original.

Si se producen cambios en la base de datos original, estos cambios se escriben en un espacio dedicado en el disco para la instantánea (llamados Archivos dispersos).

Cuando queremos leer los datos, si los datos han cambiado en la base de datos original, la versión sin cambios de los datos se lee desde el archivo disperso. De esta manera, la foto queda intacta.

A pesar de que no ocupa espacio en disco tan pronto como obtenemos la instantánea, el tamaño de los archivos Dispersos aumentará a medida que aumenten los cambios en la base de datos original. Si el tamaño de los archivos dispersos aumenta y no queda espacio en el disco, la instantánea se convierte en sospechosa y debe eliminarla.

Se utiliza principalmente con tecnología de espejo.

Le sugiero que lea mi artículo «Duplicación de bases de datos en SQL Server». En la duplicación, no podemos leer de la base de datos secundaria. Cuando queremos leer de la base de datos secundaria, podemos hacer esto por instantánea de la base de datos secundaria.

Y de esta manera, no creamos una carga para el informe en la base de datos principal al realizar nuestras consultas de informe desde la base de datos secundaria.

O puede obtener la instantánea de la base de datos antes de realizar una operación de actualización o eliminación por lotes. Una operación de actualización o eliminación incorrecta se puede revertir utilizando snapshot. Sería un método mucho más rápido que regresar de la copia de seguridad.

La instantánea debe estar en la misma instancia que la base de datos.

Continuemos con dos ejemplos.

En el primer ejemplo, obtendremos una instantánea para poder leer desde la base de datos secundaria de la base de datos duplicada.

En el segundo ejemplo, obtendremos una instantánea para revertir una operación de actualización incorrecta.

Example1:

En primer lugar, la base de datos reflejada debe ser sincrónica. Por lo tanto, la imagen de su base de datos secundaria debe ser la siguiente.

A continuación, creamos la instantánea con la ayuda del siguiente script. Debe especificar todos los archivos de la base de datos.

En nuestro ejemplo, había dos archivos. Creamos instantáneas para estos dos archivos. Si no está familiarizado con el grupo de archivos y el Archivo, puede leer mi artículo «Cómo crear una base de datos en SQL Server».

1
2
3
4
5

CREAR BASE de datos AdventureWorks2014_Snapshot EN
( NOMBRE = AdventureWorks2012_Data, FILENAME = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( NAME = AdventureWorks2014_Deneme, FILENAME = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
COMO INSTANTÁNEA DE AdventureWorks2014;
IR

Obtuve el siguiente guión de msdn.

Con el siguiente script, puede encontrar el tamaño de la instantánea en el disco y el tamaño máximo que puede crecer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

SELECCIONE DB_NAME(sd.source_database_id) AS,
sd.name AS,
mf.name AS,
size_on_disk_bytes/1024 AS,
mf2.tamaño / 128 COMO
DE sys.archivos maestros mf
JOIN sys.bases de datos sd
EN mf.database_id = sd.database_id
JOIN sys.master_files mf2
EN sd.source_database_id = mf2.database_id
Y mf.file_id = mf2.file_id
CROSS APPLY sys.dm_io_virtual_file_stats(sd.database_id, mf.file_id)
DONDE mf.is_sparse = 1
Y mf2.is_sparse = 0
ORDER BY 1;

El siguiente conjunto de resultados devuelto cuando me encontré con la secuencia de comandos. Establecí el tamaño de estos dos archivos de datos en 256 mb.

Es por eso que la instantánea puede crecer hasta un máximo de 256 MB.

Hemos creado nuestra instantánea.

Puede leer su instantánea como si fuera una base de datos desde la sección Bases de datos-> Instantáneas de bases de datos en SSMS.

Normalmente, no puede leer de la base de datos secundaria en la duplicación. Pero se puede leer de la instantánea de la base de datos secundaria.

Ejemplo 2:

Ejecutemos el script de abajo en la base de datos principal.

1
2
3
4
5

CREAR BASE de datos AdventureWorks2014_Snapshot EN
( NOMBRE = AdventureWorks2012_Data, FILENAME = ‘C:\DB\Data\AdventureWorks2012_Data.ss’ ),
( NAME = AdventureWorks2014_Deneme, FILENAME = ‘C:\DB\Data\AdventureWorks2014_Deneme.ss’ )
COMO INSTANTÁNEA DE AdventureWorks2014;
GO

Después de tomar la instantánea, elimine los registros de cualquier tabla con la ayuda del siguiente script. Estoy eliminando registros de la tabla llamada Snapshot_deneme que creé anteriormente en la base de datos AdventureWorks2014.

1
Eliminar De Snapshot_deneme

Después del proceso de eliminación, puede restaurar los registros eliminados con la ayuda del siguiente script.

Pero si ha realizado otra operación después de tomar la instantánea, perderá esos cambios.

1
2
3

USAR maestro
IR
RESTAURAR LA BASE DE DATOS AdventureWorks2014 DESDE DATABASE_SNAPSHOT = ‘AdventureWorks2014_Snapshot’

dbtut

Autor: dbtut

Somos un equipo con más de 10 años de experiencia en gestión de bases de datos y BI. Nuestros Expertos: Oracle, SQL Server, PostgreSQL, MySQL, MongoDB, Elasticsearch, Kibana, Grafana.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.