자습서: SQL Server에서 Azure Blob Storage 사용

적용 대상: SQL Server 2016(13.x) 이상 버전

이 자습서는 SQL Server 2016 이상 버전에서 데이터 파일 및 백업에 Azure Blob Storage를 사용하는 방법을 이해하는 데 도움이 됩니다.

Azure Blob Storage에 대한 SQL Server 통합 지원은 SQL Server 2012 서비스 팩 1 CU2 개선으로 시작되었으며 SQL Server 2014 및 SQL Server 2016을 통해 더욱 향상되었습니다. 이 기능에 대한 개요 및 사용할 경우의 이점은 Microsoft Azure의 SQL Server 데이터 파일을 참조하세요.

이 자습서에서는 여러 섹션을 통해 Azure Blob Storage에서 SQL Server 데이터 파일을 사용하는 방법을 보여 줍니다. 각 섹션은 특정 작업에 중점을 두고 섹션을 순서대로 완료해야 합니다. 먼저 저장된 액세스 정책과 공유 액세스 서명을 사용하여 Blob Storage에 새 컨테이너를 만드는 방법을 알아봅니다. 그런 다음 SQL Server 자격 증명을 만들어 Azure Blob Storage에 SQL Server를 통합하는 방법을 살펴봅니다. 데이터베이스를 Blob Storage에 백업하고 Azure 가상 머신에 복원합니다. 그런 다음 SQL Server 파일-스냅샷 트랜잭션 로그 백업을 사용하여 특정 시점 및 새 데이터베이스로 복원합니다. 마지막으로, 이 자습서에서는 파일-스냅샷 백업을 이해하고 작업하는 데 도움이 되는 메타 데이터 시스템 저장 프로시저 및 함수를 사용하는 방법을 보여 줍니다.

전제 조건

이 자습서를 완료하려면 SQL Server 백업 및 복원 개념과 T-SQL 구문을 잘 알고 있어야 합니다.
이 자습서를 사용하려면 Azure Storage 계정, SSMS(SQL Server Management Studio), SQL Server 온-프레미스 인스턴스에 대한 액세스, SQL Server 2016 이상 버전의 인스턴스를 실행하는 Azure VM(가상 머신) 액세스 및 데이터베이스가 AdventureWorks2022 필요합니다. 또한 BACKUP 및 RESTORE 명령을 실행하는 데 사용하는 계정은 모든 자격 증명 변경 권한이 있는 db_backup operator 데이터베이스 역할에 있어야 합니다.

1 - 저장된 액세스 정책 및 공유 액세스 스토리지 만들기

이 섹션에서는 Azure PowerShell 스크립트를 사용하여 저장된 액세스 정책을 사용하여 Azure Blob Storage 컨테이너에 공유 액세스 서명을 만듭니다.

참고 항목

이 스크립트는 Azure PowerShell 5.0.10586을 사용하여 작성되었습니다.

공유 액세스 서명은 컨테이너, Blob, 큐 또는 테이블에 대한 제한된 액세스 권한을 부여하는 URI입니다. 저장된 액세스 정책은 액세스 해지, 만료 또는 확장 등 서버 쪽의 공유 액세스 서명에 대한 추가적인 제어 수준을 제공합니다. 이 새로운 향상된 기능을 사용하는 경우 최소한 읽기, 쓰기 및 목록 권한이 있는 컨테이너에 정책을 만들어야 합니다.

Azure PowerShell, Azure Storage SDK, Azure REST API 또는 타사 유틸리티를 사용하여 저장된 액세스 정책과 공유 액세스 서명을 만들 수 있습니다. 이 자습서에서는 Azure PowerShell 스크립트를 사용하여 이 작업을 완료하는 방법을 보여 줍니다. 스크립트는 Resource Manager 배포 모델을 사용하고 다음과 같은 새 리소스를 만듭니다.

  • 리소스 그룹
  • 스토리지 계정
  • Azure Blob Storage 컨테이너
  • SAS 정책

이 스크립트는 위의 리소스에 대한 이름과 다음 필수 입력 값의 이름을 지정하는 여러 변수를 선언하여 시작합니다.

  • 다른 리소스 개체의 이름을 지정하는 데 사용되는 접두사 이름
  • 구독 이름
  • 데이터 센터 위치

