Microsoft Azure Blob Storage의 URL에 SQL Server 백업 모범 사례 및 문제 해결

적용 대상:SQL ServerAzure SQL Managed Instance

이 문서에는 Microsoft Azure Blob Storage로 SQL Server를 백업하고 복원하는 모범 사례 및 문제 해결 팁이 포함됩니다.

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

백업 관리

다음 목록에는 백업을 관리하기 위한 일반적인 권장 사항이 포함되어 있습니다.

  • Blob을 실수로 덮어쓰지 않도록 모든 백업의 고유 파일 이름을 사용하는 것이 좋습니다.

  • 컨테이너를 만들 때 필요한 인증 정보를 제공할 수 있는 사용자 또는 계정만 컨테이너의 Blob을 읽거나 쓸 수 있도록 액세스 수준을 프라이빗으로 설정해야 합니다.

  • Azure Virtual Machine에서 실행되는 SQL Server 인스턴스의 SQL Server 데이터베이스의 경우 가상 머신과 동일한 지역에 있는 스토리지 계정을 사용하여 지역 간 데이터 전송 비용을 방지합니다. 동일한 지역을 사용하면 백업 및 복원 작업에 대한 최적의 성능도 보장됩니다.

  • 실패한 백업 작업으로 인해 백업 파일이 잘못될 수 있습니다. 실패한 백업을 주기적으로 확인하고 blob 파일을 삭제하는 것이 좋습니다. 자세한 내용은 활성 임대를 사용하여 백업 Blob 파일 삭제를 참조 하세요.

  • 백업 중 WITH COMPRESSION 옵션을 사용하면 스토리지 비용과 스토리지 트랜잭션 비용이 최소화됩니다. 백업 프로세스를 완료하는 데 걸리는 시간을 줄일 수도 있습니다.

  • BLOCKSIZE SQL Server Backup에서 권장되는 대로 URL로 인수를 설정합니다MAXTRANSFERSIZE.

  • SQL Server는 사용되는 스토리지 중복성 유형에 구애받지 않습니다. 페이지 Blob 및 블록 Blob에 백업은 모든 스토리지 중복성(LRS/ZRS/GRS/RA-GRS/RA-GZRS 등)에 대해 지원됩니다.

대용량 파일 처리

SQL Server 백업 작업에서는 여러 스레드를 사용하여 Azure Blob Storage로의 데이터 전송을 최적화합니다. 그러나 성능은 ISV 대역폭 및 데이터베이스 크기와 같은 다양한 요인에 따라 달라집니다. 온-프레미스 SQL Server 데이터베이스에서 큰 데이터베이스 또는 파일 그룹을 백업하려는 경우 먼저 처리량 테스트를 수행해야 합니다. Azure 스토리지에 대한 SLA 에서는 Blob에 대해 고려 가능한 최대 처리 시간을 제공합니다.

WITH COMPRESSION 백업 관리 섹션에서 권장하는 대로 이 옵션을 사용하는 것은 대용량 파일을 백업할 때 중요합니다.

URL로 백업 또는 URL에서 복원 문제 해결

다음은 Azure Blob Storage로 백업하고 복원할 때 발생하는 문제를 해결하는 몇 가지 간단한 방법입니다.

지원되지 않는 옵션 또는 제한 사항으로 인한 오류를 방지하려면 Microsoft Azure Blob Storage를 사용한 BACKUP SQL Server 백업 및 복원 문서에서 제한 사항 목록과 지원 및 RESTORE 명령 정보를 검토합니다.

초기화 실패

동일한 Blob에 대한 병렬 백업으로 인해 초기화 실패 오류로 인해 백업 중 하나가 실패합니다 .

  • SQL Server 2016(13.x) 이상 버전에서는 URL에 백업하는 데 블록 Blob이 선호됩니다.

  • 페이지 Blob을 BACKUP TO URL사용하는 경우 추적 플래그 3051을 사용하여 다음 형식BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log으로 특정 오류 로그에 대한 로깅을 설정할 수 있습니다. 여기서 \<action> 다음 옵션 중 하나입니다.

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

Windows SQLBackupToUrl이벤트 뷰어 이름을 가진 애플리케이션 로그 아래에서 정보를 찾을 수도 있습니다.

