Uso de la copia de seguridad instantánea de T-SQL: Instantáneas de bases de datos multimatrices

Este cuarto artículo de una serie sobre copias de seguridad de copias instantáneas T-SQL analiza el uso de la función en un escenario en el que una base de datos abarca múltiples cabinas de almacenamiento.

Multi-array Database Snapshots

Resumen

If you have a multi-array environment, you can freeze database write I/O to take coordinated snapshots across volumes on two FlashArray systems using the T-SQL snapshot backup feature in SQL Server 2022.

image_pdfimage_print

Este artículo apareció por primera vez en el blog de Anthony Nocentino. Se ha vuelto a publicar con el reconocimiento y el consentimiento del autor.

En esta publicación, la cuarta de la serie, quiero compartir un ejemplo que demuestra la función de copia de seguridad de copias instantáneas T-SQL de SQL Server 2022 en un escenario en el que una base de datos abarca múltiples cabinas de almacenamiento. Si se enfrenta a entornos multimatrices, apreciará el modo en que esta técnica congela las I/O de escritura de bases de datos para tomar copias instantáneas coordinadas entre volúmenes en dos sistemas FlashArray™. En esta publicación, le guiaré a través del proceso, le señalaré algunos de los elementos clave del script y le mostraré cuánto tiempo tarda la pausa de I/O de escritura.

El escenario

Imagine que tiene una base de datos llamada MultiArraySnapshot que se distribuye en dos volúmenes separados, cada uno situado en su propio sistema FlashArray de Pure Storage®. Esta configuración puede ser beneficiosa para gestionar entornos grandes y de misión crítica en los que el rendimiento y la coherencia de los datos son esenciales. El reto radica en la coordinación de una copia de seguridad instantánea que permita que ambas cabinas capturen una vista homogénea de los datos simultáneamente. Y con la función de copia de seguridad de copias instantáneas T-SQL de SQL Server 2022 podemos hacer exactamente eso… profundicemos.

Una base de datos con archivos en dos FlashArrays
Figura 1: Una base de datos con archivos en dos sistemas FlashArray.

Resumen del proceso

El proceso es sencillo: Congele la base de datos usando una copia instantánea T-SQL, tome copias instantáneas de cada cabina y luego ejecute una copia de seguridad solo de metadatos para documentar los detalles de la copia instantánea. Esta copia de seguridad de metadatos descongela automáticamente la base de datos.

Configuración del entorno

En primer lugar, importamos los módulos necesarios y definimos las variables de conexión para nuestra instancia de SQL Server, los dos sistemas FlashArray y varios volúmenes. Observe cómo especificamos detalles como los números de serie del disco de destino y la ruta de la copia de seguridad compartida:

Establecemos una sesión remota de PowerShell usando la nueva sesión y creamos una conexión SMO persistente con Connect-DbaInstance. Esta conexión es esencial, ya que permanece abierta hasta que se escriben los metadatos de la copia de seguridad.

Examine el diseño de los archivos de la base de datos

A continuación, usemos Get-DbaDbFile para obtener información detallada sobre los archivos de la base de datos para la base de datos especificada. En nuestro ejemplo aquí P:\SQLDATA1\MultiArraySnapshot.mdf se encuentra en FlashArray1 y Q:\SQLLOG1\MultiArraySnapshot_log.ldf en FlashArray2.

Conexión a los sistemas FlashArray

Ahora, nos autenticamos con las API REST de nuestros sistemas FlashArray usando credenciales almacenadas localmente. Esto nos permite realizar operaciones de copias instantáneas en las cabinas.

Congelación de la base de datos

Para crear una copia instantánea en un momento dado en los dos sistemas FlashArray, primero suspendemos temporalmente la I/O de escritura ejecutando el comando ALTER DATABASE [MultiArraySnapshot] SET SUSPEND_FOR_SNAPSHOT_BACKUP = ON. Esta acción pone la base de datos en un estado estable, preparándola para las copias instantáneas de ambos sistemas FlashArray. Durante este proceso, aún puede leer desde la base de datos.

Tomar las copias instantáneas

