Programar exportaciones de archivos de registro de transacciones

Los archivos de copia de seguridad del registro de transacciones contienen los cambios que se producen en la base de datos de origen después de crear la copia de seguridad completa. Se necesitan copias de seguridad de los registros de transacciones para la fase de carga continua de tu trabajo de migración.

En esta página se describe cómo programar exportaciones y subidas periódicas de registros de transacciones de tus bases de datos de SQL Server de origen.

Programar subidas de archivos de registro de transacciones para Amazon RDS

Puede programar transferencias periódicas de sus archivos de registro de transacciones desde la instancia de origen de Amazon RDS al segmento de Cloud Storage en el que almacena los archivos de registro de transacciones.

Sigue estos pasos:

  1. Asegúrate de que las copias de seguridad automáticas estén habilitadas en tu instancia de Amazon RDS. Consulta la sección Habilitar copias de seguridad automáticas de la documentación de Amazon RDS.
  2. Habilita el acceso a los archivos de registro de transacciones en tu instancia de Amazon RDS. Consulta Acceso a copias de seguridad de registros de transacciones con RDS para SQL Server. También puedes consultar el siguiente comando de ejemplo:

    Ejemplo de llamada a un procedimiento almacenado para habilitar el acceso al registro de transacciones en Amazon RDS

    export DATABASE=YOUR_DATABASE_NAME;
    export S3_Bucket=YOUR_S3_BUCKET;
    exec msdb.dbo.rds_tlog_copy_setup
    @target_s3_arn='arn:aws:s3:::${S3_Bucket}/${DATABASE}/log/';
  3. Crea un trabajo del Agente SQL que se ejecute de forma periódica. El trabajo debe ejecutar la siguiente secuencia de comandos:
    declare @DATABASE varchar(100);
    SELECT @DATABASE=YOUR_DATABASE_NAME;
    
    USE @DATABASE;
    declare @startTime varchar(100);
    declare @endTime varchar(100);
    SELECT
      @startTime = CONVERT(VARCHAR(100), DATEADD(hour, -1, GETUTCDATE()), 120),
      @endTime = CONVERT(VARCHAR(100), GETUTCDATE(), 120);
    
    exec msdb.dbo.rds_tlog_backup_copy_to_S3 
      @db_name=@DATABASE,
      @backup_file_start_time=@startTime,
      @backup_file_end_time=@endTime;
  4. Configura transferencias de archivos continuas desde tu segmento de S3 al segmento de Cloud Storage. Puedes usar cualquier solución para mover tus archivos, como los trabajos de transferencia basados en eventos de Servicio de transferencia de Storage. Consulta Configurar transferencias basadas en eventos desde AWS S3.

Programar subidas de archivos de registro de transacciones para instancias de SQL Server locales

Puedes programar transferencias periódicas de tus archivos de registro de transacciones desde tu instancia de origen autogestionada al segmento de Cloud Storage en el que almacenas los archivos de registro de transacciones. Una de las soluciones recomendadas es

Sigue estos pasos:

  1. En el sistema en el que quieras ejecutar la secuencia de comandos, asegúrate de haber inicializado la CLI de Google Cloud con la autenticación y un proyecto. Para ello, ejecuta uno de los siguientes comandos: gcloud init; gcloud auth login y gcloud config set project.
  2. Guarda la siguiente secuencia de comandos en un archivo de tu instancia de SQL Server de origen.

    Esta secuencia de comandos automatiza la creación de un archivo de registro de transacciones y lo sube a tu segmento de Cloud Storage mediante el comando gcloud storage cp.

    Bash

    #!/bin/bash
    
    NOW="$(date +%s)"
    
    EXT=".trn"
    if [[ "$1" == "final" ]]
    then
      EXT='.trn.final'
    fi
    
    NAME="{DATABASE}.${NOW}.${EXT}"
    FULL_NAME="/SQLServerBackups/log/${NAME}"
    
    
    QUERY="BACKUP LOG ${DATABASE} TO DISK = '${FULL_NAME}'"
    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "${SA_PASSWORD}" -d master -Q "${QUERY}"
    
    gcloud storage cp "${FULL_NAME}" "${GCS_BACKUPS}/log/"

    PowerShell

    # Get the current timestamp
    $NOW = [int](Get-Date -UFormat '%s')
    
    # Set the file extension based on the command-line argument
    $EXT = '.trn'
    if ($args[0] -eq 'final') {
        $EXT = '.trn.final'
    }
    
    # Construct the backup file name
    $NAME = "{0}.{1}{2}" -f $DATABASE, $NOW, $EXT
    $FULL_NAME = "X:\SQLServerBackups\log\$NAME"
    
    # Construct the SQL backup query
    $QUERY = "BACKUP LOG $DATABASE TO DISK = '$FULL_NAME'"
    
    # Execute the SQL backup command
    Invoke-Sqlcmd -ServerInstance 'localhost' -Username 'SA' -Password $env:SA_PASSWORD -Database 'master' -Query $QUERY
    
    # Upload the backup file to Google Cloud Storage
    gcloud storage cp "$FULL_NAME" "$GCS_BACKUPS/log/"
  3. Configura una herramienta de programación de tu elección para ejecutar la secuencia de comandos con regularidad.

    También puedes usar esta secuencia de comandos manualmente y pasar el argumento posicional "final" para crear el archivo de registro de transacciones cuyo nombre termine en el sufijo .trn.final. Esto resulta útil cuando quieres finalizar la migración y promocionar la tarea de migración.