Planifier des exportations de fichiers de journaux des transactions

Les fichiers de sauvegarde des journaux de transactions contiennent les modifications apportées à votre base de données source après la sauvegarde complète. Les sauvegardes des journaux de transactions sont nécessaires 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 de journaux de transactions pour la migration depuis des sources autogérées et Amazon RDS.

Planifier l'importation de fichiers journaux de 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 journaux de transactions dans votre instance Amazon RDS. Consultez la section Accès aux sauvegardes des journaux de 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 aux journaux de 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 SQL Agent qui s'exécute selon une programmation 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 bucket. 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 service de transfert de stockage. Consultez la section Configurer des transferts basés sur des événements depuis AWS S3.

Planifier l'importation de fichiers journaux de transactions pour les instances SQL Server sur site

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

Procédez comme suit :

  1. Sur le système où 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 journal de transactions et son importation dans votre bucket Cloud Storage à l'aide de la gcloud storage cp commande.

    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 l'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 journal de transactions dont le nom se termine par le .trn.final suffixe. Cela est utile lorsque vous souhaitez terminer votre migration et promouvoir la tâche de migration.