I/O 디바이스 오류로 인해 요청을 수행할 수 없습니다.

큰 데이터베이스를 백업할 때 , MAXTRANSFERSIZEBLOCKSIZE여러 URL 인수를 고려COMPRESSION합니다. Azure Blob Storage에 VLDB 백업을 참조 하세요.

오류:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed:
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

예제 해결 방법:

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536;

디바이스의 메시지 파일 표시가 정렬되지 않음

압축된 백업에서 복원할 때 다음과 같은 오류가 표시될 수 있습니다.

SqlException 3284 occurred. Severity: 16 State: 5
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Reissue the Restore statement with the same block size used to create the backupset: '65536' looks like a possible value.

이 오류를 해결하려면 RESTORE을 지정하여 BLOCKSIZE = 65536 문을 다시 실행하십시오.

실패한 백업 작업으로 인해 활성 임대가 있는 Blob이 발생할 수 있습니다.

활성 임대가 있는 Blob으로 인해 백업하는 동안 오류가 발생했습니다. Failed backup activity can result in blobs with active leases.

백업 문을 다시 사용하는 경우 다음 출력과 유사한 오류로 백업 작업이 실패할 수 있습니다.

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.

활성 임대가 있는 백업 Blob 파일에서 복원 문을 시도하면 다음과 유사한 오류와 함께 복원 작업이 실패합니다.

Exception Message: The remote server returned an error: (409) Conflict..

이러한 오류가 발생하면 Blob 파일을 삭제해야 합니다. 이 시나리오와 이 문제 해결 방법에 대한 자세한 내용은 활성 임대가 있는 백업 Blob Files 삭제를 참조하세요.

OS 오류 50: 요청이 지원되지 않음

데이터베이스를 백업할 때 다음과 같은 이유로 오류가 Operating system error 50(The request is not supported) 표시될 수 있습니다.

  • 지정된 스토리지 계정은 범용 V1/V2가 아닙니다.
  • SAS 토큰은 ? 자격 증명을 만들 때 토큰의 시작 부분에 기호가 있었습니다. 그렇다면 이 기호를 제거합니다.
  • 현재 연결이 Storage Explorer 또는 SSMS(SQL Server Management Studio)를 사용하여 현재 컴퓨터에서 스토리지 계정에 연결할 수 없습니다.
  • SAS 토큰에 할당된 정책이 만료되었습니다. Azure Storage Explorer를 사용하여 새 정책을 만들고 정책을 사용하여 새 SAS 토큰을 만들거나 자격 증명을 변경하고 다시 백업을 시도합니다.
  • 신뢰할 수 있는 루트 인증 저장소에 루트 인증서가 없습니다. 자세한 내용은 Azure 루트 인증 기관을 참조 하세요.

인증 오류

WITH CREDENTIAL은 Azure Blob Storage로 백업하거나 복원하는 데 필요한 새로운 옵션입니다.

자격 증명과 관련된 오류는 다음과 같습니다. The credential specified in the **BACKUP** or **RESTORE** command does not exist.

이 문제를 방지하려면 백업 문에 자격 증명이 없는 경우 T-SQL 문을 포함하여 자격 증명을 만들 수 있습니다. 다음은 사용할 수 있는 예제입니다.

IF NOT EXISTS (
   SELECT *
   FROM sys.credentials
   WHERE credential_identity = 'mycredential'
)
CREATE CREDENTIAL [<credential name>]
   WITH IDENTITY = 'mystorageaccount',
      SECRET = '<storage access key>';

자격 증명이 있지만 백업 명령을 실행하는 데 사용되는 로그인에는 자격 증명에 액세스할 수 있는 권한이 없습니다. 자격 증명 권한 변경과 함께 db_backupoperator 역할의 계정을 사용합니다.

스토리지 계정 이름 및 키 값을 확인합니다. 자격 증명에 저장된 정보는 백업 및 복원 작업에서 사용하는 Azure Storage 계정의 속성 값과 일치해야 합니다.

400(잘못된 요청) 오류

SQL Server 2012(11.x)를 사용하면 다음 출력과 유사한 백업을 수행하는 동안 오류가 발생할 수 있습니다.

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (400) Bad Request.

