S3 호환 개체 스토리지의 URL에 SQL Server 백업

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

이 문서에서는 S3 호환 개체 스토리지를 백업 대상으로 사용하는 데 필요한 개념, 요구 사항 및 구성 요소를 소개합니다. 백업 및 복원 기능은 백업 디바이스 유형으로 Azure Blob Storage URL에 대한 SQL Server 백업 작업과 개념상 유사합니다.

지원되는 플랫폼에 관한 자세한 내용은 S3 호환 개체 스토리지 공급자를 참조하세요.

참고

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

개요

SQL Server 2022(16.x)에서는 데이터 플랫폼에 개체 스토리지 통합을 도입하여 Azure Storage 외에도 S3 호환 개체 스토리지와 SQL Server 통합할 수 있습니다. 이 통합을 제공하기 위해 SQL Server는 S3 REST API를 사용하여 S3 호환 개체 스토리지의 모든 공급자에 연결하는 새 S3 커넥터로 향상되었습니다. SQL Server 2022(16.x)는 REST API를 사용하여 새 S3 커넥터에 대한 지원을 추가하여 기존 BACKUP/RESTORE TO/FROM URL 구문을 확장합니다.

S3 호환 리소스를 가리키는 URL에는 S3 커넥터가 사용되고 있음을 나타내는 접두사로 s3://가 사용됩니다. s3://로 시작하는 URL은 항상 기본 프로토콜이 https라고 가정합니다.

부품 번호 및 파일 크기 제한 사항

데이터를 저장하려면 S3 호환 개체 스토리지 공급자가 파트라는 여러 블록으로 파일을 분할해야 합니다. 이는 Azure Blob Storage 블록 Blob과 비슷합니다.

각 파일은 최대 10,000개의 부분으로 분할할 수 있으며, 각 파트 크기는 5MB에서 20MB까지입니다. 이 범위는 매개 변수 MAXTRANSFERSIZE를 통해 T-SQL BACKUP 명령에 의해 제어됩니다. MAXTRANSFERSIZE의 기본값은 10MB이므로 각 파트의 기본 크기는 10MB입니다.

단일 파일의 지원 가능한 최대 크기는 10,000파트 * MAXTRANSFERSIZE의 결과입니다. 더 큰 파일을 백업해야 하는 경우 최대 64개의 URL을 분할/스트라이프해야 합니다. 한 파일의 지원 가능한 최종 최대 크기는 10,000파트 * MAXTRANSFERSIZE * URL입니다.

참고

값을 변경 MAXTRANSFERSIZE 하려면 COMPRESSION을 사용해야 합니다.

S3 엔드포인트에 대한 필수 구성 요소

S3 엔드포인트는 다음과 같이 구성되어야 합니다.

  • TLS가 구성되어야 합니다. 모든 연결이 HTTP가 아닌 HTTPS를 통해 안전하게 전송되는 것으로 가정합니다. 엔드포인트는 SQL Server OS 호스트에 설치된 인증서에 의해 유효성이 검사됩니다.
  • 작업을 수행할 수 있는 적절한 권한이 있는 S3 호환 개체 스토리지에서 만든 자격 증명입니다. 스토리지 계층에서 만든 사용자 및 암호의 이름은 Access Key IDSecret Key ID입니다. S3 엔드포인트에 대해 인증하려면 둘 다 필요합니다.
  • 하나 이상의 버킷이 구성되었습니다. 버킷은 SQL Server 2022(16.x)에서 만들거나 구성할 수 없습니다.

보안

백업 권한

SQL Server S3 호환 개체 스토리지에 연결하려면 SQL Server 및 스토리지 계층에 하나씩 두 개의 권한 집합을 설정해야 합니다.

SQL Server BACKUP 또는 RESTORE 명령을 발급하는 데 사용되는 사용자 계정은 자격 증명 변경 권한이 있는 db_backupoperator 데이터베이스 역할에 있어야 합니다.

스토리지 계층에서 사용자(Access Key ID)에는 ListBucketWriteOnly 권한이 모두 있어야 합니다.

복원 권한

복원할 데이터베이스가 없으면 CREATE DATABASE 권한이 있어야 RESTORE를 실행할 수 있습니다. 데이터베이스가 있으면 기본적으로 sysadmindbcreator 고정 서버 역할의 멤버와 데이터베이스의 소유자(dbo)에게 RESTORE 권한이 설정됩니다.

멤버 자격 정보를 서버에서 항상 사용할 수 있는 역할에 RESTORE 권한이 제공됩니다. 고정 데이터베이스 역할의 멤버 자격은 데이터베이스가 액세스 가능한 상태이며 손상되지 않은 경우에만 확인할 수 있는데, RESTORE 실행 시 데이터베이스가 항상 이러한 상태인 것은 아니므로 db_owner 고정 데이터베이스 역할의 멤버에게는 RESTORE 권한이 없습니다.

스토리지 계층에서 사용자(Access Key ID)에는 ListBucketReadOnly 권한이 모두 있어야 합니다.

지원되는 기능

