내용으로 건너뛰기

Amazon RDS for SQL Server DB 인스턴스의 기본 백업 및 복원을 사용할 때 오류를 해결하려면 어떻게 해야 합니까?

10분 분량
0

Microsoft SQL Server DB 인스턴스의 Amazon Relational Database Service(Amazon RDS)를 백업하고 복원할 때 발생하는 오류를 해결하고 싶습니다.

간략한 설명

Amazon RDS for SQL Server DB 인스턴스의 기본 백업 및 복원을 사용할 때 발생하는 오류를 해결하려면 다음과 같은 방법을 사용해 보십시오.

  • DB 인스턴스의 공간을 늘립니다.
  • SQLSERVER_BACKUP_RESTORE 옵션의 AWS Identity and Access Management(IAM) 역할에 액세스 권한을 부여합니다.
  • 옵션 그룹의 IAM 역할에 AWS Key Management Service(AWS KMS) 권한을 부여합니다.
  • 교차 계정 백업의 IAM 정책 또는 버킷 정책에 권한을 부여합니다.
  • 투명한 데이터 암호화(TDE) 인증서를 가져옵니다.
  • 올바른 Windows 드라이브 문자를 지정합니다.
  • 백업 파일의 MAXTRANSFERSIZE를 복원을 수행할 때 사용한 값보다 큰 값으로 설정합니다.
  • 백업 파일의 크기를 줄여 해당 파일을 Amazon Simple Storage Service(Amazon S3)로 전송합니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

DB 인스턴스의 공간 늘리기

Amazon Elastic Compute Cloud(Amazon EC2) 또는 온프레미스 인스턴스에서 백업을 복원할 때 DB 인스턴스에 공간이 부족할 수 있습니다. 그러면 Amazon RDS가 작업을 중지합니다.

로그 출력 예시:

[2022-04-07 05:21:22.317] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-04-07 05:21:22.437] Task has been aborted  
[2022-04-07 05:21:22.440] There is not enough space on the disk to perform restore database operation.

이 문제를 해결하려면 DB 인스턴스의 사용 가능한 스토리지를 늘릴 수 있습니다. 또는 DB 인스턴스의 트랜잭션 로그 파일 크기를 줄일 수 있습니다.

사용 가능한 스토리지 늘리기

다음 단계를 완료하십시오.

  1. EC2 또는 온프레미스 인스턴스에서 다음 쿼리를 실행하여 데이터베이스 데이터 파일 및 트랜잭션 로그 파일의 크기를 확인합니다.
    SELECT DB_NAME(database_id) AS DatabaseName,  
           Name AS Logical_Name,  
           Physical_Name,  
           (size*8)/1024/1024 AS SizeGB  
      FROM sys.master_files  
     WHERE DB_NAME(database_id) = 'DB_NAME'  
        GO  
           Database Size = (DB_Name size + DB_Name_Log size)
    참고:****DB_NAME을 데이터베이스 이름으로 바꾸십시오.
  2. EC2 또는 온프레미스 인스턴스 데이터베이스 크기를 DB 인스턴스의 사용 가능한 스토리지와 비교합니다.
  3. DB 인스턴스의 사용 가능한 스토리지를 늘린 다음, 데이터베이스를 복원합니다.

트랜잭션 로그 파일 크기 줄이기

다음 단계를 완료하십시오.

  1. EC2 또는 온프레미스 인스턴스에서 현재 트랜잭션 로그 파일 크기를 줄이려면 다음 명령을 실행하십시오.
    DBCC SHRINKFILE (FileName, FileSizeMB)
    참고:****FileName을 데이터 또는 트랜잭션 로그 파일 이름으로, FileSizeMB를 대상 파일 크기(메가바이트 단위)로 바꿉니다.
  2. 데이터베이스를 백업합니다.

SQLSERVER_BACKUP_RESTORE 옵션의 IAM 역할에 액세스 권한 부여

SQLSERVER_BACKUP_RESTORE 옵션과 연결된 IAM 역할에 권한이 부족한 경우, Amazon RDS가 해당 작업을 중지합니다.

로그 출력 예시:

[2020-12-15 08:56:22.143] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2020-12-15 08:56:22.213] Task has been aborted  
[2020-12-15 08:56:22.217] Access Denied

-또는-

[2022-07-16 16:08:22.067] Task execution has started.   
[2022-07-16 16:08:22.143] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.  
[2022-07-16 16:08:22.147] Task has been aborted  
[2022-07-16 16:08:22.150] Access Denied

