Arquivos de dados do SQL Server no Microsoft Azure

Aplica-se a: SQL Server

Uma imagem decorativa de arquivos de dados no Azure.

Arquivos de dados do SQL Server no Microsoft Azure permitem o suporte nativo para os arquivos de banco de dados do SQL Server armazenados como blobs. Ele permite que você crie um banco de dados do SQL Server executado localmente ou em uma máquina virtual no Microsoft Azure com um local de armazenamento dedicado a seus dados no armazenamento de Blobs do Microsoft Azure. Ele também simplifica o processo de movimentação de bancos de dados entre computadores. Você pode desanexar bancos de dados de um computador e anexá-los a outro computador. Além disso, ele fornece um local de armazenamento alternativo para os arquivos de backup de banco de dados ao permitir que você restaure de ou para o Armazenamento do Microsoft Azure. Em virtude disso, ele permite várias soluções híbridas ao fornecer vários benefícios para virtualização de dados, movimentação de dados, segurança e disponibilidade, baixo custo e facilidade de manutenção, o que proporciona alta disponibilidade e dimensionamento elástico.

Importante

O armazenamento de bancos de dados do sistema no Armazenamento de Blobs do Azure não tem suporte nem é recomendado.

Este artigo apresenta os conceitos e as considerações que são essenciais para armazenar arquivos de dados do SQL Server no serviço de Armazenamento do Microsoft Azure.

Para ter uma experiência prática sobre como usar esse novo recurso, veja Tutorial: como usar o Armazenamento de Blobs do Azure da Microsoft com bancos de dados do SQL Server.

Por que usar arquivos de dados do SQL Server no Microsoft Azure?

  • Benefícios da migração fácil e rápida: esse recurso simplifica o processo de migração movendo um banco de dados de cada vez entre computadores locais, e também entre ambientes locais e de nuvem, sem nenhuma alteração do aplicativo. Em virtude disso, ele oferece suporte a uma migração incremental, preservando sua infraestrutura existente local. Além disso, ter acesso a um armazenamento de dados centralizado simplifica a lógica do aplicativo quando um aplicativo precisa ser executado em vários locais em um ambiente local. Em alguns casos, pode ser necessário configurar rapidamente os centros de computação em locais dispersos geograficamente, que coletam dados de várias origens diferentes. Com os Arquivos de Dados do Azure, em vez de mover dados de um local para outro, você poderá armazenar muitos bancos de dados como blobs de páginas do Microsoft Azure e, em seguida, executar scripts Transact-SQL para criar bancos de dados em computadores locais ou máquinas virtuais.

  • Benefícios de custos e armazenamento ilimitado: este recurso permite ter armazenamento ilimitado fora do site no Microsoft Azure aproveitando os recursos de computação locais. Quando você usa o Microsoft Azure como um local de armazenamento, pode facilmente se concentrar na lógica do aplicativo sem a sobrecarga do gerenciamento de hardware. Se você perder um nó de computação no local, poderá configurar um novo sem nenhuma movimentação de dados.

  • Benefícios de alta disponibilidade e recuperação de desastres: usar o recurso de arquivos de dados do SQL Server no Microsoft Azure pode simplificar as soluções de alta disponibilidade e recuperação de desastres. Por exemplo, se uma máquina virtual no Microsoft Azure ou em uma instância do SQL Server falhar, você poderá recriar seus bancos de dados em uma nova instância do SQL Server apenas restabelecendo links para os blobs.

  • Benefícios de segurança: com os arquivos de dados do SQL Server no Azure, você pode separar uma instância de computação de uma instância de armazenamento. Você pode ter um banco de dados totalmente criptografado com a descriptografia ocorrendo apenas na instância de computação, mas não em uma instância de armazenamento. Ou seja, você pode criptografar todos os dados na nuvem pública usando certificados de TDE (Transparent Data Encryption), que são separados fisicamente dos dados. As chaves de TDE podem ser armazenadas no banco de dados master, que é armazenado localmente em seu computador local seguro fisicamente e com backup feito localmente. Você pode usar essas chaves locais para criptografar os dados, que residem no Armazenamento do Microsoft Azure. Se suas credenciais de conta de armazenamento de nuvem forem roubadas, seus dados permanecerão seguros porque os certificados de TDE sempre residirão no local.

  • Backup de instantâneo: esse recurso permite usar os instantâneos do Azure para fornecer backups quase imediatos e restaurações mais rápidas para os arquivos de banco de dados armazenados usando o Armazenamento de Blobs do Azure. Essa funcionalidade permite simplificar suas políticas de backup e restauração. Para obter mais informações, consulte Backups de instantâneo de arquivo para arquivos de banco de dados no Azure.

