다음을 통해 공유


Microsoft Azure Blob Storage의 URL에 대한 SQL Server 백업

적용 대상: SQL Server Azure SQL Managed Instance

이 문서에서는 Microsoft Azure Blob Storage를 백업 대상으로 사용하는 데 필요한 개념, 요구 사항 및 구성 요소를 소개합니다. 백업 및 복원 기능은 DISK 또는 TAPE를 사용할 때와 동일하거나 유사하며 몇 가지 차이점이 있습니다. 이러한 차이점과 몇 가지 코드 예제가 이 문서에서 소개됩니다.

개요

Microsoft Azure Blob Storage로 백업하거나 이 서비스에서 복원하기 위해 구성 요소뿐 아니라 구성 요소 간의 상호 작용을 이해하는 것이 중요합니다.

이 프로세스의 첫 번째 단계에서는 Azure 구독 내에 Azure Storage 계정을 만듭니다. 이 스토리지 계정은 스토리지 계정으로 만든 모든 컨테이너 및 개체에 대한 전체 관리 권한이 있는 관리 계정입니다. SQL Server에서는 Azure Storage 계정 이름 및 해당 액세스 키 값을 사용하여 Microsoft Azure Blob Storage에 인증하고 Blob을 읽고 쓰거나, 읽기 및 쓰기 권한을 부여하는 특정 컨테이너에서 생성된 공유 액세스 서명 토큰을 사용할 수 있습니다. Azure 스토리지 계정에 대한 자세한 내용은 Azure 스토리지 계정 정보 를 참조하고, 공유 액세스 서명에 대한 자세한 내용은 공유 액세스 서명, 1부: SAS 모델 이해를 참조하세요. SQL Server 자격 증명은 해당 인증 정보를 저장하며 백업 또는 복원 작업 중에 사용됩니다.

Azure Storage 및 S3 호환 스토리지

SQL Server 2012 서비스 팩 1 CU2 및 SQL Server 2014에서는 Azure Blob Storage를 가리키는 URL에 백업하는 기능을 도입했으며 익숙한 T-SQL 구문을 사용하여 Azure Storage에 안전하게 백업을 작성합니다. SQL Server 2016(13.x)에서는 보안 정책을 Azure Storage 인증서를 인증하는 안전하고 간단한 방법인 SAS(공유 액세스 서명) 키를 통한 보안 및 Azure의 데이터베이스 파일에 대한 파일 스냅샷 백업을 도입했습니다. SQL Server 2022(16.x)는 백업 및 복원 기능을 사용하여 S3 호환 개체 스토리지에 백업을 작성하는 기능을 도입하며, 이는 백업 디바이스 유형으로 Azure Blob Storage를 사용한 URL에 백업을 사용하는 것과 개념적으로 유사합니다. SQL Server 2022(16.x)는 REST API를 사용하여 새 S3 커넥터에 대한 지원을 추가하여 BACKUP/RESTORE TO/FROM URL 구문을 확장합니다.

이 문서에는 Azure Blob Storage에 대한 URL에 Backup을 사용하는 방법에 대한 정보가 포함되어 있습니다. S3 호환 스토리지에 Backup to URL을 사용하는 방법에 대한 자세한 내용은 S3 호환 개체 스토리지를 사용하여 SQL Server 백업 및 복원을 참조하세요.

Azure Storage 블록 Blob 및 페이지 Blob으로 백업

Microsoft Azure Blob Storage에는 블록 Blob과 페이지 Blob이라는 두 가지 유형의 Blob을 저장할 수 있습니다. SQL Server 2016 이상의 경우 블록 Blob이 선호됩니다.

스토리지 키를 자격 증명에 사용하는 경우 페이지 Blob이 사용되고, 공유 액세스 서명을 사용하는 경우 블록 Blob이 사용됩니다.

Azure Blob Storage로 백업하기 위한 블록 Blob으로의 백업은 SQL Server 2016 이상 버전에서만 제공됩니다. SQL Server 2016 이상을 실행하는 경우 페이지 Blob 대신 블록 Blob에 백업합니다.

