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

トランザクション ログ バックアップ ファイルには、フル バックアップの作成後にソース データベースで発生した変更が含まれます。移行ジョブの継続的な読み込みフェーズには、トランザクション ログのバックアップが必要です。

このページでは、セルフマネージド ソースと Amazon RDS ソースから移行するために、定期的なトランザクション ログのエクスポートとアップロードをスケジュールする方法について説明します。

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

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

次の手順を行います。

  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. スクリプトを実行するシステムで、 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 サフィックスで終わるトランザクション ログファイルを作成することもできます。これは、移行を完了して 移行ジョブをプロモートする場合に便利です。