스크립트는 2에서 사용할 적절한 CREATE CREDENTIAL 문을 생성하여 완료됩니다. - 공유 액세스 서명을 사용하여 SQL Server 자격 증명 만들기 이 문은 사용자가 볼 수 있도록 클립보드에 복사되고 콘솔에 출력됩니다.

컨테이너에 정책을 만들고 SAS(공유 액세스 서명)를 생성하려면 다음 단계를 수행합니다.

  1. Windows PowerShell 또는 Windows PowerShell ISE를 엽니다(위의 버전 요구 사항 참조).

  2. 아래 스크립트를 편집한 후 실행합니다.

    # Define global variables for the script
    $prefixName = '<a prefix name>'  # used as the prefix for the name for various objects
    $subscriptionID = '<your subscription ID>'   # the ID  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'
    
    # Add 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 -SubscriptionId $subscriptionID
    
    # Create a new resource group - comment out this line to use an existing resource group
    New-AzResourceGroup -Name $resourceGroupName -Location $locationName
    
    # Create a new Azure Resource Manager storage account - comment out this line to use an existing Azure Resource Manager storage account
    New-AzStorageAccount -Name $storageAccountName -ResourceGroupName $resourceGroupName -Type Standard_RAGRS -Location $locationName
    
    # Get the access keys for the Azure Resource Manager storage account
    $accountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName
    
    # Create a new storage account context using an Azure Resource Manager storage account
    $storageContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value
    
    # Creates a new container in Blob Storage
    $container = New-AzStorageContainer -Context $storageContext -Name $containerName
    
    # Sets up a Stored Access Policy and a Shared Access Signature for the new container
    $policy = New-AzStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -StartTime $(Get-Date).ToUniversalTime().AddMinutes(-5) -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission rwld
    
    # Gets the Shared Access Signature for the policy
    $sas = New-AzStorageContainerSASToken -name $containerName -Policy $policyName -Context $storageContext
    Write-Host 'Shared Access Signature= '$($sas.Substring(1))''
    
    # Sets the variables for the new container you just created
    $container = Get-AzStorageContainer -Context $storageContext -Name $containerName
    $cbc = $container.CloudBlobContainer
    
    # 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.Substring(1)
    $tSql | clip
    Write-Host $tSql
    
    # Once you're done with the tutorial, remove the resource group to clean up the resources.
    # Remove-AzResourceGroup -Name $resourceGroupName
    
  3. 스크립트가 완료되면 다음 섹션에서 사용할 수 있도록 클립보드에 CREATE CREDENTIAL 문이 있습니다.

2 - 공유 액세스 서명을 사용하여 SQL Server 자격 증명 만들기

이 섹션에서는 SQL Server에서 이전 단계에서 만든 Azure Blob Storage 컨테이너에 쓰고 읽는 데 사용할 보안 정보를 저장하는 자격 증명을 만듭니다.

SQL Server 자격 증명은 SQL Server 외부의 리소스에 연결하는 데 필요한 인증 정보를 저장하는 데 사용되는 개체입니다. 자격 증명은 Azure Blob Storage 컨테이너의 URI 경로와 이 컨테이너에 대한 공유 액세스 서명을 저장합니다.

SQL Server 자격 증명을 만들려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 새 쿼리 창을 열고 온-프레미스 환경에서 데이터베이스 엔진의 SQL Server 인스턴스에 연결합니다.

  3. 새 쿼리 창에서 CREATE CREDENTIAL 문을 섹션 1의 공유 액세스 서명과 함께 붙여넣고 해당 스크립트를 실행합니다.

    스크립트는 다음 코드와 같습니다.

    /* Example:
    USE master
    CREATE CREDENTIAL [https://msfttutorial.blob.core.windows.net/containername]
    WITH IDENTITY='SHARED ACCESS SIGNATURE'
    , SECRET = 'sharedaccesssignature'
    GO */
    
    USE master
    CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>]
      -- this name must match the container path, start with https and must not contain a forward slash at the end
    WITH IDENTITY='SHARED ACCESS SIGNATURE'
      -- this is a mandatory string and should not be changed
     , SECRET = 'sharedaccesssignature'
       -- this is the shared access signature key that you obtained in section 1.
    GO
    
  4. 사용할 수 있는 모든 자격 증명을 보려면 인스턴스에 연결된 쿼리 창에서 다음 문을 실행합니다.

    SELECT * from sys.credentials
    
  5. 새 쿼리 창을 열고 Azure 가상 머신에서 데이터베이스 엔진의 SQL Server 인스턴스에 연결합니다.

  6. 새 쿼리 창에서 CREATE CREDENTIAL 문을 섹션 1의 공유 액세스 서명과 함께 붙여넣고 해당 스크립트를 실행합니다.

  7. 컨테이너에 액세스하려는 추가 SQL Server 인스턴스에 대해 5단계와 6단계를 반복합니다.

