Limitações/Erros (Access Key Credential)

Para finalizar o ano com sucesso, vamos concluir a parte de “Access Key Credential” da nossa série “BACKUP DATABASE BD TO URL = ‘Blob Storage'” !

Aqui vamos discutir três limitações ou características desta opção para ajudá-los ainda mais qual das opções utilizar quando você for criar sua rotina de backup.

Page Blobs

Para este tipo de backup, o arquivo .bak é criado como um blob do tipo page (já discutimos e explicamos isso em um post anterior).
Em um comentário no meu Linkedin um DBA informou que quando utilizava esta opção para realizar os backups, encontrou alguns problemas, pois ele tinha a limitação de 1TB por blob e que acabou tendo que fazer o backup para um diretório local e após isso enviar os backups para a nuvem.
Informei que de fato tinha esta limitação e que uma das opções de retorno era também realizar um backup direto para a nuvem, porém dividindo o backup em vários arquivos, já que a limitação é de tamanho por blob.
Entretanto, a boa notícia é que isto não é mais uma limitação. Lembro que o limite de 1TB por blob passou a ser 4TB e que hoje os blobs do tipo page podem chegar até 8TB.

1 - LimitePageBlob

Essa é uma vantagem que eu disse logo no post introdutório sobre o Azure:
“Se você está na nuvem, recomendo fortemente sempre ficar antenado às novidades, pois as evoluções são constantes e muitas destas novas features facilitarão muito a sua vida. Talvez uma limitação que você tem hoje pode ser sanada daqui a alguns meses…”
Então nossa primeira limitação não é bem uma limitação assim né? Rs

Versão SQL Server

Mais para frente irei escrever sobre outra alternativa de realizar um “BACKUP DATABASE DB TO URL = ‘Blob Storage’ ”, porém já adianto: Se você estiver utilizando as versões SQL Server 2012 SP1 CU2 ou SQL Server 2014 você só terá a opção de realizar o backup com o Access Key Credential:
2 - Versão SQL Server

Podem observar que esta opção já está como “deprecated”, porém é a única alternativa para estas versões do SQL Server.

Lease State

Já na rotina que demos de solução aqui no post “Rotina de transferir Blob do tipo Page de uma Storage Account GPV1 para a Storage Account Blob com access tier Cool”, pode ocorrer o seguinte erro ao tentar excluir o blob, já transferifo, na Storage Account original:

3 - Leased

“Remove-AzureStorageBlob : The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.. HTTP Status
Code: 412 – HTTP Error Message: There is currently a lease on the blob and no lease ID was specified in the request.”
Acontece que o blob tem o campo “Lease State” que é o status de “trava” do blob sendo utilizada para proteger de escritas ou deleções por um período de tempo.
Neste meu caso, esta trava foi adquirida ao iniciar o backup, porém por algum motivo, que pode variar bastante desde eu parar o backup no meio até uma falha de network, não finaliza o backup com sucesso ocorrendo que esta trava não seja liberada.
3-1-Leased

Por este motivo ao tentar excluir o meu blob com o comando
“Get-AzureStorageBlob -context $srcContext -Container $srcContainer | Remove-AzureStorageBlob ” o erro é retornado.

Uma medida de contornar isso é acrescentando a seguinte sintaxe em PowerShell em suas rotinas de manutenção dos backups:

Login-AzureRmAccount

Set-AzureRmContext -SubscriptionName "SubscriptionName" 

$ResourceName = "ComunidadeSQLServer"
$storageAccount  = 'stgcomunidadesqlserver1'
$storageKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $ResourceName -StorageAccountName $storageAccount).Value[0]
$blobContainer = 'backup'

# Well known Restore Lease ID
$restoreLeaseId = "BAC2BAC2BAC2BAC2BAC2BAC2BAC2BAC2"  

$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
$allBlobs = $container.ListBlobs($null,$true) 

$lockedBlobs = @()
# filter blobs that are have Lease Status as "locked"
foreach($blob in $allBlobs)
{
    $blobProperties = $blob.Properties
    if($blobProperties.LeaseStatus -eq "Locked")
    {
        $lockedBlobs += $blob  

    }
}  

if ($lockedBlobs.Count -eq 0)
    {
        Write-Host " There are no blobs with locked lease status"
    }
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
    }
}   

Este é um script que peguei do site da Microsoft e que fiz pequenas adaptações para o meu caso (que achei mais fácil), mas segue o link para o script original.
Após executar o script, foi retornado a mensagem que o lease foi quebrado:

3-3-Leased

E ao verificar no contêiner onde está o Blob, o “Lease State” dele passou de “Leased” para “Broken”

3-2-Leased

Esta operação também pode ser realizada via modo gráfico clicando nos três pontos de cada blob:

3-4-Leased

Mas como queremos deixar tudo automático é preferível que seja realizado com PowerShell.

Lembrando que devemos quebrar esta trava somente em blobs que temos conhecimento, como nesta rotina!!!

 

Desta forma concluímos aqui a parte “Backup With Access Key credential”.

Referências:
https://docs.microsoft.com/en-us/rest/api/storageservices/understanding-block-blobs–append-blobs–and-page-blobs
https://docs.microsoft.com/en-us/sql/relational-databases/tutorial-use-azure-blob-storage-service-with-sql-server-2016?view=sql-server-2017#2—create-a-sql-server-credential-using-a-shared-access-signaturehttps://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob

 

Voltar ao post de controle. 

Anúncios

2 comentários sobre “Limitações/Erros (Access Key Credential)

  1. Pingback: Rotina de transferir Blob do tipo Page de uma Storage Account GPV1 para a Storage Account Blob com access tier Cool – Comunidade SQL Server

  2. Pingback: BACKUP DATABASE DB TO URL = ‘BLOB STORAGE’ – Comunidade SQL Server

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s