Migrar bancos de dados existentes para expansão

Aplica-se a:Banco de Dados SQL do Azure

Gerencie facilmente seus bancos de dados fragmentados dimensionados existentes usando ferramentas (como a biblioteca de cliente do Banco de Dados Elástico). Primeiro, converta um conjunto existente de bancos de dados para usar o gerenciador de mapas de estilhaços.

Descrição geral

Para migrar um banco de dados fragmentado existente:

  1. Prepare o banco de dados do gerenciador de mapas de estilhaços.
  2. Crie o mapa de estilhaços.
  3. Prepare os estilhaços individuais.
  4. Adicione mapeamentos ao mapa de estilhaços.

Essas técnicas podem ser implementadas usando a biblioteca de cliente do .NET Framework ou os scripts do PowerShell encontrados no Banco de Dados SQL do Azure - scripts de ferramentas do Banco de Dados Elástico. Os exemplos aqui usam os scripts do PowerShell.

Para obter mais informações sobre o ShardMapManager, consulte Gerenciamento de mapas de estilhaços. Para obter uma visão geral das ferramentas do Banco de Dados Elástico, consulte Visão geral dos recursos do Banco de Dados Elástico.

Preparar o banco de dados do gerenciador de mapas de estilhaços

O gerenciador de mapas de estilhaços é um banco de dados especial que contém os dados para gerenciar bancos de dados dimensionados. Você pode usar um banco de dados existente ou criar um novo banco de dados. Um banco de dados que atua como gerenciador de mapas de estilhaços não deve ser o mesmo banco de dados que um fragmento. O script do PowerShell não cria o banco de dados para você.

Etapa 1: Criar um gerenciador de mapas de estilhaços

# Create a shard map manager
New-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'
#<server_name> and <smm_db_name> are the server name and database name
# for the new or existing database that should be used for storing
# tenant-database mapping information.

Para recuperar o gerenciador de mapas de estilhaços

Após a criação, você pode recuperar o gerenciador de mapas de estilhaços com este cmdlet. Esta etapa é necessária sempre que você precisar usar o objeto ShardMapManager.

# Try to get a reference to the Shard Map Manager  
$ShardMapManager = Get-ShardMapManager -UserName '<user_name>' -Password '<password>' -SqlServerName '<server_name>' -SqlDatabaseName '<smm_db_name>'

Etapa 2: Criar o mapa de estilhaços

Selecione o tipo de mapa de estilhaços a ser criado. A escolha depende da arquitetura do banco de dados:

  1. Locatário único por banco de dados (Para termos, consulte o glossário.)
  2. Vários locatários por banco de dados (dois tipos):
    1. Mapeamento de listas
    2. Mapeamento de alcance

Para um modelo de locatário único, crie um mapa de estilhaços de mapeamento de lista. O modelo de locatário único atribui um banco de dados por locatário. Este é um modelo eficaz para desenvolvedores de SaaS, pois simplifica o gerenciamento.

List mapping

O modelo multilocatário atribui vários locatários a um banco de dados individual (e você pode distribuir grupos de locatários em vários bancos de dados). Use esse modelo quando você espera que cada locatário tenha pequenas necessidades de dados. Neste modelo, atribua um intervalo de locatários a um banco de dados usando o mapeamento de intervalo.

Range mapping

Ou você pode implementar um modelo de banco de dados multilocatário usando um mapeamento de lista para atribuir vários locatários a um banco de dados individual. Por exemplo, o DB1 é usado para armazenar informações sobre o ID do locatário 1 e 5, e o DB2 armazena dados para o locatário 7 e o locatário 10.

Multiple tenants on single DB

Com base na sua escolha, escolha uma destas opções:

Opção 1: Criar um mapa de estilhaços para um mapeamento de lista

Crie um mapa de estilhaços usando o objeto ShardMapManager.

# $ShardMapManager is the shard map manager object
$ShardMap = New-ListShardMap -KeyType $([int]) -ListShardMapName 'ListShardMap' -ShardMapManager $ShardMapManager

Opção 2: Criar um mapa de estilhaços para um mapeamento de intervalo

Para utilizar esse padrão de mapeamento, os valores de ID do locatário precisam ser intervalos contínuos, e é aceitável ter uma lacuna nos intervalos ignorando o intervalo ao criar os bancos de dados.

# $ShardMapManager is the shard map manager object
# 'RangeShardMap' is the unique identifier for the range shard map.  
$ShardMap = New-RangeShardMap -KeyType $([int]) -RangeShardMapName 'RangeShardMap' -ShardMapManager $ShardMapManager

Opção 3: Listar mapeamentos em um banco de dados individual

A configuração desse padrão também requer a criação de um mapa de lista, conforme mostrado na etapa 2, opção 1.

Passo 3: Preparar fragmentos individuais

Adicione cada fragmento (banco de dados) ao gerenciador de mapas de estilhaços. Isso prepara os bancos de dados individuais para armazenar informações de mapeamento. Execute este método em cada fragmento.

Add-Shard -ShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'
# The $ShardMap is the shard map created in step 2.

Etapa 4: Adicionar mapeamentos

A adição de mapeamentos depende do tipo de mapa de estilhaços que você criou. Se você criou um mapa de lista, adicionará mapeamentos de lista. Se você criou um mapa de intervalo, adicionará mapeamentos de intervalo.

Opção 1: Mapear os dados para um mapeamento de lista

Mapeie os dados adicionando um mapeamento de lista para cada locatário.

# Create the mappings and associate it with the new shards
Add-ListMapping -KeyType $([int]) -ListPoint '<tenant_id>' -ListShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'

Opção 2: Mapear os dados para um mapeamento de intervalo

Adicione os mapeamentos de intervalo para todos os intervalos de ID de locatário - associações de banco de dados:

# Create the mappings and associate it with the new shards
Add-RangeMapping -KeyType $([int]) -RangeHigh '5' -RangeLow '1' -RangeShardMap $ShardMap -SqlServerName '<shard_server_name>' -SqlDatabaseName '<shard_database_name>'

Etapa 4 opção 3: mapear os dados para vários locatários em um banco de dados individual

Para cada locatário, execute o Add-ListMapping (opção 1).

Verificando os mapeamentos

Informações sobre os fragmentos existentes e os mapeamentos associados a eles podem ser consultadas usando os seguintes comandos:

# List the shards and mappings
Get-Shards -ShardMap $ShardMap
Get-Mappings -ShardMap $ShardMap

Resumo

Depois de concluir a configuração, você pode começar a usar a biblioteca de cliente do Elastic Database. Você também pode usar o roteamento dependente de dados e a consulta multiestilhaço.

Próximos passos

Obtenha os scripts do PowerShell dos scripts de ferramentas do Banco de Dados Elástico do Azure.

A biblioteca de cliente de ferramentas de banco de dados elástico está disponível no GitHub: Azure/elastic-db-tools.

Use a ferramenta de mesclagem dividida para mover dados de ou para um modelo multilocatário para um modelo de locatário único. Consulte Ferramenta de mesclagem dividida.

Recursos adicionais

Para obter informações sobre os padrões da arquitetura de dados comuns de aplicações de base de dados de software como um serviço (Saas) de multi-inquilino, consulte Design Patterns for Multi-tenant SaaS Applications with Azure SQL Database (Padrões de estrutura para Aplicações SaaS Multi-inquilino com a Base de Dados SQL do Azure).

Perguntas e solicitações de recursos

Para dúvidas, use a página de perguntas e respostas da Microsoft para o Banco de dados SQL e, para solicitações de recursos, adicione-as ao fórum de comentários do Banco de dados SQL.