S3 호환 개체 스토리지의 URL에 SQL Server 백업 모범 사례 및 문제 해결

적용 대상: SQL Server 2022(16.x)

이 문서에는 SQL Server를 S3 호환 개체 스토리지로 백업하고 복원하는 모범 사례 및 문제 해결 팁이 포함되어 있습니다.

Azure Blob Storage를 사용하는 SQL Server 백업 및 복원 작업에 대한 자세한 내용은 다음을 참조하세요.

문제 해결 및 일반적인 오류 원인

다음은 S3 호환 개체 스토리지로 백업 또는 복원할 때 발생하는 문제를 해결하는 몇 가지 간단한 방법입니다. 지원되지 않는 옵션 또는 제한 사항으로 인한 오류를 방지하려면 S3 호환 개체 스토리지를 사용하여 SQL Backup 및 복원을 참조하세요.

올바르게 구성된 URL인지 확인

다음과 같은 T-SQL 백업 쿼리를 실행할 때 올바르게 구성된 가상 호스트 URL의 예는 다음과 같습니다.

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<bucketName>.<virtualHost>/<pathToBackup>/<backupFileName>' 

또는 URL 경로 스타일:

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<domainName>/<bucketName>/<pathToBackup>/<backupFileName>';

URL에서 검토:

  1. URL이 s3:// 스키마로 시작합니다.

  2. S3 스토리지 가상 호스트 <virtualHost> 또는 서버 도메인 <domainName>이 있으며 HTTPS를 사용하여 실행 중입니다. 엔드포인트가 SQL Server OS 호스트에 설치된 CA에 의해 유효성이 검사됩니다.

  3. <bucketName> 는 백업이 기록되는 이 버킷의 이름입니다. 백업 T-SQL을 실행하기 전에 만들어야 합니다. 백업 T-SQL은 고객용 버킷을 만들지 않습니다. 예를 들어 사용자가 'nonExistingBucket' 버킷을 미리 만들지 않고 다음과 같이 T-SQL 문을 실행합니다.

    BACKUP DATABASE AdventureWorks2022
    TO URL = 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak';
    

    올바르게 구성되지 않은 URL은 다음을 반환할 수 있습니다.

    Msg 3201, Level 16, State 1, Line 50
    Cannot open backup device 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak'. Operating system error 50(The request is not supported.).
    Msg 3013, Level 16, State 1, Line 50
    BACKUP DATABASE is terminating abnormally.
    
  4. 백업 T-SQL을 실행하기 전에는 <pathToBackup>이 필요하지 않습니다. 스토리지 서버에서 자동으로 만들어집니다. 예를 들어 사용자가 'existingBucket/sqlbackups' 경로가 아닌 'existingBucket' 버킷을 미리 만들면 다음이 계속 성공적으로 실행됩니다.

BACKUP DATABASE AdventureWorks2022
TO URL =  's3://<your-endpoint>/existingBucket/sqlbackups/AdventureWorks2022.bak';

백업/복원을 실행하기 전에 서버 수준 자격 증명 만들기

S3 호환 스토리지에 대한 Transact-SQL 쿼리를 실행/복원하기 전에 서버 수준 자격 증명을 만들어야 합니다. 이 자격 증명은 백업/복원 쿼리를 실행하기 전에 S3 호환 개체 스토리지 서버에서 고객이 설정한 액세스 키 및 비밀 키를 포함해야 합니다.

URL s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak에 대해 만들어야 하는 자격 증명의 예는 다음과 같습니다.

CREATE CREDENTIAL [s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak]
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>';

<AccessKeyID> 문에는 : 문자를 포함할 수 없습니다. 백업/복원 쿼리를 실행하기 전에 자격 증명을 만들지 않으면 사용자에게 다음 오류 메시지가 표시됩니다.

Msg 3201, Level 16, State 1, Line 50
Cannot open backup device 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'. Operating system error 50(The request is not supported.).
Msg 3013, Level 16, State 1, Line 50
BACKUP DATABASE is terminating abnormally.

자격 증명의 이름은 정확한 URL 경로와 일치할 필요가 없습니다. 자격 증명 조회가 작동하는 방법의 예는 다음과 같습니다. 경로를 s3://10.193.16.183:9000/myS3Bucket/sqlbackups/AdventureWorks2022.bak쿼리해야 하는 경우 다음 자격 증명 이름이 시도됩니다.

  1. s3://10.193.16.183:8787/myS3Bucket/sqlbackups/AdventureWorks2022.bak
  2. s3://10.193.16.183:8787/myS3Bucket/sqlbackups
  3. s3://10.193.16.183:8787/myS3Bucket

보다 구체적 s3://10.193.16.183:8787/myS3Bucket/sqlbackups 이고 일반적인 s3://10.193.16.183:8787/myS3Bucket것과 같이 검색과 일치하는 자격 증명이 여러 개 있는 경우 가장 구체적인 자격 증명을 선택합니다. 이렇게 하면 SQL Server에서 액세스할 수 있는 폴더에 대해 디렉터리 수준에서 보다 세부적인 액세스 제어를 설정할 수 있습니다.

지원되지 않는 옵션 FILE_SNAPSHOT

현재 BACKUP TSQL 옵션 FILE_SNAPSHOT S3 호환 개체 스토리지에 대해서는 지원되지 않습니다. Azure Blob Storage 전용 옵션입니다.

사용자가 다음 Transact-SQL을 실행하는 경우 예를 들면 다음과 같습니다.

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH FILE_SNAPSHOT;

다음 오류 메시지가 반환됩니다.