기본 이유는 다음과 같습니다.

  • 공유 액세스 서명은 스토리지 키와 비교할 때 Blob 액세스 권한을 부여하는 보다 안전한 방법입니다.
  • 여러 블록 Blob에 백업하면 보다 좋은 백업 및 복원 성능을 얻고 더 큰 데이터베이스 백업을 지원할 수 있습니다.
  • 블록 Blob페이지 Blob보다 저렴합니다.
  • 프록시 서버를 통해 페이지 Blob에 백업해야 하는 고객은 backuptourl.exe를 사용해야 합니다.

Azure Blob Storage에 대용량 데이터베이스를 백업하는 경우에는 Azure SQL Managed Instance T-SQL 차이점, 제한 사항 및 알려진 문제에 나열된 제한 사항이 적용됩니다.

데이터베이스가 너무 크면 다음 중 하나를 수행합니다.

  • 백업 압축 사용 또는
  • 여러 블록 Blob에 백업

Azure Arc로 활성화된 Linux, 컨테이너 및 SQL Managed Instance에 대한 지원

다음을 포함하여 SQL Server 인스턴스가 Linux에서 호스팅되는 경우:

  • 독립 실행형 운영 체제
  • 컨테이너
  • Azure Arc 지원 SQL Managed Instance
  • 기타 모든 Linux 기반 환경

Azure Blob Storage URL 패턴에 대해 지원되는 유일한 백업은 공유 액세스 서명을 사용하는 블록 Blob에 대한 백업입니다.

Microsoft Azure Blob Storage

스토리지 계정: 스토리지 계정은 모든 스토리지 서비스의 시작점입니다. Microsoft Azure Blob Storage에 액세스하려면 먼저 Azure Storage 계정을 만듭니다. 자세한 내용은 스토리지 계정 만들기를 참조하세요.

컨테이너: 컨테이너는 미확인 개체 집합의 그룹화 기능을 제공하며, 미확인 개체를 무제한으로 저장할 수 있습니다. SQL Server 백업을 Azure Blob 스토리지에 쓰려면 최소한 루트 컨테이너를 만들어야 합니다. 컨테이너에서 공유 액세스 서명 토큰을 생성하고 특정 컨테이너의 개체에만 액세스를 허용할 수 있습니다.

Blob: 모든 형식과 크기의 파일입니다. Azure Blob Storage에 저장할 수 있는 Blob 유형에는 블록과 페이지 Blob 두 가지가 있습니다. SQL Server 백업에서는 사용되는 TRANSACT-SQL 구문에 따라 미확인 개체 유형 중 하나를 사용할 수 있습니다. Blob에는 https://<storage account>.blob.core.windows.net/<container>/<blob> URL 형식을 사용하여 주소를 지정할 수 있습니다. 자세한 내용은 Azure Blob Storage 소개를 참조하세요. 페이지 Blob과 블록 Blob에 대한 자세한 내용은 블록 Blob 및 페이지 Blob 이해를 참조하세요.

Azure Blob Storage 계정, 컨테이너 및 미확인 개체의 다이어그램

Azure 스냅샷: 지정 시간에 생성된 Azure blob의 스냅샷입니다. 자세한 내용은 미확인 개체 스냅샷 만들기를 참조하세요. 이제 SQL Server 백업에서는 Azure Blob Storage에 저장된 데이터베이스 파일의 Azure 스냅샷 백업을 지원합니다. 자세한 내용은 Azure의 데이터베이스 파일에 대한 파일-스냅샷 백업을 참조하세요.

SQL Server 구성 요소

URL: URL은 고유한 백업 파일에 대한 URI(Uniform Resource Identifier)를 지정합니다. URL은 SQL Server 백업 파일의 위치와 이름을 제공하는 데 사용됩니다. URL은 컨테이너뿐만 아니라 실제 Blob을 가리킵니다. 미확인 개체가 없으면 새로 만들어집니다. 기존 blob이 지정된 경우에는 “WITH FORMAT” 옵션을 지정하여 blob에서 기존 백업 파일을 덮어쓰지 않으면 BACKUP이 실패합니다.

샘플 URL 값으로 https://ACCOUNTNAME.blob.core.windows.net/<CONTAINER>/FILENAME.bak이 있습니다.

참고 항목

HTTP를 사용한 URL에 백업하는 것은 지원되지 않습니다.

