Usa copias de seguridad de Microsoft SQL Server para la recuperación de un momento determinado en Compute Engine

Last reviewed 2023-06-27 UTC

En este instructivo, harás copias de seguridad en una instancia de SQL Server de Compute Engine. El instructivo te muestra cómo administrar estas copias de seguridad, cómo almacenarlas en Cloud Storage y cómo restablecer una base de datos a un momento determinado.

Este instructivo te resultará útil si eres administrador de sistemas, desarrollador, ingeniero, administrador de bases de datos o ingeniero DevOps y deseas hacer una copia de seguridad de datos de SQL Server.

En este instructivo, suponemos que estás familiarizado con los siguientes sistemas:

  • Microsoft Windows
  • Microsoft SQL Server
  • Copias de seguridad completas, diferenciales y de registro de transacciones de SQL Server
  • Compute Engine
  • Cloud Storage

Objetivos

  • Iniciar una instancia de SQL Server y crear una base de datos
  • Realizar copias de seguridad completas, diferenciales y de registro de transacciones
  • Subir las copias de seguridad a Cloud Storage
  • Restablecer la base de datos desde una copia de seguridad de Cloud Storage

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita la API de Compute Engine.

    Habilita la API

  5. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  7. Habilita la API de Compute Engine.

    Habilita la API

  8. Instala un cliente de protocolo de escritorio remoto (RDP) que prefieras Para obtener más información, consulta Clientes de escritorio remoto de Microsoft. Si ya tienes instalado un cliente de RDP, puedes omitir esta tarea.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Prepara la instancia de SQL Server

En esta sección, iniciarás la instancia de SQL Server, prepararás la base de datos y configurarás una clave de encriptación.

Inicia la instancia de SQL Server

Tu primera tarea es iniciar una instancia de SQL Server y crear una carpeta de copia de seguridad.

  1. Abre Cloud Shell:

    IR A Cloud Shell

  2. Inicia una instancia de SQL Server:

    gcloud compute instances create sqlserver \
        --zone=us-central1-c \
        --machine-type=n1-standard-1 \
        --image-family=sql-std-2019-win-2019 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-type=pd-standard \
        --tags=sqlserver \
        --scopes=https://www.googleapis.com/auth/cloud-platform
    
  3. Ve a la página Instancias de VM en la consola de Google Cloud y busca la instancia de Windows a la que deseas conectarte:

    IR A LA PÁGINA INSTANCIAS DE VM

  4. Establece la contraseña inicial de la instancia. Guarda la contraseña en un lugar seguro.

  5. En la sección Compute Engine de la consola de Google Cloud, haz clic en el menú desplegable RDP y selecciona la opción Descargar el archivo RDP para descargar el archivo de RDP para su instancia. Usa este archivo para conectarte a la instancia mediante un cliente de RDP. Para obtener más información, consulta Clientes de escritorio remoto de Microsoft.

Instala SQL Server Management Studio

Para instalar Microsoft SQL Server Management Studio (SSMS), haz lo siguiente:

  1. En tu sesión de RDP, minimiza todas las ventanas e inicia la app de Windows PowerShell ISE.

  2. Cuando recibas el mensaje de PowerShell, descarga y ejecuta el instalador de SSMS:

    Start-BitsTransfer `
        -Source "https://aka.ms/ssmsfullsetup" `
        -Destination "$env:Temp\ssms-setup.exe"
    & $env:Temp\ssms-setup.exe
    
  3. Acepta la solicitud para permitir cambios.

  4. En el instalador de SSMS, haz clic en Instalar.

  5. Cuando finalice la instalación, haz clic en Reiniciar para reiniciar la máquina remota. Esto cierra la sesión de RDP.

  6. Para volver a conectarte, haz clic en Conectar en la ventana de RDP. Si la máquina remota todavía no terminó de reiniciarse, espera unos minutos y vuelve a intentar conectarte.

  7. Ingresa tu nombre de usuario y la contraseña que guardaste antes (deja el campo Dominio en blanco) y, luego, haz clic en Aceptar para volver a conectarte.