이는 Azure Storage 계정에서 지원하는 TLS 버전에 의해 발생합니다. 지원되는 TLS 버전을 변경하거나 KB4017023 나열된 해결 방법을 사용합니다.

프록시 오류

프록시 서버를 사용하여 인터넷에 액세스하는 경우 다음과 같은 문제가 발생할 수 있습니다.

프록시 서버에 의한 커넥트온도 제한

프록시 서버에는 분당 연결 수를 제한하는 설정이 있을 수 있습니다. URL에 백업 프로세스는 다중 스레드 프로세스이므로 이 제한을 초과할 수 있습니다. 이 경우 프록시 서버는 연결을 종료합니다. 이 문제를 해결하려면 SQL Server에서 프록시를 사용하지 않도록 프록시 설정을 변경합니다. 다음은 오류 로그에 표시될 수 있는 유형 또는 오류 메시지의 몇 가지 예입니다.

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError: write failure on backup device https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

페이지 Blob을 사용하는 경우 추적 플래그 3051을 사용하여 자세한 정보 로깅을 켜면 로그에 다음 메시지가 표시될 수도 있습니다. HTTP status code 502, HTTP Status Message Proxy Error (The number of HTTP requests per minute exceeded the configured limit. Contact your ISA Server administrator.)

기본 프록시 설정이 선택되지 않음

경우에 따라 기본 설정이 선택되지 않아 다음과 같은 프록시 인증 오류가 발생하는 경우가 있습니다.

A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (407)* **Proxy Authentication Required.

이 문제를 해결하려면 다음 단계를 사용하여 URL에 백업 프로세스가 기본 프록시 설정을 사용할 수 있도록 하는 구성 파일을 만듭니다.

  1. 다음 xml 콘텐츠로 명명된 구성 파일을 만듭니다 BackuptoURL.exe.config .

    <?xml version ="1.0"?>
    <configuration>
        <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy usesystemdefault="true" />
            </defaultProxy>
        </system.net>
    </configuration>
    
  2. SQL Server 인스턴스의 Binn 폴더에 구성 파일을 배치합니다. 예를 들어 컴퓨터 드라이브에 SQL Server가 C 설치되어 있는 경우 구성 파일을 배치합니다 C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. BackuptoURL.exe는 SAS 키를 사용할 때 호출되지 않지만 액세스 키를 사용할 때 트리거됩니다. 선택키를 사용하거나 다음 오류가 발생할 수 있는지 확인합니다.

    운영 체제 오류 50(요청이 지원되지 않습니다.)

일반 오류 및 해결 방법

