Planifier des exportations de fichiers de journaux des transactions

Les fichiers de sauvegarde du journal des transactions contiennent les modifications qui se produisent dans votre base de données source après la sauvegarde complète. Les sauvegardes du journal des transactions sont requises pour la phase de chargement continu de votre tâche de migration.

Cette page explique comment planifier des exportations et des importations régulières des journaux de transactions pour vos bases de données SQL Server sources.

Planifier l'importation de fichiers de journal des transactions pour Amazon RDS

Vous pouvez planifier des transferts réguliers de vos fichiers journaux de transactions depuis l'instance source Amazon RDS vers le bucket Cloud Storage dans lequel vous stockez les fichiers journaux de transactions.

Procédez comme suit :

  1. Assurez-vous que les sauvegardes automatiques sont activées sur votre instance Amazon RDS. Consultez la section Activer les sauvegardes automatiques dans la documentation Amazon RDS.
  2. Activez l'accès aux fichiers de journal des transactions dans votre instance Amazon RDS. Consultez Accès aux sauvegardes du journal des transactions avec RDS pour SQL Server. Vous pouvez également consulter l'exemple de commande suivant:

    Exemple d'appel de procédure stockée pour activer l'accès au journal des transactions dans 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. Créez une tâche de l'Agent SQL qui s'exécute selon une planification régulière. La tâche doit exécuter le script suivant:
    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. Configurez des transferts de fichiers continus depuis votre bucket S3 vers le bucket Cloud Storage. Vous pouvez utiliser n'importe quelle solution pour déplacer vos fichiers, par exemple des tâches de transfert basées sur des événements dans le service de transfert de stockage. Consultez la section Configurer des transferts basés sur les événements à partir d'AWS S3.

Programmer des importations de fichiers de journaux de transactions pour les instances SQL Server sur site

Vous pouvez planifier des transferts réguliers de vos fichiers de journaux de transactions depuis votre instance source autogérée vers le bucket Cloud Storage dans lequel vous stockez les fichiers de journaux de transactions. Voici l'une des solutions recommandées :

Procédez comme suit :

  1. Sur le système sur lequel vous souhaitez exécuter le script, assurez-vous d'avoir initialisé Google Cloud CLI avec l'authentification et un projet en exécutant la commande gcloud init ou gcloud auth login et gcloud config set project.
  2. Enregistrez le script suivant dans un fichier sur votre instance SQL Server source.

    Ce script automatise la création d'un fichier de journal des transactions et son importation dans votre bucket Cloud Storage à l'aide de la commande 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. Configurez un outil de planification de votre choix pour exécuter régulièrement le script.

    Vous pouvez également utiliser ce script manuellement et transmettre l'argument positionnel "final" pour créer le fichier de journal des transactions dont le nom se termine par le suffixe .trn.final. Cela est utile lorsque vous souhaitez terminer votre migration et promouvoir la tâche de migration.