Prepara las carpetas de copia de seguridad y restablecimiento

  1. En la sesión de RDP, minimiza todas las ventanas y, luego, abre la Shell del SDK de Google Cloud (no es lo mismo que Cloud Shell) en el escritorio de Windows.

  2. Crea una carpeta de copia de seguridad:

    mkdir c:\backup
    
  3. Crea una carpeta de restablecimiento:

    mkdir c:\restore
    

Prepara la base de datos

  1. En Cloud Shell, crea una base de datos de prueba en la instancia:

    osql -E -Q "create database testdb"
    
  2. Crea una tabla de prueba:

    osql -E -Q "create table testdb.dbo.testtable(status varchar(255))"
    

Configura la clave de encriptación

  1. En Cloud Shell, crea una clave de base de datos principal:

    osql -E -Q "USE master;CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MyPassword!';"
    
  2. Crea un certificado de copia de seguridad:

    osql -E -Q "USE master; CREATE CERTIFICATE testdbcert WITH SUBJECT = 'testdb certificate';"
    

Realizando copias de seguridad

SQL Server 2019 y versiones anteriores

En esta sección, crearás copias de seguridad completas, diferenciales y de registro de transacciones, y modificarás la base de datos entre una operación y otra.

  1. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Initial')"
    
  2. En Cloud Shell, realiza una copia de seguridad completa:

    osql  -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak' WITH INIT,
        COMPRESSION,
        ENCRYPTION
        (
            ALGORITHM = AES_256,
            SERVER CERTIFICATE = testdbcert
        )  "
    
  3. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Full Backup')"
    
  4. Realiza una copia de seguridad diferencial:

    osql  -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb-diff.bak' WITH DIFFERENTIAL,
    COMPRESSION,
    ENCRYPTION
        (
        ALGORITHM = AES_256,
        SERVER CERTIFICATE = testdbcert
        ) "
    
  5. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Diff Backup')"
    
  6. Realiza una copia de seguridad de registro de transacciones:

    osql  -E -Q "BACKUP LOG testdb TO DISK='c:\backup\testdb-log.bak' WITH COMPRESSION,
    ENCRYPTION
        (
        ALGORITHM = AES_256,
        SERVER CERTIFICATE = testdbcert
        ) "
    
  7. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Bad Row')"
    
  8. Verifica las filas de la tabla:

    osql -E -Q "select * from testdb.dbo.testtable"
    

    El resultado se ve de la manera siguiente:

    Initial
    
    After Full Backup
    
    After Diff Backup
    
    Bad Row
    

SQL Server 2022

En esta sección, crearás copias de seguridad completas, diferenciales y de registro de transacciones, y modificarás la base de datos entre una operación y otra. Usa los comandos de copia de seguridad y restablecimiento integrados con Cloud Storage.

SQL Server 2022 (16.x) admite la integración extendida de almacenamiento de objetos, ya que incorpora un conector nuevo que usa una API de REST para conectarse a cualquier proveedor de almacenamiento de objetos compatible con S3. Puedes usar los comandos BACKUP TO URL y RESTORE FROM URL en SQL Server 2022 con cualquier destino de almacenamiento compatible con S3 como URL.

