Aracılığıyla paylaş


Öğretici: SQL Server ile Azure Blob Depolama'yı kullanma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümleri

Bu öğretici, SQL Server 2016 ve sonraki sürümlerde veri dosyaları ve yedeklemeler için Azure Blob Depolama'nın nasıl kullanılacağını anlamanıza yardımcı olur.

Azure Blob Depolama için SQL Server tümleştirme desteği, SQL Server 2012 Service Pack 1 CU2 geliştirmesi olarak başladı ve SQL Server 2014 ve SQL Server 2016 ile daha da geliştirildi. Bu özelliği kullanmanın işlevlerine ve avantajlarına genel bakış için bkz. Microsoft Azure 'de SQL Server Veri Dosyaları'nı.

Bu öğreticide, birden çok bölümde Azure Blob Depolama'da SQL Server Veri Dosyaları ile nasıl çalışabileceğiniz gösterilmektedir. Her bölüm belirli bir göreve odaklanır ve bölümler sırayla tamamlanmalıdır. İlk olarak, depolanan erişim ilkesi ve paylaşılan erişim imzası ile Blob Depolama'da yeni bir kapsayıcı oluşturmayı öğreneceksiniz. Ardından, SQL Server'ı Azure Blob Depolama ile tümleştirmek için BIR SQL Server kimlik bilgisi oluşturmayı öğreneceksiniz. Ardından, bir veritabanını Blob Depolama'ya yedekleyecek ve bir Azure sanal makinesine geri yükleyacaksınız. Ardından SQL Server dosya anlık görüntüsü işlem günlüğü yedeklemesini kullanarak belirli bir noktaya ve yeni bir veritabanına geri yükleyeceksiniz. Son olarak, öğreticide dosya anlık görüntüsü yedeklemelerini anlamanıza ve onlarla çalışmanıza yardımcı olmak amacıyla meta veriler sistemi saklı yordamları ve işlevlerinin kullanımı gösterilecektir.

Önkoşullar

Bu öğreticiyi tamamlamak için SQL Server yedekleme ve geri yükleme kavramları ve T-SQL söz dizimi hakkında bilgi sahibi olmanız gerekir.
Bu öğreticiyi kullanmak için bir Azure depolama hesabı, SQL Server Management Studio (SSMS), şirket içi SQL Server örneğine erişim, SQL Server 2016 veya sonraki bir sürümün örneğini çalıştıran bir Azure sanal makinesine (VM) erişim ve AdventureWorks2022 veritabanı gerekir. Ayrıca, BACKUP ve RESTORE komutlarını vermek için kullanılan hesabın, db_backupoperator veritabanı rolünde olması ve herhangi bir kimlik bilgisini değiştirme izinlerine sahip olması gerekir.

Önemli

SQL Server, Azure Data Lake Storage desteklemez, bu öğretici için kullanılan depolama hesabında hiyerarşik ad alanı etkinleştirilmediğinden emin olun.

1 - Depolanan erişim ilkesi ve paylaşılan erişim depolama alanı oluşturma

Bu bölümde, depolanan erişim ilkesi kullanarak Azure Blob Depolama kapsayıcısında paylaşılan erişim imzası oluşturmak için bir Azure PowerShell betiği kullanacaksınız.

Bilgi

Bu betik, Azure PowerShell 5.0.10586 kullanılarak yazılır.

Paylaşılan erişim imzası, kapsayıcılara, bloblara, kuyruklara veya tablolara kısıtlı erişim hakları veren bir URI'dir. Depolanan erişim ilkesi, sunucu tarafındaki paylaşılan erişim imzaları üzerinde erişimi iptal etme, süresi dolma veya genişletme gibi ek bir denetim düzeyi sağlar. Bu yeni geliştirmeyi kullanırken, kapsayıcıda en az okuma, yazma ve liste haklarına sahip bir ilke oluşturmanız gerekir.

