Aracılığıyla paylaş


Etkin kiraları olan yedek blob dosyalarını sil

Şunlar için geçerlidir: SQL Server

Sql Server, Microsoft Azure depolamaya yedekleme veya geri yükleme yaparken bloba özel erişimi kilitlemek için sonsuz bir kira alır. Yedekleme veya geri yükleme işlemi başarıyla tamamlandığında, kira serbest bırakılır. Yedekleme veya geri yükleme başarısız olursa, yedekleme işlemi geçersiz blobları temizlemeye çalışır. Ancak, uzun süreli veya sürekli ağ bağlantısı hatası nedeniyle yedekleme başarısız olursa, yedekleme işlemi bloba erişim kazanamayabilir ve blob yalnız bırakılmış olarak kalabilir. Bu, kira serbest bırakılana kadar bloba yazılamayacağı veya silinemeyeceği anlamına gelir. Bu konu başlığında, kiranın nasıl serbest bırakıldığı (kesileceğini) ve blobu nasıl silineceği açıklanmaktadır.

Kira türleri hakkında daha fazla bilgi için bu makaleyi okuyun.

Yedekleme işlemi başarısız olursa, geçersiz bir yedekleme dosyasıyla sonuçlanabilir. Yedekleme blob dosyasının ayrıca aktif bir kiralaması olabilir ve bu da dosyanın silinmesini veya üzerine yazılmasını önleyebilir. Bu tür blobları silmek veya üzerine yazmak için önce kiralamanın bozulması gerekir. Yedekleme hataları varsa, kiralamaları temizlemenizi ve blobları silmenizi öneririz. Ayrıca, depolama yönetimi görevlerinizin bir parçası olarak kiraları düzenli aralıklarla temizleyebilir ve blobları silebilirsiniz.

Geri yükleme hatası varsa, sonraki geri yüklemeler engellenmez, bu nedenle etkin kiralama bir sorun olmayabilir. Kira sözleşmesini iptal etmek, yalnızca blobun üzerine yazmanız veya silmeniz gerektiğinde gereklidir.

Yetim blobları yönet

Aşağıdaki adımlarda, başarısız yedekleme veya geri yükleme etkinliğinden sonra temizleme işlemi açıklanmaktadır. Tüm adımları PowerShell betiklerini kullanarak gerçekleştirebilirsiniz. Aşağıdaki bölüm örnek bir PowerShell betiği içerir:

  1. Kiraları olan blobları tanımlayın: Yedekleme işlemlerini çalıştıran bir betiğiniz veya işleminiz varsa, betik veya işlem içindeki hataları yakalayabilir ve blobları temizlemek için bunu kullanabilirsiniz. Ayrıca leases ile blobları belirlemek için LeaseStats ve LeastState özelliklerini de kullanabilirsiniz. Blobları tanımladıktan sonra, listeyi gözden geçirin ve blobu silmeden önce yedekleme dosyasının geçerliliğini doğrulayın.

  2. Kirayı boz: Yetkili bir istek, kira kimliği sağlamadan kirayı bozabilir. Daha fazla bilgi için bkz. Lease Blob.

    Tip

    SQL Server, geri yükleme işlemi sırasında özel erişim oluşturmak için bir kira kimliği verir. Kurtarma kira kimliği BAC2BAC2BAC2BAC2BAC2BAC2BAC2BAC2.

  3. Blobu Silin: Etkin kiralaması olan bir blobu silmek için önce kirayı kesmeniz gerekir.

PowerShell betiği örneği

Önemli

PowerShell 2.0 çalıştırıyorsanız Microsoft WindowsAzure.Storage.dll derlemesini yüklerken sorunlarla karşılaşabilirsiniz. Sorunu çözmek için PowerShell'i yükseltmenizi öneririz. Çalışma zamanında .NET 2.0 ve .NET 4.0 derlemelerini yüklemek üzere powershell.exe.config dosyasını oluşturmak veya değiştirmek için aşağıdaki geçici çözümü de kullanabilirsiniz:

