Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Amikor biztonsági másolatot készít a Microsoft Azure Storage-ról vagy visszaállítja azt, az SQL Server egy végtelen bérletet szerez be a blob kizárólagos hozzáférésének zárolásához. Ha a biztonsági mentési vagy visszaállítási folyamat sikeresen befejeződött, a bérlet felszabadul. Ha egy biztonsági mentés vagy visszaállítás sikertelen, a biztonsági mentési folyamat megpróbálja törölni az érvénytelen blobokat. Ha azonban a biztonsági mentés hosszabb vagy tartós hálózati kapcsolati hiba miatt meghiúsul, előfordulhat, hogy a biztonsági mentési folyamat nem fér hozzá a blobhoz, és a blob árva marad. Ez azt jelenti, hogy a blob csak akkor írható vagy törölhető, miután a bérlet felszabadul. Ez a témakör a bérlet kiadását (megszakítását) és a blob törlését ismerteti.
A bérlettípusokkal kapcsolatos további információkért olvassa el ezt a cikket.
Ha a biztonsági mentési művelet meghiúsul, az érvénytelen biztonsági mentési fájlt eredményezhet. Előfordulhat, hogy a mentési blobfájlnak aktív kizárólagos hozzáférése van, ami megakadályozza a törlést vagy a felülírást. Az ilyen blobok törléséhez vagy felülírásához először a bérletet fel kell törni (megszakítani). Biztonsági mentési hibák esetén javasoljuk, hogy törölje a bérleteket és törölje a blobokat. A tárolási felügyeleti feladatok részeként rendszeres időközönként törölheti a bérleteket és törölheti a blobokat.
Visszaállítási hiba esetén a rendszer nem tiltja le a későbbi visszaállításokat, így előfordulhat, hogy az aktív bérlet nem jelent problémát. A bérlet megszüntetése csak akkor szükséges, ha felül kell írnia vagy törölnie kell a blobot.
Árva blobok kezelése
A következő lépések azt mutatják be, hogyan lehet megtisztítani a sikertelen biztonsági mentési vagy visszaállítási tevékenység után. Az összes lépést PowerShell-szkriptekkel hajthatja végre. A következő szakasz egy példa PowerShell-szkriptet tartalmaz:
Blobok azonosítása bérletekkel: Ha rendelkezik egy szkripttel vagy folyamattal, amely a biztonsági mentési folyamatokat futtatja, lehetséges, hogy képes rögzíteni a hibát a szkriptben vagy a folyamatban, és ezt felhasználhatja a blobok rendbetételére. A LeaseStats és a LeastState tulajdonságok használatával is azonosíthatja a bérlettel rendelkező blobokat. Miután azonosította a blobokat, tekintse át a listát, és ellenőrizze a biztonsági mentési fájl érvényességét a blob törlése előtt.
A bérlet megszakítása: Egy engedélyezett kérelem bérletazonosító megadása nélkül is megszakíthatja a bérletet. További információ: Blob bérlés.
Borravaló
Az SQL Server egy bérletazonosítót ad ki, amely kizárólagos hozzáférést biztosít a visszaállítási művelet során. A visszaállítási bérlet azonosítója BAC2BAC2BAC2BAC2BAC2BAC2BAC2BAC2.
Blob törlése: Aktív bérlettel rendelkező blob törléséhez először fel kell bontania a bérletet.
Példa PowerShell-szkriptre
Fontos
Ha a PowerShell 2.0-t futtatja, előfordulhat, hogy problémákat tapasztal a Microsoft WindowsAzure.Storage.dll szerelvény betöltésekor. Javasoljuk, hogy frissítse PowerShell- a probléma megoldásához. Az alábbi kerülő megoldással létrehozhatja vagy módosíthatja a powershell.exe.config fájlt a .NET 2.0 és a .NET 4.0 szerelvények futásidőben való betöltéséhez a következőkkel:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
Az alábbi példaszkript azonosítja az aktív bérlettel rendelkező blobokat, majd megszakítja őket. A példa azt is bemutatja, hogyan szűrheti a kiadási bérlet azonosítókat.
Tippek a szkript futtatásához
Figyelmeztetés
Ha az Azure Blob Storage-ba történő biztonsági mentés a szkripttel egy időben fut, a biztonsági mentés meghiúsulhat, mivel ez a szkript megszakítja azt a bérletet, amelyet a biztonsági másolat egyidejűleg próbál beszerezni. Futtassa ezt a szkriptet karbantartási időszak alatt, vagy ha nem futnak biztonsági másolatok, vagy várhatóan nem futnak.
A szkript futtatása előtt adjon meg értékeket a tárfiókhoz, a tárkulcshoz, a tárolóhoz, valamint az Azure Storage szerelvényútvonalához és névparamétereihez. A tároló elérési útja az SQL Server-példány telepítési könyvtára. A tárolószerelvény fájlneve Microsoft.WindowsAzure.Storage.dll.
Ha nincsenek zárolt bérlettel rendelkező blobok, a következő üzenet jelenik meg:
There are no blobs with locked lease statusZárolt bérlettel rendelkező blobok esetén a következő üzeneteket kell látnia:
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.ésThe 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." }
Lásd még:
SQL Server biztonsági mentése URL-címre – ajánlott eljárások és hibaelhárítás