3 - 데이터베이스 백업에서 URL로

이 섹션에서는 섹션 1에서 만든 컨테이너에 SQL Server 인스턴스의 데이터베이스를 백업 AdventureWorks2022 합니다.

참고 항목

SQL Server 2012(11.x) SP1 CU2+ 데이터베이스 또는 SQL Server 2014(12.x) 데이터베이스를 이 컨테이너에 백업하려는 경우 여기에 설명된 사용되지 않는 구문을 사용하여 구문을 사용하여 WITH CREDENTIAL URL에 백업할 수 있습니다.

Blob Storage에 데이터베이스를 백업하려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 새 쿼리 창을 열고 Azure 가상 머신의 SQL Server 인스턴스에 연결합니다.

  3. 다음 Transact-SQL 스크립트를 복사하여 쿼리 창에 붙여넣습니다. 섹션 1에서 지정한 컨테이너 및 스토리지 계정 이름에 맞게 URL을 수정한 다음, 이 스크립트를 실행합니다.

    -- To permit log backups, before the full database backup, modify the database to use the full recovery model.
    USE master;
    ALTER DATABASE AdventureWorks2022
       SET RECOVERY FULL;
    
    -- Back up the full AdventureWorks2022 database to the container that you created in section 1
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
    
  4. 개체 탐색기를 열고 스토리지 계정 및 계정 키를 사용하여 Azure Storage에 연결합니다.

    1. 컨테이너를 확장하고, 섹션 1에서 만든 컨테이너를 확장하고, 위의 3단계의 백업이 이 컨테이너에 표시되는지 확인합니다.

    Screenshots indicating the multistep process to connect to Azure Storage account.

4 - URL에서 가상 머신으로 데이터베이스 복원

이 섹션에서는 Azure 가상 머신의 AdventureWorks2022 SQL Server 인스턴스로 데이터베이스를 복원합니다.

참고 항목

이 자습서에서는 간단한 설명을 위해 데이터베이스 백업에 사용한 것과 동일한 컨테이너를 데이터 및 로그 파일에 사용합니다. 프로덕션 환경에서는 여러 컨테이너와 자주 여러 데이터 파일을 사용할 수 있습니다. 또한 큰 데이터베이스를 백업할 때 백업 성능을 높이기 위해 여러 Blob에서 백업을 스트라이프하는 것을 고려할 수 있습니다.

Azure Blob Storage에서 Azure 가상 머신의 AdventureWorks2022 SQL Server 인스턴스로 데이터베이스를 복원하려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 새 쿼리 창을 열고 Azure 가상 머신에서 데이터베이스 엔진의 SQL Server 인스턴스에 연결합니다.

  3. 다음 Transact-SQL 스크립트를 복사하여 쿼리 창에 붙여넣습니다. 섹션 1에서 지정한 컨테이너 및 스토리지 계정 이름에 맞게 URL을 수정한 다음, 이 스크립트를 실행합니다.

    -- Restore AdventureWorks2022 from URL to SQL Server instance using Azure Blob Storage for database files
    RESTORE DATABASE AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_onprem.bak'
       WITH
          MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Data.mdf'
         ,MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Log.ldf'
    --, REPLACE
    
  4. 개체 탐색기를 열고 Azure SQL Server 인스턴스에 연결합니다.

  5. 개체 탐색기에서 데이터베이스 노드를 확장하고 데이터베이스가 AdventureWorks2022 복원되었는지 확인합니다(필요에 따라 노드 새로 고침).

    1. AdventureWorks2022를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
    2. 파일을 선택하고 두 데이터베이스 파일의 경로가 Azure Blob Storage 컨테이너의 Blob을 가리키는 URL인지 확인합니다(완료되면 취소 선택).

    Screenshots from SSMS of the [!INCLUDE [sssampledbobject-md](../includes/sssampledbobject-md.md)] database on the Azure VM.

  6. 개체 탐색기에서 Azure Storage에 연결합니다.

    1. 컨테이너를 확장하고 섹션 1에서 만든 컨테이너를 확장하고 위의 3단계에서 섹션 3의 백업 파일과 함께 이 컨테이너에 표시되는지 확인 AdventureWorks2022_Data.mdfAdventureWorks2022_Log.ldf 합니다(필요에 따라 노드 새로 고침).

    Screenshot from Object Explorer in SSMS showing the data files within container on Azure beneath a SQL Server instance entry.

