Agende exportações de ficheiros de registo de transações

Os ficheiros de cópia de segurança do registo de transações contêm as alterações que ocorrem na base de dados de origem depois de fazer a cópia de segurança completa. São necessárias cópias de segurança do registo de transações para a fase de carregamento contínuo da tarefa de migração.

Esta página descreve como agendar exportações e carregamentos regulares de registos de transações para as bases de dados SQL Server de origem.

Agende carregamentos de ficheiros de registo de transações para o Amazon RDS

Pode agendar transferências regulares dos ficheiros de registo de transações da instância de origem do Amazon RDS para o contentor do Cloud Storage onde armazena os ficheiros de registo de transações.

Siga estes passos:

  1. Certifique-se de que as cópias de segurança automáticas estão ativadas na sua instância do Amazon RDS. Consulte Ative as cópias de segurança automáticas na documentação do Amazon RDS.
  2. Ative o acesso a ficheiros de registo de transações na sua instância do Amazon RDS. Consulte Acesso a cópias de segurança do registo de transações com o RDS para SQL Server. Também pode verificar o seguinte comando de exemplo:

    Exemplo de chamada de procedimento armazenado para ativar o acesso ao registo de transações no 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. Crie uma tarefa do SQL Agent que seja executada de forma regular. A tarefa deve executar o seguinte script:
    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. Configure transferências de ficheiros contínuas do seu contentor do S3 para o contentor do Cloud Storage. Pode usar qualquer solução para mover os seus ficheiros, por exemplo, tarefas de transferência baseadas em eventos no serviço de transferência de armazenamento. Consulte o artigo Configure transferências orientadas por eventos a partir do AWS S3.

Agende carregamentos de ficheiros de registo de transações para instâncias do SQL Server no local

Pode agendar transferências regulares dos ficheiros de registo de transações da instância de origem autogerida para o contentor do Cloud Storage onde armazena os ficheiros de registo de transações. Uma das soluções recomendadas é

Siga estes passos:

  1. No sistema onde quer executar o script, certifique-se de que inicializou a CLI Google Cloud com autenticação e um projeto executando o comando gcloud init; ou gcloud auth login e gcloud config set project.
  2. Guarde o seguinte script num ficheiro na sua instância do SQL Server de origem.

    Este script automatiza a criação de um ficheiro de registo de transações e o carregamento para o seu contentor do Cloud Storage através do 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. Configure uma ferramenta de agendamento à sua escolha para executar o script regularmente.

    Também pode usar este script manualmente e transmitir o argumento posicional "final" para criar o ficheiro de registo de transações cujo nome termina no sufixo .trn.final. Isto é útil quando quer concluir a migração e promover a tarefa de migração.