トランザクション ログ ファイルのエクスポートをスケジュールする

トランザクション ログ バックアップ ファイルには、完全バックアップの取得後にソース データベースで行われた変更が含まれます。トランザクション ログ バックアップは、移行ジョブの継続的なロード フェーズに必要です。

このページでは、ソース SQL Server データベースのトランザクション ログのエクスポートとアップロードを定期的にスケジュールする方法について説明します。

Amazon RDS のトランザクション ログファイルのアップロードをスケジュールする

トランザクション ログファイルを保存する Cloud Storage バケットに、Amazon RDS ソース インスタンスからトランザクション ログファイルを定期的に転送するようにスケジュールできます。

次の手順を行います。

  1. Amazon RDS インスタンスで自動バックアップが有効になっていることを確認します。 Amazon RDS ドキュメントの 自動バックアップを有効にするをご覧ください。
  2. Amazon RDS インスタンスでトランザクション ログファイルへのアクセスを有効にします。 RDS for SQL Server でトランザクション ログ バックアップにアクセスするをご覧ください。 次のサンプル コマンドを確認することもできます。

    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 Agent ジョブを作成します。ジョブは 次のスクリプトを実行する必要があります。
    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 つは

次の手順を行います。

  1. スクリプトを実行するシステムで、認証とプロジェクトを使用して Google Cloud CLI を初期化します。これを行うには、 gcloud init、 or gcloud auth login、または gcloud config set project のいずれかを実行します。
  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 接尾辞で終わるトランザクション ログファイルを作成することもできます。これは、移行を完了して 移行ジョブを昇格させる場合に便利です