5 - 파일-스냅샷 백업을 사용하여 데이터베이스 백업

이 섹션에서는 파일-스냅샷 백업을 사용하여 Azure 가상 머신의 데이터베이스를 백업 AdventureWorks2022 하여 Azure 스냅샷을 사용하여 거의 즉각적인 백업을 수행합니다. 파일-스냅샷 백업에 대한 자세한 내용은 Azure의 데이터베이스 파일에 대한 파일-스냅샷 백업을 참조 하세요.

파일-스냅샷 백업을 AdventureWorks2022 사용하여 데이터베이스를 백업하려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 새 쿼리 창을 열고 Azure 가상 머신에서 데이터베이스 엔진의 SQL Server 인스턴스에 연결합니다.

  3. 다음 TRANSACT-SQL 스크립트를 복사하여 쿼리 창에 붙여넣고 실행합니다. 이 쿼리 창을 닫지 마세요. 5단계에서 이 스크립트를 다시 실행합니다. 이 시스템 저장 프로시저를 사용하면 지정된 데이터베이스를 구성하는 각 파일에 대한 기존 파일 스냅샷 백업을 볼 수 있습니다. 이 데이터베이스에 대한 파일 스냅샷 백업이 없는 것을 확인할 수 있습니다.

    -- Verify that no file snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    
  4. 다음 Transact-SQL 스크립트를 복사하여 쿼리 창에 붙여넣습니다. 섹션 1에서 지정한 컨테이너 및 스토리지 계정 이름에 맞게 URL을 수정한 다음, 이 스크립트를 실행합니다. 이 백업이 얼마나 빨리 발생하는지 확인합니다.

    -- Backup the AdventureWorks2022 database with FILE_SNAPSHOT
    BACKUP DATABASE AdventureWorks2022
       TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_Azure.bak'
       WITH FILE_SNAPSHOT;
    
  5. 4단계의 스크립트가 성공적으로 실행되었는지 확인한 후 다음 스크립트를 다시 실행합니다. 4단계의 파일-스냅샷 백업 작업은 데이터 및 로그 파일 모두의 파일-스냅샷을 생성했습니다.

    -- Verify that two file-snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    

    A screenshot from SSMS of the results of fn_db_backup_file_snapshots, showing snapshots.

  6. 개체 탐색기의 Azure 가상 머신에 있는 SQL Server 인스턴스에서 데이터베이스 노드를 확장하고 데이터베이스가 AdventureWorks2022 이 인스턴스로 복원되었는지 확인합니다(필요에 따라 노드 새로 고침).

  7. 개체 탐색기에서 Azure Storage에 연결합니다.

  8. 컨테이너를 확장하고, 섹션 1에서 만든 컨테이너를 확장하고, 섹션 3의 백업 파일 및 섹션 4의 데이터베이스 파일과 함께 위의 4단계가 이 컨테이너에 표시되는지 확인 AdventureWorks2022_Azure.bak 합니다(필요에 따라 노드 새로 고침).

    A screenshot from Object Explorer in SSMS showing the snapshot backup on Azure.

6 - 파일-스냅샷 백업을 사용하여 활동 및 백업 로그 생성

이 섹션에서는 데이터베이스에서 AdventureWorks2022 작업을 생성하고 파일-스냅샷 백업을 사용하여 정기적으로 트랜잭션 로그 백업을 만듭니다. 파일 스냅샷 백업을 사용하는 방법에 대한 자세한 내용은 Azure의 데이터베이스 파일에 대한 파일-스냅샷 백업을 참조하세요.