자격 증명: SQL Server 자격 증명은 SQL Server 외부의 리소스에 연결하는 데 필요한 인증 정보를 저장하는 데 사용되는 개체입니다. 여기에서 SQL Server 백업 및 복원 프로세스에서는 자격 증명을 사용하여 Azure Blob Storage와 해당 컨테이너 및 Blob 개체에 인증합니다. 자격 증명은 스토리지 계정의 이름과 스토리지 계정 액세스 키 값 또는 컨테이너 URL과 공유 액세스 서명 토큰을 저장합니다. 자격 증명이 만들어지면 BACKUP/RESTORE 문의 구문에 따라 blob의 유형 및 필요한 자격 증명이 결정됩니다.

공유 액세스 서명을 만드는 방법에 대한 예제는 공유 액세스 서명 만들기 예제를 참조하고, SQL Server 자격 증명을 만들려면 자격 증명 만들기 예제를 참조하세요. 해당 예제는 모두 이 문서의 뒷부분에 있습니다.

자격 증명에 대한 일반 정보는 자격 증명을 참조하세요.

자격 증명이 사용되는 다른 예제에 대한 자세한 내용은 SQL Server 에이전트 프록시 만들기를 참조하세요.

Azure Blob Storage 보안

다음은 Azure Blob Storage로 백업하거나 복원하는 경우 보안 고려 사항과 요구 사항입니다.

  • Azure Blob Storage의 컨테이너를 만들 때 액세스 권한을 프라이빗으로 설정하는 것이 좋습니다. 액세스 권한을 프라이빗으로 설정하면 Azure 계정에 인증하는 데 필요한 정보를 제공할 수 있는 사용자 또는 계정으로 액세스가 제한됩니다.

    Important

    SQL Server에서는 Azure 계정 이름 및 액세스 키 인증 또는 공유 액세스 서명 및 액세스 토큰을 SQL Server 자격 증명에 저장해야 합니다. 이 정보는 백업 또는 복원 작업을 수행할 때 Azure 계정을 인증하는 데 사용됩니다.

    Warning

    Azure Storage는 스토리지 계정에 대한 공유 키 권한 부여 비활성화를 지원합니다. 공유 키 권한 부여를 비활성화하면 URL에 SQL Server 백업이 작동하지 않습니다.

  • BACKUP 또는 RESTORE 명령을 실행하는 데 사용되는 사용자 계정은 모든 자격 증명 변경 권한이 있는 db_backup operator 데이터베이스 역할에 있어야 합니다.