RESTORE에 대해 지원되는 기능에 대한 BACKUP 개략적인 개요입니다.

  1. 단일 백업 파일은 URL당 최대 200,000MiB일 수 있습니다(MAXTRANSFERSIZE를 20MB로 설정 시).
  2. 백업은 최대 64개의 URL에 걸쳐 스트라이프할 수 있습니다.
  3. 미러링이 지원되지만 URL에서만 지원됩니다. URL과 DISK를 모두 사용하는 미러링이 지원되지 않습니다.
  4. 압축이 지원되며 권장됩니다.
  5. 암호화가 지원됩니다.
  6. S3 호환 개체 스토리지를 사용하여 URL에서 복원하는 데는 크기 제한이 없습니다.
  7. 데이터베이스 MAXTRANSFERSIZE 를 복원할 때 는 백업 단계 중에 할당된 값에 따라 결정됩니다.
  8. URL은 가상 호스트 또는 경로 스타일 형식으로 지정할 수 있습니다.
  9. WITH CREDENTIAL이 지원됩니다.
  10. REGION 가 지원되고 기본값은 입니다 us-east-1.
  11. MAXTRANSFERSIZE는 5MB~20MB입니다. S3 커넥터의 기본값은 10MB입니다.

백업에 지원되는 인수

WITH 옵션 S3 엔드포인트 참고
BLOCKSIZE Y MAXTRANSFERSIZE는 파트 크기를 결정합니다.
BUFFERCOUNT Y
COMPRESSION Y
COPY_ONLY Y
CREDENTIAL Y
설명 Y
DIFFERENTIAL Y
ENCRYPTION Y
FILE_SNAPSHOT N
MAXTRANSFERSIZE Y 5MB(5,242,880바이트)~20MB(20,971,520바이트)까지 기본값은 10MB(10,485,760바이트)입니다.
MEDIADESCRIPTION Y
MEDIANAME Y
MIRROR TO Y 다른 URL에서만 작동하며 URL이 있는 MIRROR 및 DISK는 지원되지 않습니다.
NAME Y
NOFORMAT/FORMAT Y
NOINIT/INIT N 추가는 지원되지 않습니다. 백업을 덮어쓰려면 WITH FORMAT을 사용하세요.
NO_CHECKSUM/CHECKSUM Y
NO_TRUNCATE Y
지역 Y 기본값은 'us-east-1'이며 BACKUP_OPTIONS와 함께 사용해야 합니다.
통계 Y

복원에 지원되는 인수

WITH 옵션 S3 엔드포인트 참고
BLOCKSIZE Y MAXTRANSFERSIZE는 파트 크기를 결정합니다.
BUFFERCOUNT N
CHECKSUM | NO_CHECKSUM Y
CREDENTIAL Y
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER Y
FILE N 논리 이름은 RESTORE FROM URL에서 지원되지 않음
FILESTREAM Y
KEEP_CDC Y
KEEP_REPLICATION Y
LOADHISTORY Y
MAXTRANSFERSIZE
MEDIANAME Y
MEDIAPASSWORD N 2012년 SQL Server 이전에 수행된 일부 백업에 필요
MOVE Y
PARTIAL Y
PASSWORD N 2012년 SQL Server 이전에 수행된 일부 백업에 필요
RECOVERY | NORECOVERY | STANDBY Y
지역 Y 기본값은 'us-east-1'이며 RESTORE_OPTIONS와 함께 사용해야 합니다.
REPLACE Y
RESTART Y
RESTRICTED_USER Y
REWIND | NOREWIND N
통계 Y
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Y
STOPAT | STOPATMARK | STOPBEFOREMARK Y
UNLOAD | NOUNLOAD N

지역

S3 호환 개체 스토리지 공급자는 버킷 위치에 대한 특정 지역을 결정하는 기능을 제공할 수 있습니다. 이 선택적 매개 변수를 사용하면 특정 버킷이 속한 지역을 지정하여 더 많은 유연성을 제공할 수 있습니다. 이 매개 변수를 사용하려면 또는 RESTORE_OPTIONS와 함께 BACKUP_OPTIONS 를 사용해야 WITH 합니다. 이러한 옵션을 사용하려면 값을 JSON 형식으로 선언해야 합니다.

값이 선언되지 않으면 us-east-1 이 기본값으로 할당됩니다.

백업 예제:

WITH
    BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'

복원 예제:

WITH
    RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Linux 지원

SQL Server는 사용하는 HTTP REST API의 클라이언트를 구현하기 위해 WinHttp를 사용합니다. HTTP 엔드포인트에서 제공하는 TLS 인증서의 유효성 검사를 위해 OS 인증서 저장소를 사용합니다. 그러나 SQL Server on Linux CA는 /var/opt/mssql/security/ca-certificates에 생성할 미리 정의된 위치에 배치해야 하며 이 폴더에는 첫 50개의 인증서만 저장하고 지원할 수 있습니다.

SQL Server는 시작하는 동안 폴더에서 인증서를 읽고 신뢰 저장소에 추가합니다.