Azure PowerShell, Azure Depolama SDK'sı, Azure REST API veya üçüncü taraf bir yardımcı programı kullanarak depolanmış erişim ilkesi ve paylaşılan erişim imzası oluşturabilirsiniz. Bu öğreticide, bu görevi tamamlamak için Azure PowerShell betiğinin nasıl kullanılacağı gösterilmektedir. Betik Resource Manager dağıtım modelini kullanır ve aşağıdaki yeni kaynakları oluşturur

  • Kaynak grubu
  • Depolama hesabı
  • Azure Blob Depolama kapsayıcısı
  • SAS ilkesi

Bu betik, yukarıdaki kaynakların adlarını ve aşağıdaki gerekli giriş değerlerinin adlarını belirtmek için bir dizi değişken bildirerek başlar:

  • Diğer kaynak nesnelerini adlandırmak için kullanılan ön ek adı
  • Abonelik adı
  • Veri merkezi konumu

Komut dosyası, 2 - paylaşılan erişim imzası kullanarak SQL Server kimlik bilgisi oluşturmabölümünde kullanmanız gereken uygun CREATE CREDENTIAL ifadesini oluşturarak tamamlanır. Bu deyim sizin için panonuza kopyalanır ve görmeniz için konsola gönderilir.

Kapsayıcıda ilke oluşturmak ve Paylaşılan Erişim İmzası (SAS) oluşturmak için şu adımları izleyin:

  1. Windows PowerShell veya Windows PowerShell ISE'i açın (yukarıdaki sürüm gereksinimlerine bakın).

  2. Aşağıdaki betiği düzenleyin ve yürütebilirsiniz:

    # 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. Betik tamamlandıktan sonra CREATE CREDENTIAL ifadesi bir sonraki bölümde kullanılmak üzere panonuzda olacaktır.

2 - Paylaşılan erişim imzası kullanarak SQL Server kimlik bilgisi oluşturma

Bu bölümde, önceki adımda oluşturduğunuz Azure Blob Depolama kapsayıcısına yazmak ve bu kapsayıcıdan okumak için SQL Server tarafından kullanılacak güvenlik bilgilerini depolamak için bir kimlik bilgisi oluşturacaksınız.

SQL Server kimlik bilgileri, SQL Server dışındaki bir kaynağa bağlanmak için gereken kimlik doğrulama bilgilerini depolamak için kullanılan bir nesnedir. Kimlik bilgisi, Azure Blob Depolama kapsayıcısının URI yolunu ve bu kapsayıcı için paylaşılan erişim imzasını depolar.