Azure Blob Storage 백업/복원의 제한 사항

  • SQL Server는 페이지 Blob을 사용하여 지원되는 최대 백업 크기를 1TB로 제한합니다. 블록 Blob을 사용하여 지원되는 최대 백업 크기는 약 200GB로 제한됩니다(50,000개 블록 * 4MB MAXTRANSFERSIZE). 블록 Blob은 훨씬 더 큰 백업 크기를 지원하기 위해 스트라이프를 지원합니다. 제한은 최대 64개의 URL이며, 그 결과 수식은 64 stripes * 50,000 blocks * 4MB maxtransfersize = 12.8 TB입니다.

    Important

    단일 블록 Blob에서 지원하는 최대 백업 크기는 200GB이지만 SQL Server는 더 작은 블록 크기로 쓸 수 있으므로 전체 백업이 전송되기 전에 SQL Server가 50,000블록 제한에 도달할 수 있습니다. 특히 차등 또는 비압축 백업을 사용하는 경우 블록 제한을 피하기 위해 스트라이프 백업(200GB보다 작은 경우에도)을 수행합니다.

  • Transact-SQL, SMO, PowerShell cmdlet, SQL Server Management Studio 백업 또는 복원 마법사를 사용하여 백업 또는 복원 문을 실행할 수 있습니다.

  • Azure Storage 계정에 백업은 SAS(공유 액세스 서명) 토큰 또는 스토리지 계정 키를 사용한 인증만 지원합니다. Microsoft Entra ID(이전의 Azure Active Directory)를 사용한 인증을 포함한 다른 모든 인증 방법은 지원되지 않습니다.

  • 논리적 디바이스 이름을 만들 수 없습니다. 따라서 sp_dumpdevice를 사용하거나 SQL Server Management Studio를 통해 URL을 백업 디바이스로 추가하는 기능은 지원되지 않습니다.

  • 기존 백업 Blob에 추가는 지원되지 않습니다. 기존 Blob으로 백업은 WITH FORMAT 옵션을 사용하여 덮어쓸 수만 있습니다. 그러나 파일-스냅샷 백업(WITH FILE_SNAPSHOT 인수 사용)을 사용할 때는 원래 파일-스냅샷 백업을 사용하여 만든 연결 없는 파일-스냅샷이 남아 있는 것을 방지하기 위해 WITH FORMAT 인수가 허용되지 않습니다.

  • 단일 백업 작업에서 여러 blob에 대한 백업은 블록 blob을 사용하고 SQL 자격 증명에 대한 스토리지 계정 키 대신 SAS(공유 액세스 서명) 토큰을 사용하는 경우에만 지원됩니다.

  • BLOCKSIZE 지정은 페이지 Blob에 대해 지원되지 않습니다.

  • MAXTRANSFERSIZE 지정은 페이지 Blob에 대해 지원되지 않습니다.

  • backupset 옵션 RETAINDAYSEXPIREDATE 지정은 지원되지 않습니다.

  • SQL Server는 백업 디바이스 이름이 최대 259자로 제한됩니다. BACKUP TO URL에서 URL - ‘ https://.blob.core.windows.net//.bak ’를 지정하는 데 사용되는 필수 요소에 36자가 사용되며, 계정, 컨테이너 및 blob 이름에 사용할 수 있는 문자는 223자입니다.

  • 2022년 이전의 SQL Server 버전에서는 SAS(공유 액세스 서명) 토큰이 256자로 제한되어 사용할 수 있는 토큰 유형이 제한됩니다(예: 사용자 위임 키 토큰은 지원되지 않음).

  • 서버가 프록시 서버를 통해 Azure에 액세스하는 경우 추적 플래그 1819를 사용하고 다음 방법 중 하나를 통해 WinHTTP 프록시 구성을 설정해야 합니다.

    • Windows XP 또는 Windows Server 2003 이전 버전의 proxycfg.exe 유틸리티.
    • Windows Vista 및 Windows Server 2008 이후 버전의 netsh.exe 유틸리티.
  • Azure Blob Storage의 변경이 불가능한 스토리지는 지원되지 않습니다. 변경이 불가능한 스토리지 정책을 false로 설정합니다.

Azure Blob Storage에서 지원되는 인수 및 문

Azure Blob Storage 백업/복원 문 지원

Backup/Restore 문 지원 여부 예외 설명
BACKUP Y BLOCKSIZE 및 MAXTRANSFERSIZE는 블록 Blob에 대해 지원됩니다. 페이지 Blob에는 지원되지 않습니다. 블록 Blob에 백업하려면 SQL Server 자격 증명에 저장된 공유 액세스 서명이 필요합니다. 페이지 Blob에 백업하려면 SQL Server 자격 증명에 저장된 스토리지 계정 키가 필요하며 WITH CREDENTIAL 인수를 지정해야 합니다.
RESTORE Y SQL Server 자격 증명을 정의해야 하며 스토리지 계정 키를 비밀로 사용하여 SQL Server 자격 증명을 정의할 경우 WITH CREDENTIAL 인수를 지정해야 합니다.
RESTORE FILELISTONLY Y SQL Server 자격 증명을 정의해야 하며 스토리지 계정 키를 비밀로 사용하여 SQL Server 자격 증명을 정의할 경우 WITH CREDENTIAL 인수를 지정해야 합니다.
RESTORE HEADERONLY Y SQL Server 자격 증명을 정의해야 하며 스토리지 계정 키를 비밀로 사용하여 SQL Server 자격 증명을 정의할 경우 WITH CREDENTIAL 인수를 지정해야 합니다.
RESTORE LABELONLY Y SQL Server 자격 증명을 정의해야 하며 스토리지 계정 키를 비밀로 사용하여 SQL Server 자격 증명을 정의할 경우 WITH CREDENTIAL 인수를 지정해야 합니다.
RESTORE VERIFYONLY Y SQL Server 자격 증명을 정의해야 하며 스토리지 계정 키를 비밀로 사용하여 SQL Server 자격 증명을 정의할 경우 WITH CREDENTIAL 인수를 지정해야 합니다.
RESTORE REWINDONLY -