SQL Server usa credenciales para conectarse a recursos externos. Una credencial es un registro que contiene información de autenticación. Para autenticar y autorizar tu acceso a la interfaz de Cloud Storage S3, debes crear y usar una clave de acceso y una clave secreta. Luego, debes almacenar estas claves en tu credencial de SQL Server.

  1. Crea una clave de acceso y una clave secreta para tu cuenta de usuario en tu bucket de Cloud Storage:

    1. Ve a Cloud Storage.
    2. Ve a Configuración.
    3. Ve a INTEROPERABILIDAD.
    4. Ve a Claves de acceso para tu cuenta de usuario.
    5. Desplázate hacia abajo y haz clic en Crear una clave para crear una clave de acceso nueva y una clave secreta.
  2. Crea una credencial en la instancia de SQL Server 2022:

    Ejecuta la siguiente muestra de código para crear una credencial: Elige un nombre para tu credencial. Reemplaza los campos ACCESS_KEY y SECRET por los valores que generaste en el paso anterior.

    osql -E -Q "
        CREATE CREDENTIAL [CREDENTIAL_NAME]
        WITH
            IDENTITY = 'S3 Access Key',
            SECRET = 'ACCESS_KEY:SECRET'
        "
    
  3. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Initial')"
    
  4. Realiza la operación BACKUP en el bucket de Cloud Storage:

    Ejecuta el comando de copia de seguridad de la base de datos con el URI del bucket de Cloud Storage configurado como el valor del parámetro URL y el nombre de la credencial que definiste antes como el valor de la opción WITH CREDENTIAL. Este comando permitirá que SQL Server cree el archivo de copia de seguridad y lo suba al mismo tiempo al bucket de Cloud Storage, sin necesidad de espacio adicional en el disco local.

    osql -E -Q "
        BACKUP DATABASE testdb
        TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb.bak'
        WITH
            CREDENTIAL = 'CREDENTIAL_NAME',
            FORMAT,
            STATS = 10,
            MAXTRANSFERSIZE = 10485760,
            BLOCKSIZE = 65536,
            COMPRESSION;
        "
    

En la siguiente lista, se explican los parámetros de la declaración WITH:

  • FORMATO: reemplaza las copias de seguridad existentes y crea un nuevo conjunto de medios.
  • ESTADÍSTICAS: Indica a SQL Server que proporcione información sobre el progreso de la copia de seguridad.
  • COMPRESIÓN: indica a SQL Server que comprima el archivo de copia de seguridad, lo que lo hace más pequeño y rápido para subirlo a Cloud Storage.
  • MAXTRANSFERSIZE = 10485760, BLOCKSIZE = 65536las opciones ayudan a evitar errores de dispositivos de E/S con archivos de copia de seguridad más grandes.
  1. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Full Backup')"
    
  2. Realiza una copia de seguridad diferencial:

    osql -E -Q "
        BACKUP DATABASE testdb
        TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb-diff.bak'
        WITH
            DIFFERENTIAL,
            CREDENTIAL = 'CREDENTIAL_NAME',
            STATS = 10,
            MAXTRANSFERSIZE = 10485760,
            BLOCKSIZE = 65536,
            COMPRESSION;
        "
    
  3. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('After Diff Backup')"
    
  4. Realiza una copia de seguridad de registro de transacciones:

    osql -E -Q "
        BACKUP LOG testdb
        TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb-log.bak'
        WITH
            CREDENTIAL = 'CREDENTIAL_NAME',
            STATS = 10,
            MAXTRANSFERSIZE = 10485760,
            BLOCKSIZE = 65536,
            COMPRESSION;
        "
    
  5. Agrega una fila a la tabla de prueba:

    osql -E -Q "insert into testdb.dbo.testtable ([status]) VALUES ('Bad Row')"
    
  6. Verifica las filas de la tabla:

    osql -E -Q "select * from testdb.dbo.testtable"
    

    El resultado obtenido se verá así:

    Initial
    
    After Full Backup
    
    After Diff Backup
    
    Bad Row
    

Administra tus copias de seguridad

En esta sección, almacenarás tus copias de seguridad de forma remota en Cloud Storage, configurarás tu bucket de Cloud Storage para quitar automáticamente las copias de seguridad antiguas y programarás cuándo deben hacerse copias de seguridad. Si ejecutas varios servidores de bases de datos, considera crear múltiples directorios en tu bucket de Cloud Storage que representen los distintos servidores.

Sube las copias de seguridad a Cloud Storage

SQL Server 2019 y versiones anteriores