문제 해결 방법
오류 3063: 백업 블록 Blob 디바이스에 쓰지 https://storageaccount/container/name.bak 못했습니다. 디바이스가 허용되는 블록 제한에 도달했습니다. 이 문제를 해결하려면 여러 파일로 백업 대상을 스트라이프하고 백업 명령에서 다음 매개 변수를 사용해야 합니다. COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536.
오류 3035: 하나 이상의 데이터베이스에 대한 차등 백업이 실패합니다. 이는 복사 전용 백업을 만들지 않는 SQL 데이터베이스 또는 VM(가상 머신) 스냅샷 백업하도록 Azure Backup 서비스를 구성하여 기본 테넌트 계획 또는 SQL 에이전트 주문형 백업 작업이 실패하게 하는 경우에 발생합니다. 이 문제를 해결하려면 레지스트리 키 에서 SQL Server 인스턴스를 호스팅하는 VM에 이러한 레지스트리 키를 [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] 추가하고 추가 "USEVSSCOPYBACKUP"="TRUE"합니다.
오류 3201: 백업이 실패함 - 운영 체제 오류 50(요청이 지원되지 않음). Storage Explorer를 사용하여 SAS(공유 액세스 서명) 토큰 다시 생성: Azure Storage Explorer를 사용하여 새 정책을 만들고 Azure Storage Explorer에서 해당 정책을 사용하여 새 SAS 토큰을 만들 수 있습니다. Azure Storage에서 만들어진 이 새 SAS 토큰을 사용하여 자격 증명을 다시 만들고 백업을 다시 시도합니다. 자세한 내용은 BACKUP TO URL의 알려진 문제를 참조 하세요. NSG(네트워크 보안 그룹) 및/또는 방화벽이 포트 1433 및 443에서 인바운드 및 아웃바운드 연결을 허용하는지 확인합니다.
오류 3271: TLS 오류로 인해 백업이 실패합니다. URL에 백업이 원격 엔드포인트에서 예외를 수신했습니다. SQL Server 버전 2012, 2014 및 2016에서 발생할 수 있습니다. Microsoft Azure Blob Storage 서비스 URL에 백업하는 것은 TLS 1.2와 호환되지 않으며 KB4017023 지침에 따라 수정할 수 있습니다.
오류 3271: URL 백업이 원격 엔드포인트에서 예외를 받았습니다. 예외 메시지: 원격 이름을 확인할 수 없습니다. 잘못된 자격 증명, 비밀 또는 SAS 키를 사용하여 백업을 구성한 경우 이 메시지가 표시됩니다. 자격 증명을 삭제하고 다시 만듭니다. SQL Server 2012/2014의 경우 스토리지 계정 ID 및 액세스 키를사용하고 SQL Server 2016 이상 버전에서는 SAS를 사용합니다.
오류 18210: 예외: 원격 서버에서 오류 (400) 잘못된 요청을 반환했습니다. 해결하려면 스토리지 계정의 최소 TLS 버전을 1.0(스토리지 계정>구성>최소 TLS 버전)으로 변경하거나 KB4017023 설명된 대로 강력한 암호화를 사용하도록 설정합니다.
예외 메시지: 원격 서버에서 오류를 반환했습니다. (412) 현재 Blob에 임대가 있으며 요청에 임대 ID가 지정되지 않았습니다. 크기가 1TB인 Azure Storage Explorer에서 Blob을 식별하고, 임대를 중단하고, Blob을 삭제하고, 백업 작업을 다시 시도합니다.
오류: 원격 서버에서 다음 오류 (403) 사용할 수 없음을 반환했습니다. 스토리지 계정, 자격 증명 및 SAS 토큰을 다시 만들어 문제를 해결합니다.
SQL Server 2012/2014에서 1TB 데이터베이스에 대한 백업이 실패합니다. 1TB 백업은 SQL Server 2016(13.x) 이전의 페이지 Blob에서 알려진 제한 사항입니다. T-SQL 백업 문에 'WITH COMPRESSION' 절을 추가하여 백업 압축을 사용하거나 SQL Server 인스턴스를 SQL Server 2016(13.x) 이상 버전으로 업그레이드합니다.
오류: URL에 백업이 원격 엔드포인트에서 예외를 수신했습니다. 예외 메시지: 원격 서버에서 오류 (416) 지정된 페이지 범위가 잘못됨을 반환했습니다. SQL Server 2012(11.x) 및 SQL Server 2014(12.x)에 있고 백업 크기가 1TB로 증가하는 경우 이를 확인할 수 있습니다. 백업 파일을 스트라이프하거나 백업 압축을 사용하여 해결합니다.
유지 관리 계획을 사용할 때 백업에 실패했습니다. 유지 관리 계획에 몇 가지 버그가 있습니다. T-SQL을 사용하여 백업을 실행해 보세요. T-SQL이 작동하는 경우 데이터베이스를 백업하기 위해 실행할 SQL 에이전트 작업을 만들 수 있습니다.
VM 한도에 도달하여 백업에 실패했습니다. 디스크 IOPS/VM 제한에 도달한 오류가 발생하는 경우 백업 속도가 느려지거나 실패할 수 있습니다. IOPS/VM 제한을 모니터링하려면 Azure Monitor 메트릭을 사용하고 필요한 경우 VM/디스크의 크기를 조정하여 문제를 해결합니다.
원격 서버가 오류를 반환했습니다. (409) SQL Server 2012/2014에 대한 충돌" 계층 구조 네임스페이스가 있는 스토리지 계정은 페이지 Blob이 아닌 블록 Blob에 적합합니다. 이 기능이 없는 스토리지 계정은 SQL Server 2014(12.x)의 BACKUP TO URL에 사용하면 안 됩니다.