安排事务日志文件导出

事务日志备份文件包含在您进行完整备份后源数据库中发生的更改。迁移作业的持续加载阶段需要事务日志备份。

本页介绍了如何为源 SQL Server 数据库安排定期的事务日志导出和上传。

为 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 代理作业。该作业应执行以下脚本:
    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 后缀结尾的事务日志文件。如果您想完成迁移并 提升迁移作业,这会很有用。