트랜잭션 로그 파일 내보내기 예약

트랜잭션 로그 백업 파일에는 전체 백업을 수행한 후 소스 데이터베이스에서 발생한 변경사항이 포함됩니다. 트랜잭션 로그 백업은 마이그레이션 작업의 연속 로드 단계에 필요합니다.

이 페이지에서는 소스 SQL Server 데이터베이스의 정기 트랜잭션 로그 내보내기 및 업로드를 예약하는 방법을 설명합니다.

Amazon RDS의 트랜잭션 로그 파일 업로드 예약

Amazon RDS 소스 인스턴스에서 트랜잭션 로그 파일을 저장하는 Cloud Storage 버킷으로 트랜잭션 로그 파일을 정기적으로 전송하도록 예약할 수 있습니다.

다음 단계를 수행합니다.

  1. Amazon RDS 인스턴스에 자동 백업이 사용 설정되어 있는지 확인합니다. Amazon RDS 문서의 자동 백업 사용 설정을 참고하세요.
  2. Amazon RDS 인스턴스에서 트랜잭션 로그 파일에 대한 액세스를 사용 설정합니다. SQL Server용 RDS를 사용하여 트랜잭션 로그 백업에 액세스를 참고하세요. 다음 샘플 명령어를 확인할 수도 있습니다.

    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. 정기적으로 실행되는 SQL 에이전트 작업을 만듭니다. 작업은 다음 스크립트를 실행해야 합니다.
    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. S3 버킷에서 Cloud Storage 버킷으로의 연속 파일 전송을 구성합니다. Storage Transfer Service의 이벤트 기반 전송 작업과 같은 솔루션을 사용하여 파일을 이동할 수 있습니다. AWS S3의 이벤트 기반 전송 설정을 참고하세요.

온프레미스 SQL Server 인스턴스의 트랜잭션 로그 파일 업로드 예약

자체 관리 소스 인스턴스에서 트랜잭션 로그 파일을 저장하는 Cloud Storage 버킷으로 트랜잭션 로그 파일을 정기적으로 전송하도록 예약할 수 있습니다. 권장되는 해결 방법 중 하나는

다음 단계를 수행합니다.

  1. 스크립트를 실행하려는 시스템에서 gcloud init 또는 gcloud auth login gcloud config set project를 실행하여 Google Cloud CLI를 인증 및 프로젝트와 함께 초기화했는지 확인합니다.
  2. 다음 스크립트를 소스 SQL Server 인스턴스의 파일에 저장합니다.

    이 스크립트는 gcloud storage cp 명령어를 사용하여 트랜잭션 로그 파일을 만들고 Cloud Storage 버킷에 업로드하는 작업을 자동화합니다.

    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. 스크립트를 정기적으로 실행하도록 원하는 예약 도구를 구성합니다.

    이 스크립트를 수동으로 사용하고 "final" 위치 인수를 전달하여 이름이 .trn.final 접미사로 끝나는 트랜잭션 로그 파일을 만들 수도 있습니다. 이는 마이그레이션을 완료하고 마이그레이션 작업을 승격하려는 경우에 유용합니다.