구문과 Backup 문에 대한 자세한 내용은 BACKUP(Transact-SQL)을 참조하세요.

구문과 Restore 문에 대한 자세한 내용은 RESTORE(Transact-SQL)을 참조하세요.

Azure Blob Storage 백업 인수 지원

인수 지원 여부 예외 설명
DATABASE Y
LOG Y
TO (URL) Y DISK 및 TAPE와 달리 URL은 논리적 이름을 지정하거나 만드는 것을 지원하지 않습니다. 이 인수는 백업 파일의 URL 경로를 지정하는 데 사용됩니다.
MIRROR TO Y
WITH 옵션:
CREDENTIAL Y WITH CREDENTIAL은 스토리지 계정 키를 비밀로 사용하여 SQL Server 자격 증명을 정의한 경우 BACKUP TO URL 옵션을 사용하여 Azure Blob Storage에 백업할 때만 지원됩니다.
FILE_SNAPSHOT Y
ENCRYPTION Y WITH ENCRYPTION 인수를 지정하면 SQL Server 파일-스냅샷 백업은 백업을 수행하기 전에 전체 데이터베이스가 TDE로 암호화되었는지 확인하고, 이 경우 데이터베이스의 TDE에 지정된 알고리즘을 사용하여 파일 스냅샷 백업 파일 자체를 암호화합니다. 전체 데이터베이스의 일부 데이터가 암호화되지 않은 경우 백업이 실패합니다(예: 암호화 프로세스가 아직 완료되지 않은 경우).
DIFFERENTIAL Y
COPY_ONLY Y
COMPRESSION|NO_COMPRESSION Y 파일 스냅샷 백업에 지원되지 않습니다.
설명 Y
이름 Y
EXPIREDATE | RETAINDAYS -
NOINIT | INIT - 미확인 개체에 추가할 수 없습니다. 백업을 덮어쓰려면 WITH FORMAT 인수를 사용하세요. 그러나 파일-스냅샷 백업을 사용( WITH FILE_SNAPSHOT 인수 사용)할 때는 원래 백업을 사용하여 만든 분리된 파일-스냅샷이 남아 있는 것을 방지하기 위해 WITH FORMAT 인수는 허용되지 않습니다.
NOSKIP | SKIP -
NOFORMAT | FORMAT Y WITH FORMAT 을 지정하지 않으면 기존 blob으로 백업이 실패합니다. WITH FORMAT을 지정하면 기존 미확인 개체를 덮어씁니다. 그러나 파일-스냅샷 백업을 사용( WITH FILE_SNAPSHOT 인수 사용)할 때는 원래 파일-스냅샷 백업을 사용하여 만든 분리된 파일-스냅샷이 남아 있는 것을 방지하기 위해 FORMAT 인수는 허용되지 않습니다. 그러나 파일-스냅샷 백업을 사용( WITH FILE_SNAPSHOT 인수 사용)할 때는 원래 백업을 사용하여 만든 분리된 파일-스냅샷이 남아 있는 것을 방지하기 위해 WITH FORMAT 인수는 허용되지 않습니다.
MEDIADESCRIPTION Y
MEDIANAME Y
BLOCKSIZE Y 페이지 Blob에 지원되지 않습니다. 블록 Blob에 지원됩니다. 블록 Blob에 허용된 50,000개의 블록 사용을 최적화하려면 BLOCKSIZE=65536을 사용하는 것이 좋습니다.
BUFFERCOUNT Y
MAXTRANSFERSIZE Y 페이지 Blob에 지원되지 않습니다. 블록 Blob에 지원됩니다. 기본값은 1048576입니다. 값의 범위는 최대 4MB이며 65536바이트씩 증가합니다.
블록 Blob에 허용된 50,000개의 블록 사용을 최적화하려면 MAXTRANSFERSIZE=4194304를 사용하는 것이 좋습니다.
NO_CHECKSUM | CHECKSUM Y
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Y
통계 Y
REWIND | NOREWIND -
UNLOAD | NOUNLOAD -
NORECOVERY | STANDBY Y
NO_TRUNCATE Y

Backup 인수에 대한 자세한 내용은 BACKUP(Transact-SQL)을 참조하세요.

Azure Blob Storage 복원 인수 지원