데이터베이스에서 AdventureWorks2022 작업을 생성하고 파일-스냅샷 백업을 사용하여 정기적으로 트랜잭션 로그 백업을 만들려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 두 개의 새 쿼리 창을 열고 각각 Azure 가상 머신에서 데이터베이스 엔진의 SQL Server 인스턴스에 연결합니다.

  3. 다음 Transact-SQL 스크립트를 복사하여 쿼리 창의 하나에 붙여넣은 다음 실행합니다. 4단계에서 Production.Location 새 행을 추가하기 전에 테이블에 14개의 행이 있습니다.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
  4. 다음 두 Transact-SQL 스크립트를 복사하여 두 개의 별도 쿼리 창에 붙여넣습니다. 섹션 1에서 지정한 스토리지 계정 이름 및 컨테이너에 대한 URL을 적절하게 수정한 다음 별도의 쿼리 창에서 이러한 스크립트를 동시에 실행합니다. 두 스크립트를 완료하는 데 약 7분 정도 걸립니다.

    -- Insert 30,000 new rows into the Production.Location table in the AdventureWorks2022 database in batches of 75
    DECLARE @count INT=1, @inner INT;
    WHILE @count < 400
       BEGIN
          BEGIN TRAN;
             SET @inner =1;
                WHILE @inner <= 75
                   BEGIN;
                      INSERT INTO AdventureWorks2022.Production.Location
                         (Name, CostRate, Availability, ModifiedDate)
                            VALUES (NEWID(), .5, 5.2, GETDATE());
                      SET @inner = @inner + 1;
                   END;
          COMMIT;
       WAITFOR DELAY '00:00:01';
       SET @count = @count + 1;
       END;
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
    --take 7 transaction log backups with FILE_SNAPSHOT, one per minute, and include the row count and the execution time in the backup file name
    DECLARE @count INT=1, @device NVARCHAR(120), @numrows INT;
    WHILE @count <= 7
       BEGIN
             SET @numrows = (SELECT COUNT (*) FROM AdventureWorks2022.Production.Location);
             SET @device = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-' + CONVERT (varchar(10),@numrows) + '-' + FORMAT(GETDATE(), 'yyyyMMddHHmmss') + '.bak';
             BACKUP LOG AdventureWorks2022 TO URL = @device WITH FILE_SNAPSHOT;
             SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
          WAITFOR DELAY '00:1:00';
             SET @count = @count + 1;
       END;
    
  5. 첫 번째 스크립트의 출력을 검토하고 최종 행 수가 이제 29,939개임을 확인합니다.

    A screenshot from SSMS showing a result set with row count of 29,939.

  6. 두 번째 스크립트의 출력을 검토하여 BACKUP LOG 문을 실행할 때마다 두 개의 새 파일 스냅샷이 생성되는 것을 확인합니다.로그 파일의 파일 스냅샷 하나와 데이터 파일의 파일 스냅샷 하나 등 총 두 개의 파일 스냅샷이 각 데이터베이스 파일마다 생성됩니다. 두 번째 스크립트가 완료되면 이제 총 16개의 파일 스냅샷이 있으며, 각 데이터베이스 파일에 대해 8개(BACKUP DATABASE 문에서 하나씩, BACKUP LOG 문의 각 실행마다 하나씩)가 있습니다.

    A screenshot from SSMS showing the result set of backup snapshot history.

  7. 개체 탐색기에서 Azure Storage에 연결합니다.

  8. 컨테이너를 확장하고 , 섹션 1에서 만든 컨테이너를 확장하고, 이전 섹션의 데이터 파일과 함께 7개의 새 백업 파일이 표시되는지 확인합니다(필요에 따라 노드 새로 고침).

    A screenshot from Object Explorer in SSMS with multiple snapshots in Azure Container.

7 - 특정 시점으로 데이터베이스 복원

이 섹션에서는 두 트랜잭션 로그 백업 사이의 특정 시점으로 데이터베이스를 복원 AdventureWorks2022 합니다.

기존의 백업에서 특정 시점 복원을 수행하려면 전체 데이터베이스 백업, 차등 백업 및 복원하려는 시점 바로 다음까지의 모든 트랜잭션 로그 파일을 사용해야 합니다. 파일-스냅샷 백업을 사용할 경우 복원하려는 시간을 프레이밍하는 골대를 제공하는 두 개의 인접한 로그 백업 파일만 있으면 됩니다. 각 로그 백업은 각 데이터베이스 파일(각 데이터 파일 및 로그 파일)의 파일 스냅샷을 만들기 때문에 두 개의 로그 파일 스냅샷 백업 세트만 필요합니다.

