Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
När du säkerhetskopierar till eller återställer från Microsoft Azure-lagring, skaffar SQL Server ett oändligt leasingavtal för att låsa exklusiv åtkomst till blobben. När säkerhetskopieringen eller återställningen har slutförts släpps lånet. Om en säkerhetskopiering eller återställning misslyckas försöker säkerhetskopieringsprocessen rensa eventuella ogiltiga blobar. Men om säkerhetskopieringen misslyckas på grund av ett långvarigt eller ihållande nätverksanslutningsfel kanske säkerhetskopieringsprocessen inte kan få åtkomst till bloben och bloben kan förbli överbliven. Det innebär att bloben inte kan skrivas till eller tas bort förrän lånet har frigjorts. Det här avsnittet beskriver hur du släpper (bryter) lånet och tar bort bloben.
Mer information om lånetyper finns i den här artikeln.
Om säkerhetskopieringen misslyckas kan det resultera i en ogiltig säkerhetskopieringsfil. Blobfilen för säkerhetskopiering kan också ha en aktiv leasing, vilket förhindrar att den tas bort eller skrivs över. För att ta bort eller skriva över sådana blobar bör lånet först släppas (brytas). Om det uppstår säkerhetskopieringsfel rekommenderar vi att du rensar lån och tar bort blobar. Du kan också regelbundet städa upp leasingar och ta bort blobar som en del av dina lagringshanterings uppgifter.
Om det uppstår ett restaureringsfel blockeras inte efterföljande åtgärder, så aktiv leasing är kanske inte ett problem. Det är bara nödvändigt att bryta hyresavtalet när du måste skriva över eller ta bort bloben.
Hantera föräldralösa blobar
Följande steg beskriver hur du rensar efter misslyckad säkerhetskopiering eller återställningsaktivitet. Du kan utföra alla steg med Hjälp av PowerShell-skript. Följande avsnitt innehåller ett exempel på ett PowerShell-skript:
Identifiera blobar med leasar: Om du har ett skript eller en process som kör säkerhetskopieringsprocesserna kanske du kan registrera felet i skriptet eller processen och använda det för att rensa blobarna. Du kan också använda egenskaperna LeaseStats och LeastState för att identifiera blobar med lån på dem. När du har identifierat blobarna granskar du listan och kontrollerar giltigheten för säkerhetskopieringsfilen innan du tar bort bloben.
Bryta lånet: En auktoriserad begäran kan bryta lånet utan att ange ett låne-ID. Mer information finns i här.
Tips
SQL Server utfärdar ett låne-ID för att upprätta exklusiv åtkomst under återställningen. Återställningslåne-ID:t är BAC2BAC2BAC2BAC2BAC2BAC2BAC2BAC2.
Ta bort blobben: För att ta bort en blob med ett aktivt hyresavtal måste du först bryta hyresavtalet.
PowerShell-skriptexempel
Viktig
Om du kör PowerShell 2.0 kan det uppstå problem med att läsa in Microsoft WindowsAzure.Storage.dll-sammansättningen. Vi rekommenderar att du uppgraderar Powershell- för att lösa problemet. Du kan också använda följande alternativa lösning för att skapa eller ändra powershell.exe.config-filen för att läsa in .NET 2.0- och .NET 4.0-moduler vid körning med följande:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
Följande exempelskript identifierar blobar med aktiva leasingkontrakt och bryter dem sedan. Exemplet visar också hur du filtrerar för utgivningskontrakts-ID:n.
Tips om hur du kör det här skriptet
Varning
Om en säkerhetskopia till Azure Blob Storage körs samtidigt som det här skriptet kan säkerhetskopieringen misslyckas eftersom det här skriptet bryter lånet som säkerhetskopieringen försöker hämta samtidigt. Kör det här skriptet under ett underhållsfönster eller när inga säkerhetskopior körs eller förväntas köras.
Innan du kör det här skriptet bör du lägga till värden för lagringskontot, lagringsnyckeln, containern och Azure Storage-sammansättningssökvägen och namnparametrarna. Sökvägen till lagringssamlingen är installationskatalogen för instansen av SQL Server. Filnamnet för lagringssammansättningen är Microsoft.WindowsAzure.Storage.dll.
Om det inte finns några blobar med låsta leasingavtal bör du se följande meddelande:
There are no blobs with locked lease status
Om det finns blobar med låsta leasningar bör du se följande meddelanden:
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.
ochThe 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." }
Se även
SQL Server-säkerhetskopiering till URL bästa praxis och felsökning