Ahora que tienes algunos archivos de copia de seguridad, puedes subir tus copias de seguridad a Cloud Storage.

  1. En Cloud Shell, crea un bucket de Cloud Storage. Los nombres de los depósitos deben ser únicos a nivel global en Google Cloud. Para asegurarte de que el nombre del bucket sea único, considera usar espacios de nombres con el nombre del proyecto, como se muestra a continuación:

    gsutil mb "gs://${DEVSHELL_PROJECT_ID}-sql-backups"
    
  2. En la ventana de la shell en la sesión de RDP, copia los archivos en tu bucket de Cloud Storage. En el siguiente comando, reemplaza BUCKET_NAME por el nombre del depósito que acabas de crear.

    gsutil cp -n c:\backup\testdb*.bak gs://BUCKET_NAME
    

    Puedes usar el comando gsutil cp para crear estructuras de directorio completas y subir varios archivos a la vez.

SQL Server 2022

Los archivos de copia de seguridad ya se encuentran en el bucket, ya que SQL Server 2022 admite la copia de seguridad directamente en Cloud Storage.

Configura la reducción automática de archivos en Cloud Storage

Con el paso del tiempo, las copias de seguridad más antiguas dejan de ser útiles, por lo que se vuelve necesario quitarlas. Para ayudar a automatizar este proceso, Cloud Storage cuenta con un mecanismo de administración del ciclo de vida que puedes usar para administrar el ciclo de vida de tus archivos de copia de seguridad.

Para configurar la administración del ciclo de vida de los objetos en tu bucket, haz lo siguiente:

  1. En Cloud Shell, crea un archivo de configuración de ciclo de vida JSON. Este archivo le indica a Cloud Storage que borre archivos después de 30 días:

    bash -c 'cat <<EOF >  lifecycle.json
    {
        "lifecycle": {
            "rule": [{
                "action": { "type": "Delete" },
                "condition": { "age": 30 }
            }]
        }
    }
    EOF'
    
  2. Establece la configuración del ciclo de vida de tu bucket de Cloud Storage. Reemplaza BUCKET_NAME con el nombre de tu depósito:

    gsutil lifecycle set lifecycle.json gs://BUCKET_NAME
    

Programa las copias de seguridad

En general, se recomienda realizar una copia de seguridad completa periódicamente y realizar copias de seguridad diferenciales hasta la siguiente copia de seguridad completa. En Windows, puedes usar tareas programadas para automatizar la realización de copias de seguridad.

Si creas una secuencia de comandos que genera una serie de copias de seguridad, asegúrate de incluir pasos de validación lógica en cada etapa para verificar que se haya completado correctamente. Si la validación falla, asegúrate de que la secuencia de comandos genere una alerta de Windows. Además, para evitar llenar el disco local, asegúrate de que la secuencia de comandos quite el archivo de copia de seguridad local después de subirlo correctamente a Cloud Storage.

Restablece una copia de seguridad

En esta sección, restablecerás tu base de datos de SQL Server a partir de archivos de copia de seguridad almacenados en Cloud Storage.