인수 지원 여부 예외 설명
DATABASE Y
LOG Y
FROM (URL) Y FROM URL 인수는 백업 파일의 URL 경로를 지정하는 데 사용됩니다.
WITH 옵션:
CREDENTIAL Y WITH CREDENTIAL은 RESTORE FROM URL 옵션을 사용하여 Microsoft Azure Blob Storage에서 복원할 때만 지원됩니다.
PARTIAL Y
RECOVERY | NORECOVERY | STANDBY Y
LOADHISTORY Y
MOVE Y
REPLACE Y
RESTART Y
RESTRICTED_USER Y
FILE -
PASSWORD Y
MEDIANAME Y
MEDIAPASSWORD Y
BLOCKSIZE Y
BUFFERCOUNT -
MAXTRANSFERSIZE -
CHECKSUM | NO_CHECKSUM Y
STOP_ON_ERROR | CONTINUE_AFTER_ERROR Y
FILESTREAM Y 스냅샷 백업에 지원되지 않습니다.
통계 Y
REWIND | NOREWIND -
UNLOAD | NOUNLOAD -
KEEP_REPLICATION Y
KEEP_CDC Y
ENABLE_BROKER | ERROR_BROKER_CONVERSATIONS | NEW_BROKER Y
STOPAT | STOPATMARK | STOPBEFOREMARK Y

Restore 인수에 대한 자세한 내용은 RESTORE 인수(Transact-SQL)를 참조하세요.

SSMS를 사용하여 백업

SQL Server 자격 증명을 사용하여 SQL Server Management Studio의 백업 작업을 통해 URL에 데이터베이스를 백업할 수 있습니다.

참고 항목

SQL Server 파일 스냅샷 백업을 만들거나 기존 미디어 세트를 덮어쓰려면 SQL Server Management Studio의 백업 작업 대신 Transact-SQL, Powershell 또는 C#을 사용해야 합니다.

다음 단계에서는 Azure Storage로 백업할 수 있도록 SQL Server Management Studio에서 변경된 데이터베이스 백업 작업에 대해 설명합니다.

  1. 개체 탐색기에서 SQL Server 데이터베이스 엔진의 인스턴스에 연결하고 해당 인스턴스를 확장합니다.

  2. 데이터베이스를 확장하고 원하는 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 태스크를 가리키고 백업...을 선택합니다.

  3. 대상 섹션의 일반 페이지에 있는 백업 대상: 드롭다운 목록에서 URL 옵션을 사용할 수 있습니다. URL 옵션은 Microsoft Azure Storage에 백업을 만드는 데 사용됩니다. 추가를 선택하면 백업 대상 선택 대화 상자가 열립니다.

    1. Azure Storage 컨테이너: 백업 파일을 저장할 Microsoft Azure Storage 컨테이너의 이름입니다. 드롭다운 목록에서 기존 컨테이너를 선택하거나 컨테이너를 수동으로 입력합니다.

    2. 공유 액세스 정책: 수동으로 입력한 컨테이너에 대한 공유 액세스 서명을 입력합니다. 기존 컨테이너를 선택한 경우에는 이 필드를 사용할 수 없습니다.

    3. 백업 파일: 백업 파일의 이름입니다.

    4. 새 컨테이너: 공유 액세스 서명이 없는 기존 컨테이너를 등록하는 데 사용됩니다. Microsoft Azure 구독에 연결을 참조하세요.

참고 항목

추가는 단일 미디어 세트에 대해 여러 백업 파일과 스토리지 컨테이너를 지원합니다.

URL을 대상으로 선택하는 경우 미디어 옵션 페이지의 특정 옵션이 비활성화됩니다. 다음 문서에서는 데이터베이스 백업 대화 상자에 대한 자세한 정보를 제공합니다.

유지 관리 계획으로 백업

앞에서 설명한 백업 작업과 유사하게 SQL Server Management Studio의 유지 관리 계획 마법사에는 대상 옵션 중 하나로 URL과 SQL 자격 증명과 같이 Azure 스토리지로 백업하는 데 필요한 기타 지원 개체가 포함되어 있습니다. 자세한 내용은 Using Maintenance Plan WizardDefine Backup Tasks를 참조하세요.

참고 항목

