Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Ao fazer backup ou restaurar a partir do armazenamento do Microsoft Azure, o SQL Server adquire uma concessão infinita para bloquear o acesso exclusivo ao blob. Quando o processo de backup ou restauração é concluído com êxito, a concessão é liberada. Se um backup ou restauração falhar, o processo de backup tentará limpar todos os blobs inválidos. No entanto, se o backup falhar devido a uma falha de conectividade de rede prolongada ou sustentada, o processo de backup pode não ser capaz de obter acesso ao blob e o blob pode permanecer órfão. Isso significa que o blob não pode ser gravado ou excluído até que a concessão seja liberada. Este tópico descreve como interromper (anular) a concessão de arrendamento e apagar o blob.
Para obter mais informações sobre tipos de locação, leia este artigo .
Se a operação de backup falhar, isso pode resultar em um arquivo de backup inválido. O arquivo de blob de backup também pode ter uma concessão ativa, impedindo que ele seja excluído ou substituído. Para excluir ou substituir esses blobs, a concessão deve primeiro ser anulada (cancelada). Se houver falhas de backup, recomendamos que limpe os leases e elimine os blobs. Você também pode limpar periodicamente alugueres e excluir blobs como parte das suas tarefas de gestão de armazenamento.
Se houver uma falha de restauração, as restaurações subsequentes não serão bloqueadas, portanto, a locação ativa pode não ser um problema. Encerramento da concessão só é necessário quando tens que substituir ou eliminar o blob.
Gerenciar blobs órfãos
As etapas a seguir descrevem como limpar após falha na atividade de backup ou restauração. Você pode executar todas as etapas usando scripts do PowerShell. A seção a seguir inclui um exemplo de script do PowerShell:
Identificar blobs com concessão: Se você tiver um script ou um processo que execute os processos de backup, poderá capturar a falha dentro do script ou processo e usá-la para limpar os blobs. Você também pode usar as propriedades LeaseStats e LeastState para identificar blobs com concessões neles. Depois de identificar os blobs, revise a lista e verifique a validade do arquivo de backup antes de excluir o blob.
Rescindir o contrato de arrendamento: Um pedido autorizado pode rescindir o contrato de arrendamento sem fornecer um ID de contrato. Consulte aqui para obter mais informações.
Dica
O SQL Server emite uma ID de concessão para estabelecer acesso exclusivo durante a operação de restauração. O ID de concessão de restauro é BAC2BAC2BAC2BAC2BAC2BAC2BAC2BAC2.
Excluir o Blob: Para excluir um blob com uma concessão ativa, você deve primeiro quebrar a concessão.
Exemplo de script do PowerShell
Importante
Se você estiver executando o PowerShell 2.0, você pode ter problemas para carregar o assembly do Microsoft WindowsAzure.Storage.dll. Recomendamos que você atualize Powershell para resolver o problema. Você também pode usar a seguinte solução alternativa para criar ou modificar o arquivo powershell.exe.config para carregar assemblies .NET 2.0 e .NET 4.0 em tempo de execução com o seguinte:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
O script de exemplo a seguir identifica blobs com arrendamentos ativos e, em seguida, cancela-os. O exemplo também demonstra como filtrar IDs de concessão de versão.
Dicas sobre como executar este script
Advertência
Se um backup para o Armazenamento de Blobs do Azure estiver sendo executado ao mesmo tempo que esse script, o backup poderá falhar, pois esse script quebrará a concessão que o backup está tentando adquirir simultaneamente. Execute esse script durante uma janela de manutenção ou quando nenhum backup estiver em execução ou for esperado que seja executado.
Antes de executar esse script, você deve adicionar valores para a conta de armazenamento, a chave de armazenamento, o contêiner e os parâmetros de caminho e nome do assembly de armazenamento do Azure. O caminho de armazenamento é o diretório de instalação da instância do SQL Server. O nome do ficheiro para o conjunto de armazenamento é Microsoft.WindowsAzure.Storage.dll.
Se não houver blobs com concessões bloqueadas, você verá a seguinte mensagem:
There are no blobs with locked lease statusSe houver blobs com concessões bloqueadas, você verá as seguintes mensagens:
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.eThe 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." }
Ver também
Práticas Recomendadas de Backup do SQL Server para URL e Resolução de Problemas