슈퍼 사용자만 폴더에 쓸 수 있어야 하며 mssql 사용자는 읽을 수 있어야 합니다.

지원되지 않는 기능

  • 안전하지 않은 HTTP URL을 사용하여 S3 호환 개체 스토리지에 백업하는 기능은 지원되지 않습니다. 고객은 HTTPS URL을 사용하여 S3 호스트를 설정해야 하며 이 엔드포인트에 대한 유효성 검사는 SQL Server OS 호스트에 설치된 인증서로 실행합니다.
  • S3 호환 개체 스토리지에 대한 백업은 SQL Server Express 및 SQL Server Express with Advanced Services 버전에서 지원되지 않습니다.

제한 사항

S3 호환 개체 스토리지를 사용하는 백업 및 복원의 현재 제한 사항은 다음과 같습니다.

  1. S3 Standard REST API의 현재 제한으로 인해 BACKUP T-SQL 명령이 실행되는 동안 고객의 S3 호환 개체 저장소에 생성된 커밋되지 않은 임시 데이터 파일(진행 중인 다중 파트 업로드 작업으로 인해)은 오류 발생 시 제거되지 않습니다. 이러한 커밋되지 않은 데이터 블록은 BACKUP T-SQL 명령이 실패하거나 취소된 경우 S3 호환 개체 스토리지에서 계속 유지됩니다. 백업에 성공하면 이러한 임시 파일이 개체 저장소에 의해 자동으로 제거되어 최종 백업 파일을 형성합니다. 일부 S3 호환 스토리지 공급자는 가비지 수집기 시스템을 통해 이를 처리합니다.
  2. 전체 URL 길이는 259자로 제한됩니다. 전체 문자열은 s3:// 커넥터 이름을 포함하여 이 제한 사항에서 계산됩니다. 따라서 사용 가능한 한도는 254자입니다. 그러나 쿼리 매개 변수를 도입할 수 있도록 200자 제한을 준수하는 것이 좋습니다.
  3. SQL 자격 증명 이름은 UTF-16 형식에서 128자로 제한됩니다.
  4. 비밀 키 ID는 영숫자 값만 지원합니다.

경로 스타일 및 가상 호스트 스타일

S3에 백업하면 경로 스타일 또는 가상 호스트 스타일 모두에 쓸 URL이 지원됩니다.

경로 스타일 예제: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

가상 호스트 예제: s3://<bucket>.<domain>/<backup_file_name>

예제

자격 증명 만들기

  • ID는 S3 커넥터를 사용 시 항상 'S3 Access Key'여야 합니다.
  • 액세스 키 ID 및 비밀 키 ID에는 콜론이 포함되어서는 안 됩니다. 액세스 키 ID 및 비밀 키 ID는 S3 호환 개체 스토리지에서 만든 사용자 및 암호입니다.
  • 영숫자 값만 허용됩니다.
  • 액세스 키 ID에는 S3 호환 개체 스토리지에 대한 적절한 권한이 있어야 합니다.

다음 예제에서는 개체 스토리지 엔드포인트를 사용하여 인증하기 위한 SQL Server 자격 증명을 만듭니다.

CREATE CREDENTIAL   [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';

URL로 백업

다음 예제에서는 여러 파일에 스트라이프된 개체 스토리지 엔드포인트에 대한 전체 데이터베이스 백업을 수행합니다.

BACKUP DATABASE <db_name>
TO      URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    FORMAT -- overwrite
,       STATS               = 10
,       COMPRESSION;

URL에서 복원

다음 예제에서는 개체 스토리지 엔드포인트 위치에서 데이터베이스 복원을 수행합니다.

RESTORE DATABASE <db_name>
FROM    URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH    REPLACE -- overwrite
,       STATS  = 10;

암호화 및 압축 옵션

다음 예제에서는 암호화 MAXTRANSFERSIZE 를 사용하여 20MB 및 압축으로 데이터베이스를 AdventureWorks2019 백업하고 복원하는 방법을 보여 있습니다.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
GO

CREATE CERTIFICATE AdventureWorks2019Cert
    WITH SUBJECT = 'AdventureWorks2019 Backup Certificate';
GO
-- Backup database
BACKUP DATABASE AdventureWorks2019
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2019_Encrypt.bak'
WITH FORMAT, MAXTRANSFERSIZE = 20971520, COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2019Cert)
GO

-- Restore database
RESTORE DATABASE AdventureWorks2019
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2019_Encrypt.bak'
WITH REPLACE

백업 및 복원에 지역 사용

다음 예제에서는 를 사용하여 REGION_OPTIONSAdventureWorks2019 데이터베이스를 백업하고 복원하는 방법을 보여 줍니다.

-- Backup Database
BACKUP DATABASE AdventureWorks2019
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2019.bak'
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-east-1"}}'

-- Restore Database
RESTORE DATABASE AdventureWorks2019
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2019.bak'
WITH MOVE 'AdventureWorks2019' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2019.mdf'
, MOVE 'AdventureWorks2019_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2019.ldf'
, RESTORE_OPTIONS = '{"s3": {"region":"us-east-1"}}'

다음 단계