파일 스냅샷 백업 집합에서 지정된 시점으로 데이터베이스를 복원하려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 새 쿼리 창을 열고 Azure 가상 머신에서 데이터베이스 엔진의 SQL Server 인스턴스에 연결합니다.

  3. 다음 Transact-SQL 스크립트를 복사하여 붙여넣고 쿼리 창에 실행합니다. 4단계에서 Production.Location 행 수가 적은 시점으로 복원하기 전에 테이블에 29,939개의 행이 있는지 확인합니다.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location
    

    A screenshot of the SSMS results showing a row count of 29,939.

  4. 다음 Transact-SQL 스크립트를 복사하여 쿼리 창에 붙여넣습니다. 두 개의 인접한 로그 백업 파일을 선택하고 파일 이름을 이 스크립트에 필요한 날짜와 시간으로 변환합니다. 섹션 1에서 지정한 컨테이너 및 스토리지 계정 이름에 맞게 URL을 수정하고 첫 번째 및 두 번째 백업 파일 이름을 제공한 다음, “June 26, 2018 01:48 PM”의 형식으로 STOPAT 시간을 제공하고 이 스크립트를 실행합니다. 이 스크립트를 완료하려면 몇 분 정도 걸립니다.

    -- restore and recover to a point in time between the times of two transaction log backups, and then verify the row count
    ALTER DATABASE AdventureWorks2022 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    RESTORE DATABASE AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<firstbackupfile>.bak'
       WITH NORECOVERY,REPLACE;
    RESTORE LOG AdventureWorks2022
       FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<secondbackupfile>.bak'
       WITH RECOVERY, STOPAT = 'June 26, 2018 01:48 PM';
    ALTER DATABASE AdventureWorks2022 set multi_user;
    -- get new count
    SELECT COUNT (*) FROM AdventureWorks2022.Production.Location ;
    
  5. 출력을 검토합니다. 복원 후 행 개수는 18,389개로, 로그 백업 5와 6 사이의 행 개수입니다(사용자 행 개수는 다를 수 있음).

    18-thousand-rows.JPG.

8 - 로그 백업에서 새 데이터베이스로 복원

이 섹션에서는 파일-스냅샷 트랜잭션 로그 백업에서 데이터베이스를 새 데이터베이스로 복원 AdventureWorks2022 합니다.

이 시나리오에서는 비즈니스 분석 및 보고를 위해 다른 가상 머신에서 SQL Server 인스턴스로 복원을 수행합니다. 다른 가상 머신의 다른 인스턴스로 복원하면 워크로드를 전용 및 크기가 지정된 가상 머신으로 오프로드하여 트랜잭션 시스템에서 리소스 요구 사항을 제거합니다.

트랜잭션 로그 백업에서 파일-스냅샷 백업을 사용한 복원은 매우 빠르며, 기존의 스트리밍 백업보다 훨씬 더 빠릅니다. 기존 스트리밍 백업을 사용하면 전체 데이터베이스 백업, 차등 백업 및 트랜잭션 로그 백업의 일부 또는 전부(또는 새 전체 데이터베이스 백업)를 사용해야 합니다. 그러나 파일-스냅샷 로그 백업을 사용하면 가장 최근의 로그 백업(또는 다른 로그 백업 또는 두 로그 백업 시간 사이의 지점으로 특정 시점 복원을 위한 두 개의 인접한 로그 백업)만 있으면 됩니다. 명확히 하려면 각 파일-스냅샷 로그 백업이 각 데이터베이스 파일(각 데이터 파일 및 로그 파일)의 파일 스냅샷을 만들기 때문에 로그 파일-스냅샷 백업 집합이 하나만 필요합니다.