Con la base de datos congelada para I/O de escritura, ahora tomamos copias instantáneas en ambas cabinas usando New-Pfa2ProtectionGroupSnapshot. Estas copias instantáneas capturan el estado del grupo de protección.

Copia de seguridad y descongelación de Metadata

Luego, se crea una copia de seguridad de metadatos. Este es el paso crucial para generar un archivo de copia de seguridad (lo usaremos más tarde cuando restablezcamos esta base de datos), liberar automáticamente la base de datos y registrar esa copia instantánea en el historial de copias de seguridad de la base de datos.

Puede comprobar el estado de la copia de seguridad de la copia instantánea revisando el historial de copias de seguridad de la instancia usando Get-DbaDbBackupHistory.

Hagamos algo que no es tan bueno…

Ahora, con fines de demostración, dejemos una tabla.

Realización de una restauración a partir de una copia de seguridad instantánea en dos cabinas

Después de soltar la tabla, restauremos toda la base de datos a partir de una copia instantánea. Lo primero que tenemos que hacer es desconectar la base de datos.

Luego, desconectamos los volúmenes que contienen nuestros archivos de base de datos usando Set-Disk, que se dirige a los discos por sus números de serie a través de una conexión remota PowerShell. Si bien puede ejecutar esto localmente en la instancia de SQL Server, estoy ejecutando este código desde mi caja de conexiones.

Con la base de datos y sus volúmenes desconectados, ahora utilizamos las copias instantáneas de cada FlashArray para restaurar los volúmenes a su estado. Antes de borrar la tabla de la base de datos, usaremos New-Pfa2Volume para ello.

Después de revertir los volúmenes de cada uno de los sistemas FlashArray a su estado anterior a través de las copias instantáneas, pongamos los discos de la base de datos en línea en Windows.

Después de volver a conectar los discos, restauramos la base de datos usando nuestra copia de seguridad de metadatos, usando RESTORE DATABASE $DbName FROM DISK = ‘$BackupFile’ WITH METADATA_ONLY, REPLACE.

Una vez restaurado, comprobamos el estado de la base de datos MultiArraySnapshot y vemos que está EN LÍNEA.

Y, por último, verificamos que nuestra tabla caída ha vuelto a estar en su sitio gracias al proceso de restauración casi instantáneo.

¿Por qué hago esto?

Este script es importante porque muestra una manera de realizar copias instantáneas y restaurar una base de datos a partir de una copia instantánea en múltiples cabinas de almacenamiento en un entorno de SQL Server. Por eso es importante:

  • Instantáneas homogéneas en las cabinas: Este ejemplo anterior utiliza la copia de seguridad instantánea T-SQL de SQL Server 2022 para pausar la escritura I/O en una base de datos con archivos en dos volúmenes en dos sistemas FlashArray diferentes. Al hacerlo, las copias instantáneas tomadas en dos sistemas FlashArray separados capturan la base de datos en un estado estable, lo que garantiza que la base de datos se restaura de manera fiable.
  • Pausa de I/O de escritura minimizada: Al coordinar una copia de seguridad solo de metadatos que descongele automáticamente la base de datos, este proceso minimiza la ventana de tiempo de inactividad, que es un factor crítico en los entornos de alta disponibilidad/alto rendimiento.
  • Capacidades modernas de SQL Server: Esta sección muestra las nuevas funcionalidades de SQL Server 2022 y proporciona un ejemplo real de cómo usar estas características para mejorar las estrategias de copia de seguridad y los planes de recuperación de desastres en escenarios de implementación complejos, como una base de datos que abarca dos o más cabinas.

¿Cuánto tiempo tarda esto?

Esta demostración ejecuta el código desde la congelación hasta que la descongelación es de unos 200 ms para todo el proceso de snapshot en ambas cabinas.

Conclusión de las cosas

En esta publicación, la cuarta de nuestra serie, utilizamos la función de copia de seguridad de copias instantáneas T-SQL en un entorno de múltiples matrices.

Ha visto cómo puede:

  • Restaurar rápidamente usando copias de seguridad solo de metadatos
  • Congelar I/O de escritura en una base de datos
  • Coordine las copias instantáneas en múltiples cabinas de almacenamiento

Puede coger todo el guion de esta entrada de blog en GitHub.