SQL Server 2019 y versiones anteriores

  1. En Cloud Shell, en tu sesión de RDP, descarga los archivos de copia de seguridad desde Cloud Storage. Reemplaza BUCKET_NAME con el nombre del bucket en el que almacenas tus copias de seguridad de SQL Server:

    gsutil cp gs://BUCKET_NAME/testdb*.bak c:\restore
    
  2. Abre la consola de administración de SQL Server.

  3. Haz clic en el botón inicio y, a continuación, haz clic en Microsoft SQL Server Tools 18 > Microsoft SQL Server Management Studio 18.

  4. Deja los campos de Conexión como están y, luego, haz clic en Conectar.

  1. En el panel de la izquierda, expande Bases de datos.
  2. Haz clic con el botón derecho en testdb y, en la ventana emergente, haz clic en Tareas > Restaurar > Base de datos.
  3. Importa los archivos de copia de seguridad a la consola:
    1. En Origen, selecciona Dispositivo.
    2. Haz clic en el botón .
    3. En el cuadro de diálogo que se abre, haz clic en Agregar, selecciona todos los archivos en C:\restore y haz clic en Aceptar.
    4. Haz clic en OK.
  4. Para ver las opciones de restablecimiento de un momento determinado, haz lo siguiente:

    1. Haz clic en Cronograma.
    2. En Restablecer a, haz clic en Fecha y hora específicas.
    3. En Intervalo del cronograma, selecciona hora.
    4. Elige una hora en el rango de Copia de seguridad de registro de transacciones.
    5. Haz clic en Cancelar para salir de la pantalla del cronograma.

  5. En este instructivo, restablecerás la base de datos a su estado previo a la copia de seguridad del registro de transacciones. Para ello, desmarca la fila del registro de transacciones (Transaction Log) en la lista de copias de seguridad:

    Borra la fila del registro de transacciones en la lista de copias de seguridad.

  6. Inicia el proceso de restablecimiento:

    1. Haz clic en OK.
    2. Espera a que la base de datos termine el proceso de restablecimiento y, cuando veas el mensaje Database 'testdb' restored successfully, haz clic en Aceptar.
  7. Muestra una lista de las filas de la tabla de prueba:

    osql -E -Q "select * from testdb.dbo.testtable;"
    

    El resultado muestra dos filas:

    "Initial
    "After Full Backup"
    

    Verás todas las líneas que insertaste en la tabla antes de realizar la copia de seguridad de registro de transacciones.

SQL Server 2022

Puedes realizar la operación RESTORE. Configura la ruta de acceso del archivo de Cloud Storage como el valor del parámetro URL. Por ejemplo, esta secuencia de comandos de T-SQL restablece la copia de seguridad completa directamente desde Cloud Storage:

```
osql -E -Q "
RESTORE DATABASE testdb
FROM
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/testdb.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME';
    "
```
  1. Abre la consola de administración de SQL Server.
  2. Haz clic en el botón inicio y, a continuación, haz clic en Microsoft SQL Server Tools 19 > Microsoft SQL Server Management Studio 19.
  1. Deja los campos de Conexión como están y, luego, haz clic en Conectar.
  1. En el panel de la izquierda, expande Bases de datos.
  2. Haz clic con el botón derecho en testdb y, en la ventana emergente, haz clic en Tareas > Restaurar > Base de datos.
  3. Importa los archivos de copia de seguridad a la consola:

    1. En Origen, selecciona Dispositivo.
    2. Haz clic en el botón .
    3. En el cuadro de diálogo que se abre, haz clic en Tipo de medio de copia de seguridad y selecciona URL de S3.
    4. En el cuadro de diálogo que se abre, haz clic en Añadir. Agrega las tres ubicaciones de tus archivos de copia de seguridad en el bucket de Cloud Storage y la clave secreta y la de acceso que proporcionaste cuando creaste la credencial.

    5. Haz clic en OK.

  4. Para ver las opciones de restablecimiento de un momento determinado, haz lo siguiente:

    1. Haz clic en Cronograma.
    2. En Restablecer a, haz clic en Fecha y hora específicas.
    3. En Intervalo del cronograma, selecciona hora.
    4. Elige una hora en el rango de Copia de seguridad de registro de transacciones.
    5. Haz clic en Cancelar para salir de la pantalla del cronograma.

  5. En este instructivo, restablecerás la base de datos a su estado previo a la copia de seguridad del registro de transacciones. Para ello, desmarca la fila del registro de transacciones (Transaction Log) en la lista de copias de seguridad:

    Borra la fila del registro de transacciones en la lista de copias de seguridad.

  6. Inicia el proceso de restablecimiento:

    1. Haz clic en OK.
    2. Espera a que la base de datos termine el proceso de restablecimiento y, cuando veas el mensaje Database 'testdb' restored successfully, haz clic en Aceptar.
  7. Muestra una lista de las filas de la tabla de prueba:

    osql -E -Q "select * from testdb.dbo.testtable;"
    

    El resultado muestra dos filas:

    "Initial
    "After Full Backup"
    

    Verás todas las líneas que insertaste en la tabla antes de realizar la copia de seguridad de registro de transacciones.

Limpia

Borra el proyecto

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Próximos pasos