SQL Server kimlik bilgileri oluşturmak için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. Yeni bir sorgu penceresi açın ve şirket içi ortamınızdaki veritabanı altyapısının SQL Server örneğine bağlanın.

  3. Yeni sorgu penceresine, bölüm 1'deki paylaşılan erişim imzasıyla birlikte CREATE CREDENTIAL ifadesini yapıştırın ve bu betiği çalıştırın.

    Betik aşağıdaki gibi bir kodda görünecek.

    /* 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. Kullanılabilir tüm kimlik bilgilerini görmek için aşağıdaki deyimi örneğinize bağlı bir sorgu penceresinde çalıştırabilirsiniz:

    SELECT * from sys.credentials
    
  5. Yeni bir sorgu penceresi açın ve Azure sanal makinenizdeki veritabanı altyapısının SQL Server örneğine bağlanın.

  6. Yeni sorgu penceresinde, bölüm 1'den alınan paylaşılan erişim imzasıyla birlikte CREATE CREDENTIAL ifadesini yapıştırın ve bu betiği çalıştırın.

  7. Kapsayıcıya erişimi olmasını istediğiniz tüm ek SQL Server örnekleri için 5. ve 6. adımları yineleyin.

3 - URL'ye veritabanı yedekleme

Bu bölümde, SQL Server örneğinizdeki AdventureWorks2022 veritabanını Bölüm 1'de oluşturduğunuz kapsayıcıyayedekleyeceksiniz.

Not

Bir SQL Server 2012 (11.x) SP1 CU2+ veritabanını veya SQL Server 2014 (12.x) veritabanını bu kapsayıcıya yedeklemek istiyorsanız, WITH CREDENTIAL söz dizimini kullanarak URL'ye yedeklemek burada belgelenmiş kullanım dışı söz dizimini kullanabilirsiniz.

Veritabanını blob depolamaya yedeklemek için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. Yeni bir sorgu penceresi açın ve Azure sanal makinenizdeki SQL Server örneğine bağlanın.

  3. Aşağıdaki Transact-SQL betiğini kopyalayıp sorgu penceresine yapıştırın. URL'yi depolama hesabı adınız ve 1. bölümde belirttiğiniz kapsayıcı için uygun şekilde değiştirin ve ardından bu betiği çalıştırın.

    -- 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. Nesne Gezgini'yi açın ve depolama hesabınızı ve hesap anahtarınızı kullanarak Azure depolamaya bağlanın.

    1. kapsayıcılar genişletin, bölüm 1'de oluşturduğunuz kapsayıcıyı genişletin ve yukarıdaki 3. adımdaki yedeklemenin bu kapsayıcıda göründüğünü doğrulayın.

    Azure Depolama hesabına bağlanmak için çok adımlı işlemi gösteren ekran görüntüleri.

4 - VERITABANıNı URL'den sanal makineye geri yükleme

Bu bölümde, AdventureWorks2022 veritabanını Azure sanal makinenizdeki SQL Server örneğine geri yükleyacaksınız.

Not

Bu öğreticide kolaylık sağlamak amacıyla, veritabanı yedeklemesi için kullandığımız veriler ve günlük dosyaları için aynı kapsayıcıyı kullanıyoruz. Üretim ortamında büyük olasılıkla birden çok kapsayıcı ve sık sık birden çok veri dosyası da kullanabilirsiniz. Ayrıca, büyük bir veritabanını yedeklerken yedekleme performansını artırmak için yedeklemenizi birden çok bloba ayırmayı da düşünebilirsiniz.

AdventureWorks2022 veritabanını Azure Blob Depolama'dan Azure sanal makinenizdeki SQL Server örneğine geri yüklemek için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. Yeni bir sorgu penceresi açın ve Azure sanal makinenizdeki veritabanı altyapısının SQL Server örneğine bağlanın.

  3. Aşağıdaki Transact-SQL betiğini kopyalayıp sorgu penceresine yapıştırın. Depolama hesabı adınız ve 1. bölümde belirttiğiniz konteyner için URL'yi uygun şekilde değiştirin ve ardından bu komut dosyasını çalıştırın.

    -- 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. Nesne Gezgini'ne gidin ve Azure SQL Server örneğine bağlanın.

  5. Nesne Gezgini'nde Veritabanları düğümünü genişletin ve AdventureWorks2022 veritabanının geri yüklendiğini doğrulayın (düğümü gerektiği gibi yenileyin)

    1. AdventureWorks2022sağ tıklayın ve Özellikleröğesini seçin.
    2. Dosyalar seçin ve iki veritabanı dosyasının yollarının Azure Blob Depolama konteynerinizdeki bloblara yönlendirdiğini doğrulayın (işiniz bittiğinde İptal Et'i seçin).

    SSMS'den ekran görüntüleri: [! INCLUDE [sssampledbobject-md](.. Azure VM'de /includes/sssampledbobject-md.md)] veritabanı.

  6. Nesne Gezgini'nde Azure depolamaya bağlanın.

    1. kapsayıcılar genişletin, bölüm 1'de oluşturduğunuz kapsayıcıyı genişletin ve yukarıdaki 3. adımdaki AdventureWorks2022_Data.mdf ve AdventureWorks2022_Log.ldf, bölüm 3'teki yedekleme dosyasıyla birlikte bu kapsayıcıda göründüğünü doğrulayın (düğümü gerektiği gibi yenileyin).

    SQL Server örnek girişinin altındaki Azure kapsayıcısı içindeki veri dosyalarını gösteren SSMS'deki Nesne Gezgini'nin ekran görüntüsü.

5 - Dosya anlık görüntüsü yedeklemesi kullanarak veritabanını yedekleme

Bu bölümde, Azure anlık görüntülerini kullanarak neredeyse anlık bir yedekleme gerçekleştirmek için Azure sanal makinenizdeki AdventureWorks2022 veritabanını dosya anlık yedeği yöntemiyle yedekleyeceksiniz. Dosya anlık görüntüsü yedeklemeleri hakkında daha fazla bilgi için bkz. File-Snapshot Azure'da Veritabanı Dosyaları için Yedeklemeler

Dosya anlık görüntüsü yedeklemesini kullanarak AdventureWorks2022 veritabanını yedeklemek için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. Yeni bir sorgu penceresi açın ve Azure sanal makinenizdeki veritabanı altyapısının SQL Server örneğine bağlanın.

  3. Aşağıdaki Transact-SQL betiği kopyalayıp sorgu penceresine yapıştırın ve yürütebilirsiniz (bu sorgu penceresini kapatmayın; bu betiği 5. adımda yeniden yürütürsiniz. Bu sistem saklı yordamı, belirli bir veritabanını oluşturan her dosya için mevcut dosya anlık görüntü yedeklemelerini görüntülemenizi sağlar. Bu veritabanı için hiçbir dosya anlık görüntüsü yedeklemesi olmadığını fark edeceksiniz.

    -- Verify that no file snapshot backups exist
    SELECT * FROM sys.fn_db_backup_file_snapshots ('AdventureWorks2022');
    
  4. Aşağıdaki Transact-SQL betiğini kopyalayıp sorgu penceresine yapıştırın. URL'yi, depolama hesabı adınız ve ilk bölümde belirttiğiniz kapsayıcıya uygun şekilde değiştirin ve ardından bu betiği yürütün. Bu yedeklemenin ne kadar hızlı gerçekleştiğine dikkat edin.

    -- 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. adımdaki betiğin başarıyla yürütüldüğünü doğruladıktan sonra aşağıdaki betiği yeniden yürütür. 4. adımda dosya anlık görüntüsü yedekleme işleminin hem verilerin hem de günlük dosyasının dosya anlık görüntülerini oluşturduğuna dikkat edin.

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

    Anlık görüntüleri gösteren fn_db_backup_file_snapshots sonuçlarının SSMS ekran görüntüsü.

  6. Nesne Gezgini'nde, Azure sanal makinenizdeki SQL Server örneğinizde Veritabanları düğümünü genişletin ve AdventureWorks2022 veritabanının bu örneğe geri yüklendiğini doğrulayın (düğümü gerektiği gibi yenileyin).

  7. Nesne Gezgini'nde Azure depolamaya bağlanın.

  8. kapsayıcılar genişletin, bölüm 1'de oluşturduğunuz kapsayıcıyı genişletin ve yukarıdaki 4. adımdaki AdventureWorks2022_Azure.bak bu kapsayıcıda görüntülendiğini ve bölüm 3'teki yedekleme dosyasının ve bölüm 4'teki veritabanı dosyalarının (düğümü gerektiği gibi yenileyin) göründüğünü doğrulayın.

    Azure'da anlık görüntü yedeklemesini gösteren SSMS'deki Nesne Gezgini'nden bir ekran görüntüsü.

6 - Dosya anlık görüntüsü yedeklemeyi kullanarak etkinlik ve yedekleme günlüğü oluşturma

Bu bölümde, AdventureWorks2022 veritabanında etkinlik oluşturacak ve dosya anlık görüntüsü yedeklemelerini kullanarak düzenli aralıklarla işlem günlüğü yedeklemeleri oluşturacaksınız. Dosya anlık görüntüsü yedeklemelerini kullanma hakkında daha fazla bilgi için bkz. File-Snapshot AzureVeritabanı Dosyaları için Yedeklemeler.

AdventureWorks2022 veritabanında etkinlik oluşturmak ve dosya anlık görüntüsü yedeklemelerini kullanarak düzenli aralıklarla işlem günlüğü yedeklemeleri oluşturmak için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. İki yeni sorgu penceresi açın ve her birini Azure sanal makinenizdeki veritabanı altyapısının SQL Server örneğine bağlayın.

  3. Aşağıdaki Transact-SQL betiğini kopyalayın, yapıştırın ve sorgu pencerelerinden birinde yürütun. 4. adımda yeni satır eklemeden önce Production.Location tablosunda 14 satır olduğuna dikkat edin.

    -- Verify row count at start
    SELECT COUNT (*) from AdventureWorks2022.Production.Location;
    
  4. Aşağıdaki iki Transact-SQL betiklerini kopyalayıp iki ayrı sorgu penceresine yapıştırın. URL'yi depolama hesabı adınız ve 1. bölümde belirttiğiniz kapsayıcı için uygun şekilde değiştirin ve ardından bu betikleri ayrı sorgu pencerelerinde aynı anda yürütün. Bu komut dosyalarının tamamlanması yaklaşık yedi dakika sürer.

    -- 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. İlk betiğin çıkışını gözden geçirin ve son satır sayısının 29.939 olduğuna dikkat edin.

    Satır sayısı 29.939 olan bir sonuç kümesini gösteren SSMS ekran görüntüsü.

  6. İkinci betiğin çıktısını inceleyin ve BACKUP LOG ifadesi her çalıştırıldığında, günlük dosyası için bir ve veri dosyası için bir olmak üzere iki yeni dosya anlık görüntüsü oluşturulduğunu fark edin. Her veritabanı dosyası için toplam iki dosya anlık görüntüsü oluşturulmaktadır. İkinci betik tamamlandıktan sonra, her veritabanı dosyası için biri BACKUP DATABASE deyiminden, diğeri de BACKUP LOG deyiminin her yürütmesinden olmak üzere 8 adet, toplamda 16 dosya anlık görüntüsü olduğunu fark edeceksiniz.

    Yedek anlık görüntü geçmişinin sonuç kümesini gösteren SSMS ekran görüntüsü.

  7. Nesne Gezgini'nde Azure depolamaya bağlanın.

  8. Kapsayıcıları genişletin, bölüm 1'de oluşturduğunuzkapsayıcısını genişletin ve yedi yeni yedekleme dosyası ile önceki bölümlerden veri dosyalarının görünüp görünmediğini doğrulayın (düğümü gerektiğinde yenileyin).

    Azure Container'da birden çok anlık görüntü içeren SSMS'deki Nesne Gezgini'nden bir ekran görüntüsü.

7 - Veritabanını belirli bir noktaya geri yükleme

Bu bölümde, AdventureWorks2022 veritabanını işlem günlüğü yedeklemelerinden ikisi arasında belirli bir noktaya geri yükleyeceksiniz.

Geleneksel yedeklemelerde, belirli bir noktaya geri yükleme gerçekleştirmek için tam veritabanı yedeğini, belki bir farklılık yedeğini ve geri yüklemek istediğiniz noktayı geçene kadar tüm işlem günlüğü dosyalarını kullanmanız gerekir. Anlık dosya yedeklemelerinde, yalnızca geri yüklemek istediğiniz zamanı belirleyen iki ardışık günlük yedekleme dosyasına ihtiyacınız vardır. Yalnızca iki günlük dosyası anlık görüntü yedekleme setine ihtiyacınız var çünkü her bir günlük yedeği, her bir veritabanı dosyasının (her veri dosyası ve günlük dosyası) bir dosya anlık görüntüsünü oluşturur.

Veritabanını dosya anlık görüntüsü yedekleme kümelerinden belirli bir noktaya geri yüklemek için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. Yeni bir sorgu penceresi açın ve Azure sanal makinenizdeki veritabanı altyapısının SQL Server örneğine bağlanın.

  3. Sorgu penceresine aşağıdaki Transact-SQL betiğini kopyalayın, yapıştırın ve yürütebilirsiniz. Production.Location tablosunun 4. adımda daha az satır bulunduğu bir noktaya geri yüklemeden önce 29.939 satırı olduğunu doğrulayın.

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

    29.939 satır sayısını gösteren SSMS sonuçlarının ekran görüntüsü.

  4. Aşağıdaki Transact-SQL betiğini kopyalayıp sorgu penceresine yapıştırın. İki bitişik günlük yedekleme dosyası seçin ve dosya adını bu betik için ihtiyacınız olacak tarih ve saate dönüştürün. URL'yi depolama hesabı adınız ve 1. bölümde belirttiğiniz kapsayıcı için uygun şekilde değiştirin, birinci ve ikinci yedekleme dosyası adlarını sağlayın, STOPAT süresini '26 Haziran 2018 01:48 PM' biçiminde sağlayın ve bu betiği yürütün. Bu betiğin tamamlanması birkaç dakika sürer

    -- 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. Çıktıyı gözden geçirin. Geri yükleme işleminden sonra satır sayısının 18.389 olduğuna dikkat edin; bu, günlük yedeklemesi 5 ile 6 arasında bir satır sayısıdır (satır sayınız değişir).

    18-thousand-rows.JPG.

8 - Log yedeğinden yeni veritabanı olarak geri yükle

Bu bölümde, AdventureWorks2022 veritabanını bir dosya anlık görüntüsü işlem günlüğü yedeklemesinden yeni bir veritabanı olarak geri yükleyeceksiniz.

Bu senaryoda, iş analizi ve raporlama amacıyla farklı bir sanal makinede SQL Server örneğine geri yükleme gerçekleştiriyorsunuz. Farklı bir sanal makinede farklı bir örneğe geri yükleme, iş yükünü bu amaçla ayrılmış ve boyutlandırılmış bir sanal makineye boşaltarak kaynak gereksinimlerini işlem sisteminden kaldırır.

Dosya anlık görüntüsü yedeklemesi ile işlem günlüğü yedeklemesinden geri yükleme işlemi, geleneksel akış yedeklemelerinden çok daha hızlıdır. Geleneksel akış yedeklemelerinde, tam veritabanı yedeklemesini, belki de değişiklik yedeğini ve işlem günlüğü yedeklemelerinin bazılarını veya tümünü (veya yeni bir tam veritabanı yedeklemesini) kullanmanız gerekir. Ancak, dosya anlık görüntüsü günlük yedeklemelerinde yalnızca en son günlük yedeklemesine (veya başka bir günlük yedeklemesine veya belirli bir noktaya iki günlük yedekleme süresi arasındaki bir noktaya geri yükleme için diğer iki bitişik günlük yedeğine) ihtiyacınız vardır. Açık olmak gerekirse, her bir dosya anlık görüntü günlüğü yedeği, her veritabanı dosyasının (her veri dosyası ve günlük dosyası) bir dosya anlık görüntüsünü oluşturduğundan, yalnızca bir günlük dosyası-anlık görüntü yedekleme kümesine ihtiyacınız vardır.

Bir veritabanını, dosya anlık görüntüsü yedeklemesini kullanarak işlem günlüğü yedeklemesinden yeni bir veritabanına geri yüklemek için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. Yeni bir sorgu penceresi açın ve bir Azure sanal makinesinde veritabanı altyapısının SQL Server örneğine bağlanın.

    Not

    Bu, önceki bölümlerde kullandığınızdan farklı bir Azure sanal makinesiyse, 2 - paylaşılan erişim imzası kullanarak SQL Server kimlik bilgisi oluşturmabölümündeki adımları izlediğinize emin olun. Farklı bir kapsayıcıya geri yüklemek istiyorsanız, 1 - Yeni kapsayıcı için depolanan erişim ilkesi ve paylaşılan erişim depolama oluşturma bölümündeki adımları izleyin.

  3. Aşağıdaki Transact-SQL betiğini kopyalayıp sorgu penceresine yapıştırın. Kullanmak istediğiniz günlük yedekleme dosyasını seçin. URL'yi, depolama hesabı adınız ve 1. bölümde belirttiğiniz kapsayıcı için uygun şekilde değiştirin, günlük yedekleme dosyası adını sağlayın ve ardından bu betiği çalıştırın.

    -- 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. Geri yüklemenin başarılı olduğunu doğrulamak için çıkışı gözden geçirin.

  5. Nesne Gezgini'nde Azure depolamaya bağlanın.

  6. Kapsayıcılargenişletin, birinci bölümde oluşturduğunuz kapsayıcıyı genişletin (gerekirse yenileyin) ve yeni veri ve günlük dosyalarının, önceki bölümlerdeki bloblarla birlikte kapsayıcıda göründüğünü doğrulayın.

    SQL Server Management Studio'nun Azure kapsayıcıları depolama tarayıcısının yeni veritabanına ait veri ve günlük dosyalarını gösteren ekran görüntüsü.

9 - Yedekleme kümelerini ve dosya anlık görüntüsü yedeklemelerini yönetme

Bu bölümde, sp_delete_backup (Transact-SQL) sistem saklı yordamını kullanarak bir yedekleme kümesini sileceksiniz. Bu sistem saklı yordamı, bu yedekleme kümesiyle ilişkilendirilmiş her veritabanı dosyasındaki yedekleme dosyasını ve dosya anlık görüntüsünü siler.

Not

Yedekleme dosyasını Azure Blob Depolama kapsayıcısından silerek bir yedekleme kümesini silmeye çalışırsanız, yalnızca yedekleme dosyasının kendisini silersiniz; ilişkili dosya anlık görüntüleri kalır. Kendinizi bu senaryoda bulursanız, yalnız bırakılmış dosya anlık görüntülerinin URL'sini tanımlamak için sys.fn_db_backup_file_snapshots (Transact-SQL) sistem işlevini kullanın ve yalnız bırakılmış her dosya anlık görüntüsünü silmek için sistem saklı yordamı sp_delete_backup_file_snapshot (Transact-SQL) kullanın. Daha fazla bilgi için bkz. File-Snapshot Azure'daki Veritabanı Dosyaları İçin Yedeklemeler.

Bir dosya anlık görüntü yedekleme kümesini silmek için şu adımları izleyin:

  1. SSMS'i başlatın.

  2. Yeni bir sorgu penceresi açın ve Azure sanal makinenizdeki veritabanı altyapısının SQL Server örneğine (veya bu kapsayıcıda okuma ve yazma izinlerine sahip herhangi bir SQL Server örneğine) bağlanın.

  3. Aşağıdaki Transact-SQL betiğini kopyalayıp sorgu penceresine yapıştırın. Silmek istediğiniz günlük yedeğini ve ilişkili dosya anlık görüntülerini seçin. URL'yi depolama hesabı adınıza ve 1. bölümde belirttiğiniz kapsayıcıya uygun şekilde değiştirin, günlük yedekleme dosyası adını girin ve bu betiği çalıştırın.

    sys.sp_delete_backup 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/tutorial-21764-20181003205236.bak';
    
  4. Nesne Gezgini'nde Azure depolamaya bağlanın.

  5. Kapsayıcılargenişletin, 1. bölümde oluşturduğunuz kapsayıcıyı genişletin ve 3. adımda kullandığınız yedekleme dosyasının artık bu kapsayıcıda görünmediğini doğrulayın (gerekirse düğümü yenileyin).

    Azure kapsayıcılarını ve işlem günlüğü yedekleme blobunun silinmesini gösteren SQL Server Management Studios depolama tarayıcısının iki ekran görüntüsü.

  6. İki dosya anlık görüntüsünün silindiğini doğrulamak için aşağıdaki Transact-SQL betiğini kopyalayıp sorgu penceresine yapıştırın ve yürütebilirsiniz.

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

    İki dosya anlık görüntüsünün silindiğini gösteren SSMS sonuçları bölmesinin ekran görüntüsü.

10 - Kaynakları kaldırma

Bu öğreticiyi tamamladıktan sonra ve kaynak tasarrufu yapmak için bu öğreticide oluşturulan kaynak grubunu sildiğinizden emin olun.

Kaynak grubunu silmek için aşağıdaki PowerShell kodunu çalıştırın:

# 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

Sonraki adımlar