Sql Managed Instance - Backup em Storage Account

Sql Managed Instance - Backup em Storage Account

Ola pessoALL,

Ano novo, vida nova e desktop novo! Nesse processo de fazer o setup da máquina nova, decidi pegar um backup recente do banco de testes que tenho no Sql Managed Instance no Azure para poder usar local.
O processo de backup é bem simples na verdade, mas tem alguns detalhes para serem considerados.

Vamos ao passo-a-passo

Criar um SAS Token na storage account

O primeiro passo para fazermos um backup direto em uma storage account é criar um credencial apontando para uma storage account e um container.

  • Na storage account desejada, selecione a opção Shared Access Signature (SAS)
  • Defina as permissões necessárias
  • O segredo aqui é definir a data de início para pelo menos 15 minutos no passado, gerar com a data atual pode apresentar alguns problemas.

Ao final, teremos a chave gerada e as strings de conexão com a chave correspondente, copie o conteúdo da caixa  SAS Token

Criando um backup

Agora que temos a chave, podemos executar o script para criar um novo backup direto na storage account.

-- Se ja existir uma credencial para o container desejado, voce pode excluir e registrar a nova chave
DROP CREDENTIAL [https://nomedastorageaccount.blob.core.windows.net/sqlbkps] 

-- Registra o token gerado no portal, sem o '?'
CREATE CREDENTIAL [https://nomedastorageaccount.blob.core.windows.net/sqlbkps] 
WITH IDENTITY='SHARED ACCESS SIGNATURE' 
, SECRET = 'sv=conteudoDoTokenCompleto';

-- Criando um backup
BACKUP DATABASE NomeDoSeuBanco 
TO URL = 'https://nomedastorageaccount.blob.core.windows.net/sqlbkps/NomeDoBanco_2021-01-13.bak' 
WITH COPY_ONLY, MAXTRANSFERSIZE = 4194304, COMPRESSION, STATS = 5  

Caso voce receba a seguinte mensagem de erro:

Msg 3202, Level 16, State 1, Line 9
Write on "https://nomedastorageaccount.blob.core.windows.net/sqlbkps/NomeDoBackup.bak" failed: 1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 9
BACKUP DATABASE is terminating abnormally.

A causa mais provável é que se arquivo de backup tenha mais de 200gb que é o limite de arquivo padrão na storage account. Para corrigir o problema quebre o conteúdo do backup em múltiplos arquivos.

-- Criando um backup
BACKUP DATABASE NomeDoSeuBanco 
TO URL = 'https://nomedastorageaccount.blob.core.windows.net/sqlbkps/NomeDoBanco_2021-01-13_1.bak',
 URL = 'https://nomedastorageaccount.blob.core.windows.net/sqlbkps/NomeDoBanco_2021-01-13_2.bak',
 URL = 'https://nomedastorageaccount.blob.core.windows.net/sqlbkps/NomeDoBanco_2021-01-13_3.bak' 
WITH COPY_ONLY, MAXTRANSFERSIZE = 4194304, COMPRESSION, STATS = 5  

Prontinho, com isso temos um backup completo do nosso banco salvo na storage account que podemos utilizar tanto no sql local, quando em um container docker.