<?xml version="1.0"?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0.30319"/>
            <supportedRuntime version="v2.0.50727"/>
        </startup>
    </configuration>  

Aşağıdaki örnek betik, etkin kiralara sahip blobları tanımlar ve sonra bunları bozar. Örnek ayrıca sürüm kiralama ID'leri için filtreleme işleminin nasıl yapılacağını da gösterir.

Bu komut dosyasını çalıştırma ipuçları

Uyarı

Azure Blob Depolama'ya yapılan bir yedekleme, bu betik ile aynı anda çalışıyorsa, bu betik yedeklemenin eşzamanlı olarak almaya çalıştığı kiralama sözleşmesini bozacağı için yedekleme başarısız olabilir. Bu betiği, bir bakım penceresi sırasında veya hiçbir yedeklemenin çalışmadığı veya çalışması beklenmediği zaman çalıştırın.

  • Bu betiği çalıştırmadan önce depolama hesabı, depolama anahtarı, kapsayıcı ve Azure depolama derleme yolu ile ad parametreleri için değerler eklemeniz gerekir. Derleme depolama yolu, SQL Server örneğinin yükleme dizinidir. Depolama derlemesinin dosya adı Microsoft.WindowsAzure.Storage.dll.

  • Kilitli kiralama süreleri olan herhangi bir blob yoksa, aşağıdaki mesajı görmeniz gerekir: There are no blobs with locked lease status

  • Kilitli kiraları olan bloblar varsa, şu iletileri görmeniz gerekir: Breaking Leases, The lease on <URL of the Blob> is a restore lease: You will see this message only if you have a blob with a restore lease that is still active.ve The lease on <URL of the Blob> is not a restore lease Breaking lease on <URL of the Bob>.

$storageAccount = "<myStorageAccount>"
$storageKey = "<myStorageKey>"
$blobContainer = "<myBlobContainer>"
$storageAssemblyPathName = "<myStorageAssemblyPathName>"
  
# well known Restore Lease ID  
$restoreLeaseId = "BAC2BAC2BAC2BAC2BAC2BAC2BAC2BAC2"  
  
# load the storage assembly without locking the file for the duration of the PowerShell session  
$bytes = [System.IO.File]::ReadAllBytes($storageAssemblyPath)  
[System.Reflection.Assembly]::Load($bytes)  
  
$cred = New-Object 'Microsoft.WindowsAzure.Storage.Auth.StorageCredentials' $storageAccount, $storageKey  
$client = New-Object 'Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient' "https://$storageAccount.blob.core.windows.net", $cred  
$container = $client.GetContainerReference($blobContainer)  
  
# list all the blobs  
$blobs = $container.ListBlobs($null,$true)
  
# filter blobs that are have Lease Status as "locked"
$lockedBlobs = @()  
foreach($blob in $blobs)  
{  
    $blobProperties = $blob.Properties
    if($blobProperties.LeaseStatus -eq "Locked")  
    {  
        $lockedBlobs += $blob  
    }  
}  

if($lockedBlobs.Count -gt 0)  
{  
    Write-Host "Breaking leases..."
    foreach($blob in $lockedBlobs )
    {  
        try  
        {  
            $blob.AcquireLease($null, $restoreLeaseId, $null, $null, $null)  
            Write-Host "The lease on $($blob.Uri) is a restore lease."  
        }  
        catch [Microsoft.WindowsAzure.Storage.StorageException]  
        {  
            if($_.Exception.RequestInformation.HttpStatusCode -eq 409)  
            {  
                Write-Host "The lease on $($blob.Uri) is not a restore lease."  
            }  
        }  
  
        Write-Host "Breaking lease on $($blob.Uri)."  
        $blob.BreakLease($(New-TimeSpan), $null, $null, $null) | Out-Null  
    }  
} else { Write-Host " There are no blobs with locked lease status." }

Ayrıca bakınız

SQL Server'ı URL'ye Yedekleme En İyi Yöntemler ve Sorun Giderme