Microsoft Azure의 SQL Server 데이터 파일
적용 대상: SQL Server
Microsoft Azure의 SQL Server Data Files를 사용하면 Blob으로 저장된 SQL Server 데이터베이스 파일에 대한 기본 지원을 사용할 수 있습니다. 이를 통해 온프레미스에서 실행 중인 SQL 서버 또는 Microsoft Azure의 가상 시스템에서 데이터를 위한 전용 저장 위치를 Microsoft Azure Blob storage에 생성할 수 있습니다. 또한 컴퓨터 간에 데이터베이스를 이동하는 프로세스를 간소화합니다. 한 컴퓨터에서 데이터베이스를 분리하고 다른 컴퓨터에 연결할 수 있습니다. 또한 Microsoft Azure Storage에서 또는 Microsoft Azure Storage로 복원할 수 있도록 하여 데이터베이스 백업 파일에 대한 대체 스토리지 위치를 제공합니다. 따라서 데이터 가상화, 데이터 이동, 보안 및 가용성에 대한 몇 가지 이점과 고가용성 및 탄력적 크기 조정을 위한 간편한 저렴한 비용 및 유지 관리를 제공하여 여러 하이브리드 솔루션을 사용할 수 있습니다.
Important
Azure Blob Storage에 시스템 데이터베이스를 저장하는 것은 권장되지 않으며 지원되지 않습니다.
이 문서에서는 SQL Server 데이터 파일을 Microsoft Azure 스토리지 서비스에 저장하는 데 중요한 개념 및 고려 사항에 대해 설명합니다.
이 기능을 사용하는 방법에 대한 실제 실습 환경은 자습서: SQL Server 데이터베이스에서 Microsoft Azure Blob Storage 사용 방법을 참조하세요.
왜 Microsoft Azure의 SQL Server 데이터 파일을 사용하나요?
쉽고 빠른 마이그레이션: 이 기능은 애플리케이션 변경 없이 온-프레미스 내 머신 간에 또는 온-프레미스와 클라우드 환경 간에 데이터베이스를 한 번에 하나씩 이동하여 마이그레이션 프로세스를 간소화합니다. 따라서 기존 온-프레미스 인프라를 유지 관리하는 동안 증분 마이그레이션을 지원합니다. 또한 온-프레미스 환경의 여러 위치에서 애플리케이션을 실행해야 할 경우 중앙 집중식 데이터 스토리지에 액세스하여 애플리케이션 논리를 간소화합니다. 경우에 따라 지리적으로 분산된 위치에 컴퓨터 센터를 신속하게 설치하여 여러 원본에서 데이터를 수집해야 할 수도 있습니다. Azure Data Files를 사용하면 데이터를 한 위치에서 다른 위치로 이동하는 대신 많은 데이터베이스를 Microsoft Azure 페이지 Blob으로 저장한 다음 Transact-SQL 스크립트를 실행하여 로컬 컴퓨터 또는 가상 머신에 데이터베이스를 만들 수 있습니다.
비용과 무제한 스토리지: 이 기능을 사용하면 온-프레미스 컴퓨팅 리소스를 활용하는 동시에 Microsoft Azure에서 무제한 오프사이트 스토리지를 사용할 수 있습니다. Microsoft Azure를 스토리지 위치로 사용하는 경우 하드웨어 관리 오버헤드 없이 애플리케이션 논리에 쉽게 집중할 수 있습니다. 온-프레미스에서 계산 노드가 손실되더라도 데이터를 이동하지 않고 새 계산 노드를 설정할 수 있습니다.
고가용성 및 재해 복구: Microsoft Azure에서 SQL Server 데이터 파일을 사용하면 고가용성 및 재해 복구 솔루션을 간소화할 수 있습니다. 예를 들어 Microsoft Azure의 가상 머신 또는 SQL Server 인스턴스가 충돌하는 경우 Blob에 대한 링크를 다시 설정하여 새 SQL Server 인스턴스에서 데이터베이스를 다시 만들 수 있습니다.
보안 이점: Azure의 SQL Server 데이터 파일을 사용하면 컴퓨팅 인스턴스를 스토리지 인스턴스와 분리할 수 있습니다. 암호 해독이 컴퓨팅 인스턴스에서만 발생하지만 스토리지 인스턴스에서는 발생하지 않는 완전히 암호화된 데이터베이스를 가질 수 있습니다. 즉, 물리적으로 데이터와 분리된 TDE(투명한 데이터 암호화) 인증서를 사용하여 퍼블릭 클라우드의 모든 데이터를 암호화할 수 있습니다. TDE 키를 master 데이터베이스에 저장한 다음 이
master
데이터베이스를 물리적으로 안전한 온-프레미스 컴퓨터에 로컬로 저장하고 로컬로 백업할 수 있습니다. 이러한 로컬 키를 사용하여 Microsoft Azure 스토리지에 있는 데이터를 암호화할 수 있습니다. 클라우드 스토리지 계정 자격 증명을 도난당한 경우에도 TDE 인증서가 항상 온-프레미스에 있기 때문에 데이터는 계속 안전하게 유지됩니다.스냅샷 백업: 이 기능을 사용하면 Azure 스냅샷을 사용하여 Azure Blob Storage를 사용하여 저장된 데이터베이스 파일에 대해 거의 즉시 백업 및 더 빠른 복원을 제공할 수 있습니다. 이 기능을 사용하면 백업 및 복원 정책을 단순화할 수 있습니다. 자세한 내용은 Azure의 데이터베이스 파일에 대한 파일-스냅샷 백업을 참조하세요.
개념 및 요구 사항
Azure 디스크는 엔터프라이즈 수준 비즈니스 연속성 및 재해 복구 솔루션과 호환됩니다. 데이터베이스를 Blob 또는 Azure Premium Files에 직접 저장하는 경우 데이터는 인프라, 관리 및 모니터링을 위해 VM과 자동으로 연결되지 않습니다.
데이터베이스 파일을 페이지 Blob에 배치하는 것은 간단하고 사용자에게 친숙한 Azure Disks를 사용하는 것보다 더 고급 기능입니다.
기본 지침은 백업을 위한 데이터 복사본을 만들거나 데이터 크기 작업으로 복원하지 않아도 되는 시나리오가 없는 한 Azure Disks를 사용하는 것입니다. 고가용성 및 재해 복구의 경우 수명 주기 관리, 다중 지역 지원, 일시 삭제 및 백업의 Blob Storage의 다른 모든 기능을 얻을 수 있으므로 URL 또는 Blob Storage에 대한 관리되는 백업을 사용하는 것이 파일 스냅샷 백업보다 훨씬 더 유용합니다.
Azure Storage 개념
Azure의 SQL Server 데이터 파일 기능을 사용할 경우 Azure에서 스토리지 계정과 컨테이너를 만들어야 합니다. 그런 다음 컨테이너의 정책에 대한 정보와 컨테이너에 액세스하는 데 필요한 공유 액세스 서명을 포함하는 SQL Server 자격 증명을 만들어야 합니다.
Microsoft Azure에서 Azure Storage 계정은 Blob에 액세스하기 위한 가장 높은 수준의 네임스페이스를 나타냅니다. 스토리지 계정에는 총 크기가 스토리지 한도 미만인 경우 무제한의 컨테이너가 포함될 수 있습니다. 스토리지 제한에 대한 최신 정보는 Azure 구독 및 서비스 제한, 할당량 및 제약 조건을 참조하십시오. 컨테이너는 Blob 집합의 그룹화를 제공합니다. 모든 Blob은 컨테이너에 있어야 합니다. 계정에 포함될 수 있는 컨테이너의 개수 제한은 없습니다. 마찬가지로 컨테이너에 저장될 수 있는 Blob의 개수가 제한되지 않습니다.
Azure Blob Storage 서비스에 저장할 수 있는 Blob 유형에는 블록과 페이지 Blob 두 가지가 있습니다. 이 기능은 파일의 바이트 범위가 자주 수정될 때 더 효율적인 페이지 블롭을 사용합니다. 다음 URL 형식을 사용하여 블롭에 액세스할 수 있습니다.: https://storageaccount.blob.core.windows.net/<container>/<blob>
참고 항목
SQL Server 데이터 파일에는 블록 Blob을 사용할 수 없습니다. 페이지 Blob을 사용해야 합니다.
Azure 청구 고려 사항
의사 결정 및 계획 과정에서 Azure 서비스 사용 비용에 대한 예측은 중요한 사항입니다. Azure Storage에 SQL Server 데이터 파일을 저장할 경우 스토리지 및 트랜잭션과 관련된 비용을 지불해야 합니다. 또한 Azure Storage에서 SQL Server Data Files를 구현하려면 암묵적으로 45~60초마다 Blob 임대를 갱신해야 합니다. 또한 데이터베이스 파일(예: .mdf 또는 .ldf)당 트랜잭션 비용이 발생합니다. Azure Storage 및 Azure Virtual Machines의 사용과 관련한 월별 비용을 예측하려면 Azure 가격 책정 페이지의 정보를 사용하세요.
SQL Server 개념
SQL Server 데이터 파일에 Azure 페이지 Blob을 사용하려면 다음을 수행합니다.
컨테이너에 정책을 만들고 공유 액세스 서명(SAS)도 생성합니다.
데이터 또는 로그 파일에 사용되는 각 컨테이너에 대해 컨테이너 경로와 이름이 일치하는 SQL Server 자격 증명을 생성합니다.
Azure Storage 컨테이너, 관련 정책 이름 및 SAS 키에 대한 정보를 SQL Server 자격 증명 저장소에 저장합니다.
다음 예에서는 Azure Storage 컨테이너를 만들고 읽기, 쓰기 및 나열 권한이 있는 정책을 만들었다고 가정합니다. 컨테이너에 대한 정책을 만들면 메모리에 암호화되지 않은 상태로 유지해도 안전하고 SQL Server에서 컨테이너의 Blob 파일에 액세스하는 데 필요한 SAS 키가 생성됩니다.
다음 코드 스니펫에서 '<your SAS key>'
을(를) SAS 키로 대체합니다. SAS 키는 다음과 같습니다 'sr=c&si=<MYPOLICYNAME>&sig=<THESHAREDACCESSSIGNATURE>'
.
CREATE CREDENTIAL [https://testdb.blob.core.windows.net/data]
WITH IDENTITY='SHARED ACCESS SIGNATURE',
SECRET = '<your SAS key>'
CREATE DATABASE testdb
ON
( NAME = testdb_dat,
FILENAME = 'https://testdb.blob.core.windows.net/data/TestData.mdf' )
LOG ON
( NAME = testdb_log,
FILENAME = 'https://testdb.blob.core.windows.net/data/TestLog.ldf')
Important
컨테이너에 데이터 파일에 대한 활성 참조가 있는 경우 해당 SQL Server 자격 증명을 삭제하려고 하면 실패합니다.
자세한 내용은 Azure Storage 리소스에 대한 액세스 관리를 참조하세요.
보안
다음은 Azure Storage에 SQL Server Data Files를 저장할 때의 보안 고려 사항 및 요구 사항입니다.
Azure Blob Storage의 컨테이너를 만들 때 액세스 권한을 프라이빗으로 설정하는 것이 좋습니다. 액세스 형식을 프라이빗으로 설정하면 Azure 계정 소유자만 컨테이너 및 BLOB 데이터를 읽을 수 있습니다.
Azure Storage에 SQL Server 데이터베이스 파일을 저장할 때 컨테이너, Blob, 큐 및 테이블에 대한 제한된 액세스 권한을 부여하는 URI인 공유 액세스 서명을 사용해야 합니다. 공유 액세스 서명을 사용하면 SQL Server에서 Azure Storage 계정 키를 공유하지 않고도 스토리지 계정의 리소스에 액세스할 수 있습니다.
또한 데이터베이스에 대한 기존 온-프레미스 보안 사례를 계속 구현하는 것이 좋습니다.
설치 필수 구성 요소
Azure에 SQL Server 데이터 파일을 저장할 경우 설치를 위한 사전 요구 사항은 다음과 같습니다.
SQL Server 온-프레미스: SQL Server 2016 및 이후 버전에 이 기능이 포함됩니다. 최신 버전의 SQL Server를 다운로드하는 방법을 알아보려면 SQL Server를 참조하세요.
Azure 가상 머신에서 실행 중인 SQL Server: Azure 가상 머신에 SQL Server를 설치하는 경우 SQL Server 2016을 설치하거나 기존 인스턴스를 업데이트하세요. 마찬가지로 SQL Server 2016 플랫폼 이미지를 사용하여 Azure에서 새 가상 머신을 만들 수도 있습니다.
제한 사항
SQL Server 워크로드의 성능 특성으로 인해 SQL Server 데이터 파일은 Azure Blob Storage에서 페이지 Blob으로 구현됩니다. 블록 Blob 또는 Azure Data Lake Storage 같은 다른 유형의 Blob 스토리지는 지원되지 않습니다.
이 기능의 현재 릴리스에서는 Azure Storage에 FileStream 데이터를 저장할 수 없습니다. Azure Storage에 저장된 데이터 파일도 포함하는 데이터베이스에 FileStream 데이터를 저장할 수 있지만 모든 FileStream 데이터 파일은 로컬 스토리지에 저장해야 합니다. FileStream 데이터는 로컬 스토리지에 있어야 하므로 Azure Storage를 사용하여 컴퓨터 간에 이동할 수 없으므로 기존 기술을 계속 사용하여 FileStream과 연결된 데이터를 다른 컴퓨터 간에 이동하는 것이 좋습니다.
현재 한 번에 하나의 SQL Server 인스턴스만 Azure Storage의 지정된 데이터베이스 파일에 액세스할 수 있습니다. 활성 데이터베이스 파일이 있는 인스턴스 A가 온라인 상태인 동안 동일한 데이터 파일을 가리키는 데이터베이스를 포함하는 인스턴스 B를 실수로 시작한 경우, 두 번째 인스턴스에서는 데이터베이스가 시작되지 않고 다음 오류 코드
5120 Unable to open the physical file "%.\*ls". Operating system error %d: "%ls"
이(가) 표시됩니다..mdf, .ldf 및 .ndf 파일만 Azure의 SQL Server 데이터 파일 기능을 사용하여 Azure 스토리지에 저장할 수 있습니다.
Azure에서 SQL Server Data Files 기능을 사용하는 경우 스토리지 계정에 대한 지역 복제가 지원되지 않습니다. 스토리지 계정이 지리적으로 복제되는 동안 지리적 장애 조치(failover)가 발생할 경우 데이터베이스가 손상될 수 있습니다.
용량 제한 사항은 Blob Storage 소개를 참조하세요.
Azure Storage의 SQL Server 데이터 파일 기능을 사용하여 BLOB 스토리지에 메모리 내 OLTP 데이터를 저장할 수 없습니다. 메모리 내 OLTP는 FileStream에 종속되지만 이 기능의 현재 릴리스에서는 Azure Storage에 FileStream 데이터를 저장할 수 없기 때문입니다.
Azure의 SQL Server 데이터 파일 기능을 사용할 경우 SQL Server에서는
master
데이터베이스에 설정된 데이터 정렬을 사용하여 모든 URL 또는 파일 경로를 비교합니다.주 복제본의 데이터베이스에 새 데이터베이스 파일을 추가하지 않는 한 Always On 가용성 그룹이 지원됩니다. 데이터베이스 작업 중 주 복제본의 데이터베이스에서 새 파일을 만들어야 하는 경우, 먼저 보조 노드에서 가용성 그룹을 사용하지 않도록 설정합니다. 그런 다음 데이터베이스에서 데이터베이스 작업을 수행하고 주 복제본에서 데이터베이스를 백업합니다. 그런 다음 데이터베이스를 보조 복제본으로 복원합니다. 완료되면 보조 노드에서 Always On 가용성 그룹을 다시 사용하도록 설정합니다.
참고 항목
Azure의 SQL Server 데이터 파일 기능을 사용할 경우 Always On 장애 조치(failover) 클러스터 인스턴스는 지원되지 않습니다.
정상적인 작업 중에 SQL Server는 임시 임대를 사용하여 스토리지에 대한 Blob을 예약하고 45~60초마다 각 Blob 임대를 갱신합니다. 서버가 충돌하는 상태에서 동일한 Blob을 사용하도록 구성된 SQL Server의 다른 인스턴스가 시작될 경우 새 인스턴스는 Blob의 기존 임대가 만료될 때까지 최대 60초 동안 기다립니다. 데이터베이스를 다른 인스턴스에 연결하고 60초 이내에 임대가 만료될 때까지 기다릴 수 없는 경우 Blob에서 임대를 명시적으로 해제할 수 있습니다.
도구 및 프로그래밍 참조 지원
이 섹션에서는 Azure Storage에 SQL Server 데이터 파일을 저장할 때 사용할 수 있는 도구 및 프로그래밍 참조 라이브러리에 대해 설명합니다.
PowerShell 지원
PowerShell cmdlet을 통해 파일 경로 대신 Blob Storage URL을 참조하여 Blob Storage 서비스에 SQL Server 데이터 파일을 저장합니다. 다음 URL 형식을 사용하여 BLOB에 액세스합니다.: https://storageaccount.blob.core.windows.net/<container>/<blob>
SQL Server 개체 및 성능 카운터 지원
SQL Server 2014부터 Azure Storage의 SQL Server 데이터 파일 기능과 함께 사용할 새 SQL Server 개체가 추가되었습니다. 이 새 SQL Server 개체를 SQL Server, HTTP_STORAGE_OBJECT라고 하며, SQL Server를 Azure Storage와 함께 실행할 때 시스템 모니터에서 활동을 모니터링하는 데 사용할 수 있습니다.
SQL Server Management Studio 지원
SQL Server Management Studio를 사용하면 여러 대화 창을 통해 이 기능을 사용할 수 있습니다. 예를 들어 https://teststorageaccnt.blob.core.windows.net/testcontainer/
은(는) 스토리지 컨테이너의 URL 경로를 나타냅니다. 새 데이터베이스, 데이터베이스 연결 및 데이터베이스 복원과 같은 여러 대화 상자 창에서 이 경로를 볼 수 있습니다. 자세한 내용은 자습서: SQL Server 데이터베이스와 함께 Azure Blob Storage 사용을 참조하세요.
SMO(SQL Server 관리 개체) 지원
Azure의 SQL Server 데이터 파일 기능을 사용할 경우 모든 SMO(SQL Server 관리 개체)가 지원됩니다. SMO 개체에 파일 경로가 필요한 경우 https://teststorageaccnt.blob.core.windows.net/testcontainer/
같은 로컬 파일 경로 대신 BLOB URL 형식을 사용합니다. SMO(SQL Server Management Objects)에 대한 자세한 내용은 SQL Server 온라인 설명서의 SMO(SQL Server Management Objects) 프로그래밍 가이드를 참조하세요.
Transact-SQL 지원
이 기능이 추가됨에 따라 Transact-SQL 표면적에 다음과 같은 변경 사항이 도입되었습니다.
sys.master_files
시스템 뷰의 새 int 열,credential_id
.credential_id
열은 Azure Storage 데이터 파일에 대해 생성된 인증 정보를sys.credentials
에 교차 참조할 수 있도록 하는 데 사용됩니다. 이 열을 문제 해결에 사용할 수 있습니다. 예를 들어 이 열을 사용하는 데이터베이스 파일이 있는 경우 자격 증명을 삭제할 수 없습니다.
Microsoft Azure의 SQL Server 데이터 파일 문제 해결
지원되지 않는 기능 또는 제한 사항으로 인한 오류를 방지하려면 먼저 제한 사항을 검토합니다.
Azure Storage의 SQL Server 데이터 파일 기능을 사용할 때 발생할 수 있는 오류 목록은 다음과 같습니다.
인증 오류
활성 데이터베이스 파일에서 사용되므로 자격 증명 '%.*ls'을(를) 삭제할 수 없습니다.
해결 방법: Azure Storage의 활성 데이터베이스 파일에서 여전히 사용 중인 자격 증명을 삭제하려고 하면 이 오류가 표시될 수 있습니다. 자격 증명을 삭제하려면 이 데이터베이스 파일을 포함하는 연결된 BLOB을 먼저 삭제해야 합니다. 활성 임대가 있는 Blob을 삭제하려면 먼저 임대를 해제해야 합니다.공유 액세스 서명이 컨테이너에 올바르게 만들어지지 않았습니다.
해결 방법: 컨테이너에 공유 액세스 서명을 올바르게 만들었는지 확인합니다. 자습서: SQL Server 데이터베이스와 함께 Azure Blob 스토리지 사용에서 2단원에 제공된 지침을 검토하세요.SQL Server 자격 증명이 올바르게 만들어지지 않았습니다.
해결: ID 필드에서 '공유 액세스 서명'을 사용하고 암호를 올바르게 만들었는지 확인합니다. 자습서: SQL Server 데이터베이스와 함께 Azure Blob 스토리지 사용에서 3단원에 제공된 지침을 검토하세요.
임대 BLOB 오류:
- 동일한 Blob 파일을 사용하는 다른 인스턴스가 충돌한 후 SQL Server를 시작하려고 할 때 오류가 발생했습니다. 해결: 정상적인 작업 중에 SQL Server는 임시 임대를 사용하여 스토리지에 대한 Blob을 예약하고 45~60초마다 각 Blob 임대를 갱신합니다. 서버가 충돌하는 상태에서 동일한 Blob을 사용하도록 구성된 SQL Server의 다른 인스턴스가 시작될 경우 새 인스턴스는 Blob의 기존 임대가 만료될 때까지 최대 60초 동안 기다립니다. 데이터베이스를 다른 인스턴스에 연결하고 60초 이내에 임대가 만료될 때까지 기다릴 수 없는 경우 연결 작업에 실패하지 않도록 Blob에서 임대를 명시적으로 해제할 수 있습니다.
데이터베이스 오류
데이터베이스를 만들 때 발생하는 오류 해결: 자습서: SQL Server 데이터베이스와 함께 Microsoft Azure Blob Storage 사용에서 4단원에 제공된 지침을 검토하세요.
Alter 문을 실행할 때 발생하는 오류 해결 방법: 데이터베이스가 온라인 상태일 때 Alter Database 문을 실행해야 합니다. 데이터 파일을 Azure 스토리지에 복사할 경우 항상 블록 BLOB이 아닌 페이지 BLOB을 만듭니다. 그렇지 않으면 ALTER Database가 실패합니다. 자습서: SQL Server 데이터베이스와 함께 Microsoft Azure Blob 스토리지 사용에서 7단원에 제공된 지침을 검토하세요.
오류 코드 - 5120 물리적 파일 "%.*ls"을(를) 열 수 없습니다. 운영 체제 오류 %d: "%ls"
해결 방법: 이 기능은 Azure Storage의 동일한 데이터베이스 파일에 두 개 이상의 SQL Server 인스턴스가 액세스하는 것을 지원하지 않습니다. 활성 데이터베이스 파일이 있는 인스턴스 A가 온라인 상태인 동안 동일한 데이터 파일을 가리키는 데이터베이스를 포함하는 인스턴스 B를 시작한 경우, 두 번째 인스턴스에서는 데이터베이스가 시작되지 않고 다음 오류 코드 5120 Unable to open the physical file "%.\*ls". Operating system error %d: "%ls"
이(가) 표시됩니다.
이 문제를 해결하려면 먼저 Azure 스토리지의 데이터베이스 파일에 액세스하려면 서버 A가 필요한지 여부를 확인해야 합니다. 그렇지 않은 경우 InstanceA와 Azure Storage의 데이터베이스 파일 간의 연결을 제거합니다. 이렇게 하려면 다음 단계를 수행하세요.
ALTER Database 문을 사용하여 InstanceA의 파일 경로를 로컬 폴더로 설정합니다.
인스턴스 A에서 데이터베이스를 오프라인으로 설정합니다.
그런 다음 데이터베이스 파일을 Azure Storage에서 인스턴스 A의 로컬 폴더로 복사합니다. 이렇게 하면 인스턴스 A에 여전히 로컬로 데이터베이스의 복사본이 있습니다.
데이터베이스를 온라인으로 설정합니다.
오류 코드 833 - I/O 요청을 완료하는 데 15초보다 더 오래 걸렸습니다.
이 오류는 스토리지 시스템이 SQL Server 워크로드의 요구를 충족할 수 없음을 나타냅니다. 애플리케이션 계층에서 IO 작업을 줄이거나 스토리지 계층에서 처리량 기능을 늘입니다. 자세한 내용은 Error 833을 참조하세요. 성능 문제가 지속되면 프리미엄 또는 UltraSSD 등의 다른 스토리지 계층으로 파일을 이동하는 것이 좋습니다. Azure VM의 SQL Server에 대해서는 스토리지 성능 최적화를 참조하세요.