이 문제를 해결하려면 다음 단계를 완료하십시오.

  1. 다음 명령을 실행하여 복원 쿼리의 S3 버킷과 폴더 접두사가 올바른지 확인합니다.

    exec msdb.dbo.rds_restore_database  
          @restore_db_name='database_name',  
          @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name_and_extension';
  2. IAM 권한 정책에 다음 문을 추가합니다.

    {  
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
          ],  
          "Resource": "arn:aws:s3:::bucket_name"  
        },  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:GetObjectAttributes",  
            "s3:GetObject",  
            "s3:PutObject",  
            "s3:ListMultipartUploadParts",  
            "s3:AbortMultipartUpload"  
          ],  
          "Resource": "arn:aws:s3:::bucket_name/*"  
        }  
      ]  
    }

    **참고:**위의 정책에서 arn:aws:s3:::bucket_name을 S3 버킷의 Amazon 리소스 이름(ARN)으로 바꿉니다.

  3. 해당 정책을 SQLSERVER_BACKUP_RESTORE 옵션과 연결된 역할에 추가합니다.

  4. SQLSERVER_BACKUP_RESTORE 옵션이 DB 인스턴스와 연결된 옵션 그룹에 있는지 확인합니다.

자세한 내용은 SQL Server 데이터베이스의 기본 백업을 Amazon RDS로 수행하고 Amazon S3에서 복원하려면 어떻게 해야 합니까?를 참조하십시오.

옵션 그룹의 IAM 역할에 AWS KMS 권한 부여

RDS for SQL Server 기본 백업 및 복원은 클라이언트 측에서 백업 파일을 암호화하고 해독할 수 있습니다. 옵션 그룹과 연결된 IAM 역할의 정책에 KMS 키 권한이 없으면 해당 백업 또는 복원이 실패합니다.

로그 출력 예시:

 [2025-12-12 01:34:22.217] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.   
 [2025-12-12 01:34:22.223] Task has been aborted   
 [2025-12-12 01:34:22.230] User: arn:aws:sts::0123456789:assumed-role/<your_role_name>/RDS-SqlServerBackupRestore is not authorized to perform: kms:DescribeKey on resource: arn:aws:kms:ap-northeast-1:0123456789:key/<your_kms_key_id> because no identity-based policy allows the kms:DescribeKey action

이 문제를 해결하려면 옵션 그룹과 연결된 IAM 정책에 다음 문을 추가합니다.

{  
  "Version":"2012-10-17",                  
  "Statement": [  
    {  
      "Sid": "AllowAccessToKey",  
      "Effect": "Allow",  
      "Action": [  
        "kms:DescribeKey",  
        "kms:GenerateDataKey",  
        "kms:Encrypt",  
        "kms:Decrypt"  
      ],  
      "Resource": "arn:aws:kms:us-east-1:0123456789:key/key-id"  
    },  
    {  
      "Sid": "AllowAccessToS3",  
      "Effect": "Allow",  
      "Action": [  
        "s3:ListBucket",  
        "s3:GetBucketLocation"  
      ],  
      "Resource": "arn:aws:s3:::PUT-BUCKET-NAME"  
    },  
    {  
      "Sid": "GetS3Info",  
      "Effect": "Allow",  
      "Action": [  
        "s3:GetObjectAttributes",  
        "s3:GetObject",  
        "s3:PutObject",  
        "s3:ListMultipartUploadParts",  
        "s3:AbortMultipartUpload"  
      ],  
      "Resource": "arn:aws:s3:::PUT-BUCKET-NAME/*"  
    }  
  ]  
}

교차 계정 백업의 IAM 정책 또는 버킷 정책에 권한 부여

한 AWS 계정에서 다른 계정으로 데이터베이스 백업을 복원할 때, 권한이 부족해서 Amazon RDS가 작업을 중지할 수 있습니다. 예를 들어 S3 버킷의 백업을 계정 A에 저장하고, 계정 B의 Amazon RDS DB 인스턴스에 복원하는 경우입니다.

옵션 그룹과 연결된 IAM 역할의 정책이나 S3 버킷과 연결된 버킷 정책에 권한이 없습니다.

로그 출력 예시:

[2022-02-03 15:57:22.180] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-02-03 15:57:22.260] Task has been aborted  
[2022-02-03 15:57:22.263] Error making request with Error Code Forbidden and Http Status Code Forbidden. No further error information was returned by the service.