Conceitos e requisitos

Os discos do Azure são compatíveis com soluções de continuidade dos negócios e recuperação de desastres em toda a empresa. Se você armazenar seus bancos de dados diretamente em blobs ou nos arquivos premium do Azure, eles não serão associados automaticamente à sua VM para infraestrutura, gerenciamento e monitoramento.

Colocar os arquivos de banco de dados em blobs de páginas é um recurso mais avançado do que usar discos do Azure, que são simples e amigáveis ao usuário.

A diretriz básica é usar discos do Azure, a menos que você tenha um cenário em que realmente precise evitar a criação de uma cópia dos dados para backups ou a restauração como uma operação de tamanho de dados. Para alta disponibilidade e recuperação de desastres, o uso de backup regular para URL ou backup gerenciado para o armazenamento de blobs também é muito mais útil do que os backups de instantâneo de arquivo, pois você obtém gerenciamento de ciclo de vida, suporte a várias regiões, exclusão temporária e todos os outros recursos do armazenamento de blobs de seus backups.

Conceitos de Armazenamento do Azure

Ao usar o recurso de arquivos de dados do SQL Server no Azure, você precisará criar um contêiner e uma conta de armazenamento no Azure. Em seguida, você precisará criar uma credencial do SQL Server, que inclui as informações sobre a política do contêiner, assim como uma assinatura de acesso compartilhado que é necessária para acessar o contêiner.

No Microsoft Azure, uma conta de armazenamento do Azure representa o nível mais alto do namespace para acesso aos blobs. Uma conta de armazenamento pode conter um número ilimitado de contêineres, contanto que o seu tamanho total esteja abaixo dos limites de armazenamento. Para obter as informações mais recentes sobre os limites de armazenamento, consulte Assinatura e limites de serviço, cotas e restrições do Azure. Um contêiner fornece um agrupamento de conjunto de blobs. Todos os blobs devem estar em um contêiner. Uma conta pode conter um número ilimitado de contêineres. Da mesma maneira, um contêiner pode armazenar um número ilimitado de blobs.

Há dois tipos de blobs que podem ser armazenados no Armazenamento do Azure: blobs de blocos e de páginas. Esse recurso usa blobs de páginas, que são mais eficientes quando os intervalos de bytes em um arquivo são alterados com frequência. Você pode acessar blobs usando o seguinte formato de URL: https://storageaccount.blob.core.windows.net/<container>/<blob>.

Observação

Você não pode usar blobs de blocos para arquivos de dados do SQL Server. Use blobs de páginas.

Considerações sobre cobrança do Azure

Estimar o custo do uso dos Serviços do Azure é uma questão importante do processo de tomada de decisão e planejamento. Ao armazenar arquivos de dados do SQL Server no Armazenamento do Azure, você precisa pagar os custos associados ao armazenamento e às transações. Além disso, a implementação do recurso Arquivos de Dados do SQL Server no Armazenamento do Azure exige uma renovação da concessão de Blob em intervalos de 45 a 60 segundos implicitamente. Isso também resulta em custo de transações por arquivo de banco de dados, como arquivos .mdf e .ldf. Use as informações na página Preços do Azure para ajudar a estimar os custos mensais associados ao uso do Armazenamento do Azure e das Máquinas Virtuais do Azure.

Conceitos do SQL Server

Para usar os blobs de páginas do Azure para arquivos de dados do SQL Server:

  • crie uma política em um contêiner e gere uma SAS (assinatura de acesso compartilhado).

  • Para cada contêiner usado por um arquivo de log ou de dados, crie uma credencial do SQL Server cujo nome corresponda ao caminho do contêiner.

  • Armazene as informações relacionadas ao contêiner do Armazenamento do Azure, seu nome de política associado e a chave SAS no repositório de credenciais do SQL Server.

O exemplo a seguir supõe que um contêiner de Armazenamento do Azure tenha sido criado e uma política tenha sido criada com direitos de leitura, gravação e lista. Criar uma política em um contêiner gera uma chave de SAS, que pode ser mantida não criptografada na memória e usada pelo SQL Server para acessar os arquivos de blob no contêiner.

No snippet de código a seguir, substitua '<your SAS key>' pela chave SAS. A chave SAS será parecida com 'sr=c&si=<MYPOLICYNAME>&sig=<THESHAREDACCESSSIGNATURE>'.