공유 액세스 토큰을 사용하여 스트라이프 백업 집합, SQL Server 파일-스냅샷 백업 또는 SQL 자격 증명을 을 만들려면 유지 관리 계획 마법사의 백업 작업 대신 TRANSACT-SQL, Powershell 또는 C#을 사용해야 합니다.

SSMS로 복원

데이터베이스 복원 작업에는 복원할 디바이스로 URL이 포함됩니다. 다음 단계에서는 복원 작업을 사용하여 Azure Blob Storage에서 복원하는 방법을 설명합니다.

  1. 데이터베이스를 마우스 오른쪽 단추로 클릭하고 데이터베이스 복원...을 선택합니다.

  2. 일반 페이지의 원본 섹션에서 디바이스를 선택합니다.

  3. 찾아보기(...) 단추를 선택하여 백업 디바이스 선택 대화 상자를 엽니다.

  4. 백업 미디어 유형: 드롭다운 목록에서 URL 을 선택합니다. 추가 를 선택하여 백업 파일 위치 선택 대화 상자를 엽니다.

    1. Azure Storage 컨테이너: 백업 파일이 포함된 Microsoft Azure Storage 컨테이너의 정규화된 이름입니다. 드롭다운 목록에서 기존 컨테이너를 선택하거나 정규화된 컨테이너 이름을 수동으로 입력합니다.

    2. 공유 액세스 서명: 지정된 컨테이너에 대한 공유 액세스 서명을 입력하는 데 사용됩니다.

    3. 추가: 공유 액세스 서명이 없는 기존 컨테이너를 등록하는 데 사용됩니다. Microsoft Azure 구독에 연결을 참조하세요.

    4. 확인: SQL Server가 제공된 SQL 자격 증명 정보를 사용하여 Microsoft Azure Storage에 연결하고 Microsoft Azure에서 백업 파일 찾기 대화 상자를 엽니다. 스토리지 컨테이너에 있는 백업 파일이 이 페이지에 표시됩니다. 복원하는 데 사용할 파일을 선택하고 확인을 선택합니다. 그러면 백업 디바이스 선택 대화 상자로 돌아가고, 이 대화 상자에서 확인을 선택하면 복원을 완료할 수 있는 기본 복원 대화 상자로 돌아갑니다.

    데이터베이스 복원(일반 페이지)

    데이터베이스 복원(파일 페이지)

    데이터베이스 복원(옵션 페이지)

코드 예제

이 섹션에는 다음 예제가 포함되어 있습니다.

참고 항목

Azure Blob Storage에서 SQL Server 2016을 사용하는 방법에 대한 자습서는 자습서: SQL Server 데이터베이스와 함께 Azure Blob Storage 사용을 참조하세요.

공유 액세스 서명 만들기

다음 예제에서는 새로 만든 컨테이너에서 SQL Server 자격 증명을 만드는 데 사용할 수 있는 공유 액세스 서명을 만듭니다. 이 스크립트는 저장된 액세스 정책에 연결된 공유 액세스 서명을 만듭니다. 자세한 내용은 공유 액세스 서명, 1부: SAS 모델 이해를 참조하세요. 또한 스크립트는 SQL Server에 자격 증명을 만드는 데 필요한 T-SQL 명령을 작성합니다.

참고 항목

이 예제에는 Microsoft Azure Powershell이 필요합니다. Azure PowerShell 설치 및 사용에 대한 자세한 내용은 Azure PowerShell을 설치 및 구성하는 방법을 참조하세요.
이러한 스크립트는 Azure PowerShell 5.1.15063을 사용하여 확인되었습니다.

저장된 액세스 정책에 연결된 공유 액세스 서명

# Define global variables for the script  
$prefixName = '<a prefix name>'  # used as the prefix for the name for various objects  
$subscriptionName='<your subscription name>'   # the name of subscription name you will use  
$locationName = '<a data center location>'  # the data center region you will use  
$storageAccountName= $prefixName + 'storage' # the storage account name you will create or use  
$containerName= $prefixName + 'container'  # the storage container name to which you will attach the SAS policy with its SAS token  
$policyName = $prefixName + 'policy' # the name of the SAS policy  

# Set a variable for the name of the resource group you will create or use  
$resourceGroupName=$prefixName + 'rg'

# adds an authenticated Azure account for use in the session
Connect-AzAccount

# set the tenant, subscription and environment for use in the rest of
Set-AzContext -SubscriptionName $subscriptionName