파일 스냅샷 백업을 사용하여 트랜잭션 로그 백업에서 새 데이터베이스로 데이터베이스를 복원하려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 새 쿼리 창을 열고 Azure 가상 머신에서 데이터베이스 엔진의 SQL Server 인스턴스에 연결합니다.

    참고 항목

    이전 섹션에서 사용한 것과 다른 Azure 가상 머신인 경우 공유 액세스 서명을 사용하여 SQL Server 자격 증명 만들기 - 2의 단계를 수행했는지 확인합니다. 다른 컨테이너로 복원하려면 새 컨테이너에 대해 1 - 저장된 액세스 정책 및 공유 액세스 스토리지 만들기를 수행하세요.

  3. 다음 Transact-SQL 스크립트를 복사하여 쿼리 창에 붙여넣습니다. 사용할 로그 백업 파일을 선택합니다. 섹션 1에서 지정한 스토리지 계정 이름 및 컨테이너에 대한 URL을 적절하게 수정하고 로그 백업 파일 이름을 제공한 다음 이 스크립트를 실행합니다.

    -- restore as a new database from a transaction log backup file
    RESTORE DATABASE AdventureWorks2022_EOM
        FROM URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/<logbackupfile.bak>'
        WITH MOVE 'AdventureWorks2022_data' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Data.mdf'
       , MOVE 'AdventureWorks2022_log' to 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/AdventureWorks2022_EOM_Log.ldf'
       , RECOVERY
    --, REPLACE
    
  4. 출력을 검토하여 복원에 성공했는지 확인합니다.

  5. 개체 탐색기에서 Azure Storage에 연결합니다.

  6. 컨테이너를 확장하고, 섹션 1에서 만든 컨테이너를 확장하고(필요한 경우 새로 고침) 이전 섹션의 Blob과 함께 새 데이터 및 로그 파일이 컨테이너에 표시되는지 확인합니다.

    Screenshot of SQL Server Management Studio's storage browser of Azure containers showing the data and log files for the new database.

9 - 백업 세트 및 파일-스냅샷 백업 관리

이 섹션에서는 sp_delete_backup(Transact-SQL) 시스템 저장 프로시저를 사용하여 백업 세트를 삭제합니다. 이 시스템 저장 프로시저는 이 백업 세트와 연결된 각 데이터베이스 파일에서 백업 파일 및 파일 스냅샷을 삭제합니다.

참고 항목

Azure Blob Storage 컨테이너에서 백업 파일을 삭제하여 백업 집합을 삭제하려고 하면 백업 파일 자체만 삭제됩니다. 연결된 파일 스냅샷은 그대로 유지됩니다. 이 시나리오에서 자신을 발견하는 경우 sys.fn_db_backup_file_snapshots(Transact-SQL) 시스템 함수를 사용하여 분리된 파일 스냅샷의 URL을 식별하고 sp_delete_backup_file_snapshot(Transact-SQL) 시스템 저장 프로시저를 사용하여 분리된 각 파일 스냅샷을 삭제합니다. 자세한 내용은 Azure의 데이터베이스 파일에 대한 파일-스냅샷 백업을 참조 하세요.

파일-스냅샷 백업 집합을 삭제하려면 다음 단계를 수행합니다.

  1. SSMS를 시작합니다.

  2. 새 쿼리 창을 열고 Azure 가상 머신에서 데이터베이스 엔진의 SQL Server 인스턴스(또는 이 컨테이너에서 읽고 쓸 수 있는 권한이 있는 SQL Server 인스턴스)에 연결합니다.

  3. 다음 Transact-SQL 스크립트를 복사하여 쿼리 창에 붙여넣습니다. 연결된 파일 스냅샷과 함께 삭제하려는 로그 백업을 선택합니다. 섹션 1에서 지정한 스토리지 계정 이름 및 컨테이너에 대한 URL을 적절하게 수정하고 로그 백업 파일 이름을 제공한 다음 이 스크립트를 실행합니다.

    sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';
    
  4. 개체 탐색기에서 Azure Storage에 연결합니다.

  5. 컨테이너를 확장하고, 섹션 1에서 만든 컨테이너를 확장하고, 3단계에서 사용한 백업 파일이 이 컨테이너에 더 이상 표시되지 않는지 확인합니다(필요에 따라 노드 새로 고침).

    Two screenshots of SQL Server Management Studios storage browser showing Azure containers and the deletion of the transaction log backup blob.

  6. 다음 Transact-SQL 스크립트를 복사하여 붙여넣고 쿼리 창에 실행하여 두 개의 파일 스냅샷이 삭제되었는지 확인합니다.

    -- verify that two file snapshots have been removed
    SELECT * from sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    

    Screenshot of the SSMS results pane showing two file snapshots deleted.

10 - 리소스 제거

이 자습서를 완료하고 리소스를 절약하려면 이 자습서에서 만든 리소스 그룹을 삭제해야 합니다.

리소스 그룹을 삭제하려면 다음 PowerShell 코드를 실행합니다.

# Define global variables for the script
$prefixName = '<prefix name>'  # should be the same as the beginning of the tutorial

# 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 -SubscriptionId $subscriptionID
  
# Remove the resource group
Remove-AzResourceGroup -Name $resourceGroupName

다음 단계