CREATE CREDENTIAL [https://testdb.blob.core.windows.net/data]  
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = '<your SAS key>'  
  
CREATE DATABASE testdb   
ON  
( NAME = testdb_dat,  
    FILENAME = 'https://testdb.blob.core.windows.net/data/TestData.mdf' )  
 LOG ON  
( NAME = testdb_log,  
    FILENAME =  'https://testdb.blob.core.windows.net/data/TestLog.ldf')  

Importante

se houver alguma referência ativa aos arquivos de dados em um contêiner, as tentativas de excluir as credenciais correspondentes do SQL Server apresentarão falha.

Para saber mais, confira Gerenciar o acesso aos recursos de Armazenamento do Azure

Segurança

Veja abaixo os requisitos e as considerações sobre segurança ao armazenar os Arquivos de Dados do SQL Server no Armazenamento do Azure.

  • Ao criar um contêiner para o Armazenamento de Blobs do Azure, recomendamos que você defina o acesso como privado. Quando você define o acesso como privado, o contêiner e os dados de blob podem ser lidos somente pelo proprietário da conta do Azure.

  • Ao armazenar arquivos de banco de dados do SQL Server no Armazenamento do Azure, você precisará usar uma assinatura de acesso compartilhado, um URI que concede direitos de acesso restrito a contêineres, blobs, filas e tabelas. Ao usar uma assinatura de acesso compartilhado, você poderá habilitar o SQL Server a acessar recursos em sua conta de armazenamento sem compartilhar a chave de conta de armazenamento do Azure.

  • Além disso, recomendamos que você continue a implementar as práticas tradicionais de segurança locais para seus bancos de dados.

Pré-requisitos da instalação

Veja abaixo os pré-requisitos de instalação ao armazenar Arquivos de Dados do SQL Server no Azure.

  • SQL Server local: SQL Server 2016 e posteriores incluem esse recurso. Para saber como baixar a última versão do SQL Server, consulte SQL Server.

  • SQL Server em execução em uma máquina virtual do Azure: se você estiver instalando o SQL Server em uma Máquina Virtual do Azure, instale o SQL Server 2016 ou atualize a instância existente. Da mesma forma, você também pode criar uma nova máquina virtual no Azure usando a imagem de plataforma do SQL Server 2016.

Limitações

  • Devido às características de desempenho das cargas de trabalho do SQL Server, os arquivos de dados do SQL Server são implementados como blobs de páginas no Armazenamento de Blobs do Azure. Não há suporte para outros tipos de armazenamento de blobs, como os blobs de blocos ou o Azure Data Lake Storage.

  • Na versão atual desse recurso, não há suporte para armazenamento de dados do Fluxo de arquivos no Armazenamento do Azure. Você pode armazenar dados de FileStream em um banco de dados que também contém arquivos de dados armazenados no Armazenamento do Azure, mas todos os arquivos de dados de FileStream devem ser armazenados no armazenamento local. Como os dados de FileStream precisam residir no armazenamento local, eles não podem ser movidos entre computadores usando o Armazenamento do Azure, portanto, é recomendável que você continue usando técnicas tradicionais para mover os dados associados ao FileStream entre computadores diferentes.

  • Atualmente, apenas uma instância do SQL Server pode acessar um determinado arquivo de banco de dados no Armazenamento do Microsoft Azure ao mesmo tempo. Se a Instância A estiver online com um arquivo de banco de dados ativo e a Instância B for iniciada por acidente e também tiver um banco de dados que aponta para o mesmo arquivo de dados, a segunda instância não iniciará o banco de dados com um código de erro 5120 Unable to open the physical file "%.\*ls". Operating system error %d: "%ls".

  • Apenas arquivos .mdf, .ldf e .ndf podem ser armazenados no Armazenamento do Azure usando o recurso Arquivos de Dados do SQL Server no Azure.

  • Ao usar o recurso Arquivos de Dados do SQL Server no Azure, não haverá suporte para a replicação geográfica em sua conta de armazenamento. Se uma conta de armazenamento for replicada geograficamente e um failover geográfico acontecer, poderá haver dados corrompidos.

  • Para limitações de capacidade, consulte Introdução ao armazenamento de Blobs.

  • Não é possível armazenar dados OLTP in-memory no armazenamento de Blobs usando o recurso Arquivos de Dados do SQL Server no Armazenamento do Azure. Isso ocorre porque o OLTP in-memory tem uma dependência do Fluxo de arquivos e, na versão atual desse recurso, não há suporte para armazenamento de dados do Fluxo de arquivos no Armazenamento do Azure.

  • Ao usar o recurso arquivos de dados do SQL Server no Azure, o SQL Server executa todas as comparações de URL ou caminho de arquivo usando a ordenação definida no banco de dados master.

  • Os Grupos de disponibilidade Always On têm suporte contanto que você não adicione novos arquivos de banco de dados ao banco de dados na réplica primária. Se uma operação de banco de dados exigir que um novo arquivo seja criado no banco de dados na réplica primária, primeiro desabilite os grupos de disponibilidade no nó secundário. Em seguida, execute a operação de banco de dados no banco de dados e faça o backup do banco de dados na réplica primária. Depois, restaure o banco de dados para a réplica secundária. Depois de concluir, habilite novamente grupos de disponibilidade Always On no nó secundário.

    Observação

    Não há suporte para as instâncias de cluster de failover Always On ao usar o recurso Arquivos de dados do SQL Server no Azure.

  • Durante a operação normal, o SQL Server usa concessões temporárias para reservar os blobs para armazenamento com uma renovação de cada concessão de blob a cada 45 a 60 segundos. Se um servidor falhar e outra instância do SQL Server configurada para usar os mesmos blobs tiver sido iniciada, a nova instância aguardará até 60 segundos pela concessão existente expirar no blob. Se você quiser anexar o banco de dados a outra instância e não puder aguardar a concessão expirar dentro de 60 segundos, libere explicitamente a concessão no blob.

Suporte a ferramentas e referência de programação

Esta seção descreve as ferramentas e as bibliotecas de referência de programação que podem ser usadas ao armazenar arquivos de dados do SQL Server no Armazenamento do Azure.

Suporte do PowerShell

Use cmdlets do PowerShell para armazenar arquivos de dados do SQL Server no serviço de armazenamento de Blobs, fazendo referência a um caminho de URL do Armazenamento de Blobs, em vez de um caminho do arquivo. Acessar blobs usando o formato de URL a seguir: https://storageaccount.blob.core.windows.net/<container>/<blob>.

Suporte ao objeto SQL Server e aos contadores de desempenho

A partir do SQL Server 2014, um novo objeto SQL Server foi adicionado para ser usado com o recurso Arquivos de Dados do SQL Server no Armazenamento do Azure. O novo objeto SQL Server é chamado de SQL Server, HTTP_STORAGE_OBJECT e pode ser usado pelo Monitor do Sistema para monitorar a atividade ao executar o SQL Server com o Armazenamento do Microsoft Azure.

Suporte ao SQL Server Management Studio

O SQL Server Management Studio permite usar esse recurso por meio de várias janelas da caixa de diálogo. Por exemplo, https://teststorageaccnt.blob.core.windows.net/testcontainer/ representa o caminho da URL de um contêiner de armazenamento. Você pode ver esse Caminho em várias janelas de diálogo, como Novo Banco de Dados, Anexar Banco de Dados e Restaurar Banco de Dados. Para obter mais informações, confira Tutorial: usar o Armazenamento de Blobs do Azure com os bancos de dados do SQL Server.

Suporte ao SMO (SQL Server Management Objects)

Ao usar o recurso Arquivos de Dados do SQL Server no Azure, há suporte para o SMO (SQL Server Management Objects). Se um objeto SMO exigir um caminho de arquivo, use o formato de URL do BLOB em vez do caminho de um arquivo local, como https://teststorageaccnt.blob.core.windows.net/testcontainer/. Para obter mais informações sobre o SQL Server Management Objects (SMO), veja Guia de Programação do SQL Server Management Objects (SMO) nos Manuais Online do SQL Server.

Suporte a Transact-SQL

A adição desse recurso introduziu a seguinte alteração na área da superfície do Transact-SQL:

  • Uma nova coluna int, credential_id, na exibição do sistema sys.master_files. A coluna credential_id é usada para habilitar arquivos de dados para o Armazenamento do Azure para a referência cruzada sys.credentials das credenciais criadas para eles. Você pode usá-la para solucionar problemas, como, por exemplo, uma credencial que não pode ser excluída quando há um arquivo de banco de dados que a utiliza.

Solução de problemas de Arquivos de Dados do SQL Server no Microsoft Azure

Para evitar erros devido a recursos sem suporte ou limitações, primeiro analise Limitations.

Veja abaixo a lista de erros que você pode obter ao usar o recurso Arquivos de Dados do SQL Server no Armazenamento do Azure.

Erros de autenticação

  • Não é possível remover a credencial “%.ls”, pois ela é usada por um arquivo de banco de dados ativo.
    Resolução: você poderá ver este erro ao tentar remover uma credencial que ainda está sendo usada por um arquivo de banco de dados ativo no Armazenamento do Azure. Para descartar a credencial, primeiro exclua o blob associado que contém esse arquivo de banco de dados. Para excluir um blob que tem uma concessão ativa, primeiro você deve liberar a concessão.

  • A assinatura de acesso compartilhado não foi criada no contêiner corretamente.
    Resolução: verifique se você criou uma assinatura de acesso compartilhado no contêiner corretamente. Revise as instruções fornecidas na Lição 2 no Tutorial: usar o Armazenamento de Blobs do Azure com bancos de dados do SQL Server.

  • A credencial do SQL Server não foi criada corretamente.
    Resolução: verifique se você usou "Assinatura de Acesso Compartilhado" para o campo Identidade e se criou um segredo corretamente. Revise as instruções fornecidas na Lição 3 no Tutorial: use o Armazenamento de Blobs do Azure com bancos de dados do SQL Server.

Erros de blob de concessão:

  • Erro ao tentar iniciar o SQL Server depois da falha de outra instância usando os mesmos arquivos de blob. Resolução: durante a operação normal, o SQL Server usa concessões temporárias para reservar os blobs para armazenamento com uma renovação de cada concessão de blob a cada 45 a 60 segundos. Se um servidor falhar e outra instância do SQL Server configurada para usar os mesmos blobs tiver sido iniciada, a nova instância aguardará até 60 segundos pela concessão existente expirar no blob. Se você quiser anexar o banco de dados a outra instância e não puder aguardar a concessão expirar dentro de 60 segundos, libere explicitamente a concessão no blob para evitar falhas em operações de anexação.

Erros de banco de dados

Resolução Erros ao criar um banco de dados: revise as instruções fornecidas na Lição 4 no Tutorial: use o Armazenamento de Blobs do Azure da Microsoft com bancos de dados do SQL Server.

Erros ao executar a instrução Alter Resolução: execute a instrução Alter Database mudar quando o banco de dados estiver online. Ao copiar os arquivos de dados no Armazenamento do Azure, sempre crie um blob de páginas, não um blob de blocos. Caso contrário, ALTER Database falhará. Revise as instruções fornecidas na Lição 7 no Tutorial: use o Armazenamento de Blobs do Azure da Microsoft com bancos de dados do SQL Server.

Código de erro - 5120 Não é possível abrir o arquivo físico "%.ls". Erro no sistema operacional %d: "%ls"

Resolução: esse recurso não dá suporte a mais de uma instância do SQL Server acessando os mesmos arquivos de banco de dados no Armazenamento do Microsoft Azure ao mesmo tempo. Se a Instância A estiver online com um arquivo de banco de dados ativo e a Instância B for iniciada e também tiver um banco de dados que aponta para o mesmo arquivo de dados, a segunda instância não iniciará o banco de dados com um código de erro 5120 Unable to open the physical file "%.\*ls". Operating system error %d: "%ls".

Para resolver esse problema, primeiro determine se você precisa que o ServerA acesse o arquivo de banco de dados no Armazenamento do Azure. Se não precisar, remova as conexões entre a Instância A e os arquivos de banco de dados no Armazenamento do Microsoft Azure. Para fazer isso, siga estas etapas:

  1. Defina o caminho do arquivo da Instância A para uma pasta local usando a instrução ALTER Database.

  2. Defina o banco de dados como offline na Instância A.

  3. Em seguida, copie os arquivos do banco de dados do Armazenamento do Microsoft Azure para a pasta local na Instância A. Isso garante que a Instância A ainda tenha uma cópia do banco de dados localmente.

  4. Defina o banco de dados como online.

Código de erro 833 – As solicitações de E/S estão levando mais de 15 segundos para serem concluídas

Esse erro indica que o sistema de armazenamento não consegue atender às demandas da carga de trabalho do SQL Server. Diminua a atividade de E/S da camada de aplicativo ou aumente a capacidade de taxa de transferência na camada de armazenamento. Para saber mais, confira Erro 833. Se os problemas de desempenho persistirem, considere mover os arquivos para uma camada de armazenamento diferente, como Premium ou UltraSSD. Para o SQL Server em VMs do Azure, confira otimização do desempenho de armazenamento.

Próximas etapas