이 문제를 해결하려면 다음 단계를 완료하십시오.

  1. 계정 B의 옵션 그룹과 연결된 IAM 정책에 다음 문 추가:

    {  
      "Version": "2012-10-17",  
      "Statement":  
        [  
          {  
            "Effect": "Allow",  
            "Action":  
              [  
                "s3:ListBucket",  
                "s3:GetBucketLocation"  
              ],  
            "Resource": "arn:aws:s3:::name_of_bucket_present_in_Account_A"  
          },  
          {  
            "Effect": "Allow",  
            "Action":  
              [  
                "s3:GetObject",  
                "s3:PutObject",  
                "s3:ListMultipartUploadParts",  
                "s3:AbortMultipartUpload"  
              ],  
            "Resource": "arn:aws:s3:::name_of_bucket_present_in_Account_A/*"  
          },  
          {  
            "Action": [  
              "kms:DescribeKey",  
              "kms:GenerateDataKey",  
              "kms:Decrypt",  
              "kms:Encrypt"  
              "kms:ReEncryptTo",  
              "kms:ReEncryptFrom"  
            ],  
            "Effect": "Allow",  
            "Resource": [  
              "arn:aws: PUT THE NAME OF THE KEY HERE",  
              "arn:aws:s3:::name_of_bucket_present_in_Account_A/*"  
            ]  
          }  
        ]  
    }
  2. 계정 A의 S3 버킷과 연결된 버킷 정책에 다음 문 추가:

    {  
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Sid": "Permission to cross account",  
          "Effect": "Allow",  
          "Principal": {  
            "AWS": [  
              "arn:aws:iam::AWS-ACCOUNT-ID-OF-RDS:role/service-role/PUT-ROLE-NAME"  
            ]  
          },  
          "Action": [  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
                 ],  
          "Resource": [  
            "arn:aws:s3:::PUT-BUCKET-NAME"  
          ]  
        },  
        {  
          "Sid": "Permission to cross account on object level",  
          "Effect": "Allow",  
          "Principal": {  
            "AWS": [  
              "arn:aws:iam::AWS-ACCOUNT-ID-OF-RDS:role/service-role/PUT-ROLE-NAME"  
            ]  
          },  
          "Action": [  
            "s3:GetObject",  
            "s3:PutObject",  
            "s3:ListMultipartUploadParts",  
            "s3:AbortMultipartUpload"  
          ],  
          "Resource": [  
            "arn:aws:s3:::PUT-BUCKET-NAME/*"  
          ]  
        }  
      ]  
    }

자세한 내용은 기본 백업과 복원을 사용해 SQL Server 데이터베이스 가져오기 및 내보내기 및 버킷 소유자가 자신의 소유가 아닌 객체에 교차 계정 권한 부여를 참조하십시오.

TDE 인증서 가져오기

데이터베이스 백업을 복원할 때 대상 서버에 TDE 인증서를 가져오지 않은 경우 작업이 중지됩니다. 예를 들어 TDE가 적용된 데이터베이스를 EC2 또는 온프레미스 인스턴스에서 RDS for SQL Server DB 인스턴스로 복원하려는 경우입니다.

로그 출력 예시:

[2022-06-15 11:55:22.280] Cannot find server certificate with thumbprint '########'.  
[2022-06-15 11:55:22.280] RESTORE FILELIST is terminating abnormally.  
[2022-06-15 11:55:22.300] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-06-15 11:55:22.333] Task has been aborted  
[2022-06-15 11:55:22.337] Empty restore file list result retrieved.

이 문제를 해결하려면 TDE 인증서를 대상 서버에 가져옵니다.

이 문제를 방지하려면 다음 해결 방법 중 하나를 사용하십시오.

온프레미스 또는 EC2 인스턴스에서 데이터베이스를 백업하지만 대상 RDS for SQL Server는 여러 가용 영역에 있음

다음 단계를 완료하십시오.

  1. TDE를 활성화한 상태로 EC2 또는 온프레미스 데이터베이스의 백업을 만듭니다.

  2. 해당 백업을 온프레미스 서버 내 새 데이터베이스로 복원합니다.

  3. 다음 명령을 실행하여 새 데이터베이스에서 암호화를 비활성화합니다.

    USE master;  
    GO  
    ALTER DATABASE Databasename SET ENCRYPTION OFF;  
    GO

    참고:****Databasename을 데이터베이스 이름으로 바꾸십시오.

  4. 다음 명령을 실행해 새 데이터베이스에서 데이터베이스 암호화 키(DEK)를 삭제합니다.

    USE Databasename;  
    GO  
    DROP DATABASE ENCRYPTION KEY;  
    GO

    참고:****Databasename을 데이터베이스 이름으로 바꾸십시오.

  5. 기본 SQL Server 백업을 수행한 다음, 해당 백업을 DB 인스턴스에 복원합니다.

  6. 새 DB 인스턴스에 대하여 TDE를 활성화합니다.

DB 인스턴스를 TDE로 암호화된 RDS for SQL Server DB 인스턴스에서 백업

다음 단계를 완료하십시오.

  1. RDS for SQL Server 인스턴스의 DB 스냅샷을 사용해 새 DB 인스턴스로 복원합니다.
    **참고:**DB 인스턴스의 에디션을 변경하는 경우, Microsoft SQL Server 고려 사항을 참조하십시오.
  2. 새 DB 인스턴스에 대하여 TDE를 비활성화합니다.
  3. 기본 SQL 백업을 수행한 다음, 해당 백업을 DB 인스턴스에 복원합니다.
  4. 새 DB 인스턴스에 대하여 TDE를 활성화합니다.