# create a new resource group - comment out this line to use an existing resource group  
New-AzResourceGroup -Name $resourceGroupName -Location $locationName

# Create a new ARM storage account - comment out this line to use an existing ARM storage account  
New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName   

# Get the access keys for the ARM storage account  
$accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName  

# Create a new storage account context using an ARM storage account  
$storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].value 

# Creates a new container in Azure Blob Storage  
$container = New-AzStorageContainer -Context $storageContext -Name $containerName  
$cbc = $container.CloudBlobContainer  

# Sets up a Stored Access Policy and a Shared Access Signature for the new container  
$policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission "rwld"
$sas = New-AzStorageContainerSASToken -Policy $policyName -Context $storageContext -Container $containerName
Write-Host 'Shared Access Signature= '$($sas.TrimStart('?'))''  

# Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature  
Write-Host 'Credential T-SQL'  
$tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='Shared Access Signature', SECRET='{1}'" -f $cbc.Uri,$sas.TrimStart('?')   
$tSql | clip  
Write-Host $tSql  

스크립트를 성공적으로 실행한 후에는 CREATE CREDENTIAL 명령을 쿼리 도구에 복사하고 SQL Server 인스턴스에 연결하고 명령을 실행하여 공유 액세스 서명으로 자격 증명을 만듭니다.

자격 증명 만들기

다음 예제에서는 Azure Blob Storage 인증용 SQL Server 자격 증명을 만듭니다. 다음 중 하나를 수행합니다.

  1. 공유 액세스 서명 사용

    이전 스크립트를 실행하여 공유 액세스 서명을 만든 경우 SQL Server 인스턴스에 연결된 쿼리 편집기로 CREATE CREDENTIAL을 복사하고 명령을 실행합니다.

    다음 T-SQL은 공유 액세스 서명을 사용하기 위한 자격 증명을 만드는 예입니다.

    IF NOT EXISTS  
    (SELECT * FROM sys.credentials   
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>')  
    CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] 
       WITH IDENTITY = 'SHARED ACCESS SIGNATURE',  
       SECRET = '<SAS_TOKEN>';  
    
  2. 스토리지 계정 ID 및 액세스 키 사용

    IF NOT EXISTS  
    (SELECT * FROM sys.credentials   
    WHERE name = '<mycredentialname>')  
    CREATE CREDENTIAL [<mycredentialname>] WITH IDENTITY = '<mystorageaccountname>'  
    ,SECRET = '<mystorageaccountaccesskey>';  
    

전체 데이터베이스 백업 수행

다음 예제에서는 Azure Blob Storage로 AdventureWorks2022 데이터베이스의 전체 데이터베이스 백업을 수행합니다. 다음 샘플 중 하나를 사용합니다.

  1. 공유 액세스 서명을 사용하는 끝 URL

    BACKUP DATABASE AdventureWorks2022   
    TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022.bak';  
    GO   
    
  2. 스토리지 계정 ID 및 액세스 키를 사용하는 끝 URL

    BACKUP DATABASE AdventureWorks2022  
    TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022.bak'   
          WITH CREDENTIAL = '<mycredentialname>'   
         ,COMPRESSION  
         ,STATS = 5;  
    GO
    

STOPAT를 사용하여 지정 시간으로 복원

다음 예에서는 지정 시간의 상태로 AdventureWorks2022 샘플 데이터베이스를 복원하고 복원 작업을 보여 줍니다.

공유 액세스 서명을 사용하는 시작 URL

RESTORE DATABASE AdventureWorks2022 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_2015_05_18_16_00_00.bak'   
WITH MOVE 'AdventureWorks2022_data' to 'C:\Program Files\Microsoft SQL Server\<myinstancename>\MSSQL\DATA\AdventureWorks2022.mdf'  
,MOVE 'AdventureWorks2022_log' to 'C:\Program Files\Microsoft SQL Server\<myinstancename>\MSSQL\DATA\AdventureWorks2022.ldf'  
,NORECOVERY  
,REPLACE  
,STATS = 5;  
GO   

RESTORE LOG AdventureWorks2022 FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2022_2015_05_18_18_00_00.trn'   
WITH   
RECOVERY   
,STOPAT = 'May 18, 2015 5:35 PM'   
GO