Msg 3073, Level 16, State 1, Line 62
The option WITH FILE_SNAPSHOT is only permitted if all database files are in Azure Storage.
Msg 3013, Level 16, State 1, Line 62
BACKUP DATABASE is terminating abnormally.

100GB를 초과하는 백업 스트라이프

현재 백업 중에 S3 호환 개체 스토리지의 고객이 만든 단일 백업 파일의 크기는 기본적으로 MAXTRANSFERSIZE파일당 100GB를 초과할 수 없습니다. 백업 스트라이프가 100GB를 초과하는 경우 백업 T-SQL 구문 문은 다음 오류 메시지를 throw합니다.

Msg 3202, Level 16, State 1, Line 161
Write on 's3://<endpoint>:<port>/<bucket>/<path>/<db_name>.bak' failed: 87(The parameter is incorrect.)
Msg 3013, Level 16, State 1, Line 161
BACKUP DATABASE is terminating abnormally.

사용자의 백업 대용량 데이터베이스에 대한 현재 지침은 데이터베이스 백업에 여러 줄무늬를 사용하며, 각 허용 크기는 100GB보다 작거나 같습니다. BACKUP T-SQL은 다음과 같이 최대 64개의 URL 스트라이프를 지원합니다.

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_1.bak',
URL = 's3://<endpoint>:<port>/<bucket>/<path>/<db_file>_2.bak';

다른 옵션은 'COMPRESSION' 옵션을 사용하는 것입니다.

BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2022.bak'
WITH COMPRESSION;

최대 URL 길이

백업 및 복원 엔진에서 총 URL 길이는 259바이트로 제한됩니다. 즉 s3://hostname/objectkey가 259자를 초과하면 안 됩니다. s3://를 제외하고 사용자는 경로 길이(호스트 이름 + 개체 키)를 259 - 5 = 254자까지 입력할 수 있습니다. URL에 SQL Server 백업 - SQL Server를 참조하세요. 백업 T-SQL 구문 문은 다음 오류 메시지를 throw합니다.

SQL Server has a maximum limit of 259 characters for a backup device name. The BACKUP TO URL consumes 36 characters for the required elements used to specify the URL - 'https://.blob.core.windows.net//.bak', leaving 223 characters for account, container, and blob names put together'

클록 스큐 보정

S3 스토리지는 SQL 호스트와 S3 서버 간의 시간 차이가 15분을 초과할 때마다 연결을 거부하고 "InvalidSignatureException" 오류를 SQL Server로 보낼 수 있습니다. SQL Server에서는 다음과 같이 표시됩니다.

Msg 3201, Level 16, State 1, Line 28
Cannot open backup device '<path>'. Operating system error 5(Access is denied.).
Msg 3013, Level 16, State 1, Line 28
BACKUP DATABASE is terminating abnormally.

SQL Server on Linux 지원

SQL Server는 사용하는 HTTP REST API의 클라이언트를 구현하기 위해 WinHttp를 사용합니다. HTTP 엔드포인트에서 제공하는 TLS 인증서의 유효성 검사를 위해 OS 인증서 저장소를 사용합니다. 그러나 SQL Server on Linux는 인증서 유효성 검사를 SQLPAL에 위임하여 PAL과 함께 제공되는 인증서를 사용하여 엔드포인트의 HTTPS 인증서의 유효성을 검사합니다. 따라서 고객이 제공한 자체 서명된 인증서는 Linux에서 HTTPS 유효성 검사에 사용할 수 없습니다.

백업/복원하는 동안 고객은 Linux에서 다음 오류 메시지를 받습니다.

Msg 3201, Level 16, State 1, Line 20
Cannot open backup device 's3://<endpoint>/<bucket>/testingDB.bak'. Operating system error 12175(failed to retrieve text for this error. Reason: 15105).
Msg 3013, Level 16, State 1, Line 20
BACKUP DATABASE is terminating abnormally.

이 문제를 해결하려면 다음과 같은 미리 정의된 위치를 만들어야 /var/opt/mssql/security/ca-certificates합니다. 자체 서명된 인증서 또는 PAL과 함께 배송되지 않은 인증서를 이 위치에 배치합니다. SQL Server는 시작하는 동안 폴더에서 인증서를 읽고 PAL 신뢰 저장소에 추가합니다.

이 위치에 최대 50개의 파일을 저장할 수 있습니다. 이 폴더가 만들어지지 않으면 SQL Server가 시작할 때 SQL Server 오류 로그가 표시됩니다.

2022-02-05 00:32:10.86 Server      Installing Client TLS certificates to the store.
2022-02-05 00:32:10.88 Server      Error searching first file in /var/opt/mssql/security/ca-certificates: 3(The system cannot find the path specified.)

개체 잠금 - 보존 삭제가 지원되지 않음

S3 호환 개체 스토리지 기능에 대한 SQL Server 백업은 보존 삭제 기능이라고도 하는 개체 잠금을 지원하지 않습니다. 개체 잠금은 보존 기간 동안 파일을 삭제하거나 덮어쓰는 것을 방지합니다.

백업 작업의 대상이 되는 버킷 및 폴더 위치에는 개체 잠금이 활성화되어 있지 않아야 합니다. S3 호환 개체 스토리지에서 이 기능을 사용하도록 설정하고 구성하면 다음 메시지와 함께 백업 작업이 실패합니다.

Msg 3202, Level 16, State 1, Line 13
Write on 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2022.bak' failed: 87 (The parameter is incorrect).
Msg 3013, Level 16, State 1, Line 13
BACKUP DATABASE is terminating abnormally.