올바른 Windows 드라이브 문자 지정

RDS for SQL Server는 데이터베이스를 추가 스토리지 볼륨에 복원할 수 있습니다. 스토리지 볼륨에 잘못된 Windows 드라이브 문자를 지정하면 복원 작업이 실패합니다.

쿼리 및 오류 메시지 예시:

-- Native restore query  
EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @data_file_volume='Y:', -- incorrect drive letter.  
    @log_file_volume='Z:';  -- incorrect drive letter.  
-- Error message  
Message 50000、Level 16、State 1、Procedure msdb.dbo.rds_restore_database、Line 122  
Volume for data files is unavailable. Choose from available volumes.

이 문제를 해결하려면 Windows 드라이브 문자를 확인하십시오. 다음 단계를 완료하십시오.

  1. describe-db-instances 명령을 사용해 DB 인스턴스에 연결된 추가 스토리지 볼륨을 나열합니다.

    aws rds describe-db-instances \  
      --db-instance-identifier your-db-instance-id \  
      --query 'DBInstances[].AdditionalStorageVolumes[].VolumeName' \  
      --output text

    참고:****your-db-instance-id를 DB 인스턴스 식별자로 바꾸십시오.
    참고: 볼륨 이름을 가져올 수 없는 경우, AWS CLI를 최신 버전으로 업데이트해야 합니다.

    스토리지 볼륨에 대한 자세한 내용은 RDS for SQL Server에서 추가 스토리지 볼륨 사용 시 고려 사항을 참조하십시오.

  2. 쿼리를 수정해 @data_file_volume 및 @log_file_volume에 올바른 Windows 드라이브 문자를 지정합니다.

백업 파일의 MAXTRANSFERSIZE를 복원을 수행할 때 사용한 값보다 큰 값으로 설정

MAXTRANSFERSIZE 오류는 백업에 FILESTREAM 또는 In-Memory OLTP 파일 그룹이 포함되어 있고, 복원 중에 잘못된 MAXTRANSFERSIZE를 사용하면 발생합니다.

참고: RDS for SQL Server는 FILESTREAM 기능을 지원하지 않습니다.

MAXTRANSFERSIZE를 명시적으로 지정하면 다음과 같은 오류가 발생할 수 있습니다. "RESTORE requires MAXTRANSFERSIZE=<required_size> but <your_specified_size> was specified."

쿼리 및 로그 출력 예시:

-- query  
EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @max_transfer_size=65536 -- specified MAXTRANSFERSIZE explicitly  

-- error message  
 [2025-12-11 07:26:22.320] Task execution has started.   
 [2025-12-11 07:26:22.520] RESTORE requires MAXTRANSFERSIZE=4194304 but 65536 was specified.  RESTORE DATABASE is terminating abnormally.

이 문제를 해결하려면 MAXTRANSFERSIZE를 지정하지 마십시오.

EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak'  

또는 오류 메시지에 표시된 크기와 같거나 그보다 큰 값을 지정하십시오.

EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @max_transfer_size=4194304

백업 파일의 크기를 줄여 해당 파일을 Amazon S3로 전송

이 문제는 Amazon S3 멀티파트 작업의 최대 객체 크기보다 큰 객체를 이동할 때 발생합니다. Amazon S3가 큰 객체를 여러 파트로 나누는데, 이 수가 각 업로드의 최대 파트 수를 초과합니다.

로그 출력 예시:

[2022-04-21 16:45:04.597] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Completed processing 100% of S3 chunks.  
[2022-04-21 16:47:05.427] Write on "####" failed: 995(The I/O operation has been aborted because of either a thread exit or an application request.) A nonrecoverable I/O error occurred on file "XXXX:" 995(The I/O operation has been aborted because of either a thread exit or an application request.). BACKUP DATABASE is terminating abnormally.  
[2022-04-21 16:47:22.033] Unable to write chunks to S3 as S3 processing has been aborted.  
[2022-04-21 16:47:22.040] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Aborting S3 upload, waiting for S3 workers to clean up and exit  
[2022-04-21 16:47:22.053] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.  
[2022-04-21 16:47:22.060] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Aborting S3 upload, waiting for S3 workers to clean up and exit  
[2022-04-21 16:47:22.067] S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive

이 문제를 해결하려면 데이터베이스 백업 압축을 활성화하여 백업 크기를 줄여 Amazon S3가 파일을 수신할 수 있게 하십시오.

백업 압축을 활성화하려면 다음 명령을 실행합니다.

exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';