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

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

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

참고

S3 호환 개체 스토리지를 사용한 SQL Server 백업 및 복원은 SQL Server 2022(16.x)의 기능으로 미리 보기로 제공됩니다.

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

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

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

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

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

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

또는 URL 경로 스타일:

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

다음을 확인합니다.

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

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

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

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

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

    Msg 3201, Level 16, State 1, Line 50
    Cannot open backup device 's3://<your-endpoint>/nonExistingBucket/AdventureWorks2019.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 AdventureWorks2019
TO URL =  's3://<your-endpoint>/existingBucket/sqlbackups/AdventureWorks2019.bak';

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

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

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

CREATE CREDENTIAL [s3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2019.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/AdventureWorks2019.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/AdventureWorks2019.bak 경로를 쿼리해야 하는 경우 다음 자격 증명 이름이 시도됩니다.

  1. s3://10.193.16.183:8787/myS3Bucket/sqlbackups/AdventureWorks2019.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

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

사용자가 예를 들어 다음 TSQL을 실행하는 경우:

BACKUP DATABASE AdventureWorks2019
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2019.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.

100,000MB를 초과하는 백업 스트라이프

현재 백업 중에 S3 호환 개체 스토리지의 고객이 만든 단일 백업 파일의 크기는 기본 MAXTRANSFERSIZE을 사용하여 파일당 100,000MB를 초과할 수 없습니다. 백업 스트라이프가 100,000MB를 초과하는 경우 백업 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.

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

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

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

BACKUP DATABASE AdventureWorks2019
TO URL = 's3://<your-endpoint>/myS3Bucket/sqlbackups/AdventureWorks2019.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.

이 문제를 해결하려면 사용자가 자체 서명된 인증서 또는 PAL과 함께 제공되지 않은 인증서를 배치해야 하는 미리 정의된 위치 /var/opt/mssql/security/ca-certificates를 만들어야 합니다. 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.)

다음 단계