Sincronizar dados entre vários bancos de dados locais e de nuvem com a Sincronização de Dados SQLSync data across multiple cloud and on-premises databases with SQL Data Sync

Sincronização de Dados SQL é um serviço baseado no Banco de Dados SQL do Azure que lhe permite sincronizar os dados que você selecionar bidirecionalmente em vários bancos de dados SQL e instâncias do SQL Server.SQL Data Sync is a service built on Azure SQL Database that lets you synchronize the data you select bi-directionally across multiple SQL databases and SQL Server instances.

Importante

Atualmente, a Sincronização de Dados SQL não dá suporte para Instância Gerenciada do Banco de Dados SQL do Azure.Azure SQL Data Sync does not support Azure SQL Database Managed Instance at this time.

Quando usar a Sincronização de DadosWhen to use Data Sync

A Sincronização de Dados é útil nos casos em que os dados precisam ser mantidos atualizados em vários bancos de dados SQL do Azure ou bancos de dados do SQL Server.Data Sync is useful in cases where data needs to be kept up-to-date across several Azure SQL databases or SQL Server databases. Estes são os casos de uso principais para Sincronização de Dados:Here are the main use cases for Data Sync:

  • Sincronização de Dados Híbrida: Com a Sincronização de Dados, você pode manter os dados sincronizados entre os bancos de dados locais e os bancos de dados SQL do Azure para habilitar aplicativos híbridos.Hybrid Data Synchronization: With Data Sync, you can keep data synchronized between your on-premises databases and Azure SQL databases to enable hybrid applications. Esse recurso pode ser atraente para clientes que estejam avaliando a mudança para a nuvem e gostariam de colocar alguns dos seus aplicativos no Azure.This capability may appeal to customers who are considering moving to the cloud and would like to put some of their application in Azure.
  • Aplicativos Distribuídos: Em muitos casos, é útil separar diferentes cargas de trabalho em bancos de dados diferentes.Distributed Applications: In many cases, it's beneficial to separate different workloads across different databases. Por exemplo, se você tiver um banco de dados de produção grande, mas você também precisa executar uma carga de trabalho de relatório ou análise de dados, é útil ter um segundo banco de dados para essa carga de trabalho adicional.For example, if you have a large production database, but you also need to run a reporting or analytics workload on this data, it's helpful to have a second database for this additional workload. Essa abordagem minimiza o impacto no desempenho da sua carga de trabalho de produção.This approach minimizes the performance impact on your production workload. Você pode usar a Sincronização de Dados para manter esses dois bancos de dados sincronizados.You can use Data Sync to keep these two databases synchronized.
  • Aplicativos Distribuídos Globalmente: Muitas empresas abrangem várias regiões e até mesmo vários países/regiões.Globally Distributed Applications: Many businesses span several regions and even several countries/regions. Para minimizar a latência de rede, é melhor ter seus dados em uma região perto de você.To minimize network latency, it's best to have your data in a region close to you. Com a sincronização de dados, você pode facilmente manter os bancos de dados em regiões de todo o mundo sincronizados.With Data Sync, you can easily keep databases in regions around the world synchronized.

A Sincronização de Dados não é a solução preferencial para os cenários a seguir:Data Sync is not the preferred solution for the following scenarios:

CenárioScenario Algumas soluções recomendadasSome recommended solutions
Recuperação de desastreDisaster Recovery Backups com redundância geográfica do AzureAzure geo-redundant backups
Escala de LeituraRead Scale Usar réplicas somente leitura para balancear a carga de cargas de trabalho de consulta somente leitura (versão prévia)Use read-only replicas to load balance read-only query workloads (preview)
ETL (OLTP para OLAP)ETL (OLTP to OLAP) Azure Data Factory ou SQL Server Integration ServicesAzure Data Factory or SQL Server Integration Services
Migração do SQL Server local para um Banco de Dados SQL do AzureMigration from on-premises SQL Server to Azure SQL Database Serviço de Migração de Banco de Dados do AzureAzure Database Migration Service

Visão geral da Sincronização de Dados SQLOverview of SQL Data Sync

A Sincronização de Dados é baseada em torno do conceito de um Grupo de Sincronização.Data Sync is based around the concept of a Sync Group. Um Grupo de Sincronização é um grupo de bancos de dados que você deseja sincronizar.A Sync Group is a group of databases that you want to synchronize.

A Sincronização de Dados usa uma topologia hub-spoke para sincronizar os dados.Data Sync uses a hub and spoke topology to synchronize data. Você define um dos bancos de dados no grupo de sincronização como o Banco de Dados Hub.You define one of the databases in the sync group as the Hub Database. O restante dos bancos de dados são bancos de dados de membros.The rest of the databases are member databases. A sincronização ocorre apenas entre o Hub e membros individuais.Sync occurs only between the Hub and individual members.

  • O Banco de Dados Hub deve ser um Banco de Dados SQL do Azure.The Hub Database must be an Azure SQL Database.
  • Os bancos de dados de membro podem ser Bancos de Dados SQL, bancos de dados locais do SQL Server ou instâncias do SQL Server em máquinas virtuais do Azure.The member databases can be either SQL Databases, on-premises SQL Server databases, or SQL Server instances on Azure virtual machines.
  • O Banco de Dados de Sincronização contém os metadados e o log de Sincronização de Dados. O Banco de Dados de Sincronização deve ser um Banco de Dados SQL do Azure localizado na mesma região do Banco de Dados Hub.The Sync Database contains the metadata and log for Data Sync. The Sync Database has to be an Azure SQL Database located in the same region as the Hub Database. O Banco de Dados de Sincronização é criado pelo cliente e é propriedade do cliente.The Sync Database is customer created and customer owned.

Observação

Se você usando um banco de dados local como um banco de dados de membro, você terá que instalar e configurar um agente de sincronização local.If you're using an on premises database as a member database, you have to install and configure a local sync agent.

Sincronizar dados entre bancos de dados

Um Grupo de Sincronização tem as seguintes propriedades:A Sync Group has the following properties:

  • O Esquema de Sincronização descreve quais dados estão sendo sincronizados.The Sync Schema describes which data is being synchronized.
  • A Direção da Sincronização pode ser bidirecional ou pode fluir em uma única direção.The Sync Direction can be bi-directional or can flow in only one direction. Ou seja, a Direção da Sincronização pode ser Hub para Membro ou Membro para Hub, ou ambos.That is, the Sync Direction can be Hub to Member, or Member to Hub, or both.
  • O Intervalo de Sincronização descreve a frequência com a qual ocorre a sincronização.The Sync Interval describes how often synchronization occurs.
  • A Política de Resolução de Conflito é uma política em nível de grupo, que pode ser Hub ganha ou Membro ganha.The Conflict Resolution Policy is a group level policy, which can be Hub wins or Member wins.

Como a Sincronização de Dados funciona?How does Data Sync work

  • Acompanhamento de dados: A Sincronização de Dados controla alterações usando os gatilhos inserir, atualizar e excluir.Tracking data changes: Data Sync tracks changes using insert, update, and delete triggers. As alterações são registradas em uma tabela secundária do banco de dados do usuário.The changes are recorded in a side table in the user database. Observe que o BULK INSERT não dispara gatilhos por padrão.Note that BULK INSERT does not fire triggers by default. Se FIRE_TRIGGERS não for especificado, nenhum gatilho de inserção será executado.If FIRE_TRIGGERS is not specified, no insert triggers execute. Adicionar a opção de FIRE_TRIGGERS para a Sincronização de dados rastrear essas inserções.Add the FIRE_TRIGGERS option so Data Sync can track those inserts.
  • Sincronização de dados: A Sincronização de Dados é criada em um modelo Hub-Spoke.Synchronizing data: Data Sync is designed in a Hub and Spoke model. O Hub é sincronizado com cada membro individualmente.The Hub syncs with each member individually. As alterações do Hub são baixadas para o membro e, em seguida, as alterações do membro são carregadas para o Hub.Changes from the Hub are downloaded to the member and then changes from the member are uploaded to the Hub.
  • Resolução de conflitos: A Sincronização de Dados fornece duas opções para a resolução de conflito, Hub ganha ou Membro ganha.Resolving conflicts: Data Sync provides two options for conflict resolution, Hub wins or Member wins.
    • Se você selecionar Hub ganha, as alterações no hub sempre substituem as alterações no membro.If you select Hub wins, the changes in the hub always overwrite changes in the member.
    • Se você selecionar Membro ganha, as alterações no membro sempre substituem as alterações no hub.If you select Member wins, the changes in the member overwrite changes in the hub. Se houver mais de um membro, o valor final depende de qual membro será sincronizado pela primeira vez.If there's more than one member, the final value depends on which member syncs first.

Comparar a sincronização de dados com a replicação transacionalCompare Data Sync with Transactional Replication

Sincronização de DadosData Sync Replicação transacionalTransactional Replication
VantagensAdvantages – Suporte ativo-ativo- Active-active support
– Bidirecional entre o Banco de Dados SQL do Azure e o local- Bi-directional between on-premises and Azure SQL Database
– Menor latência- Lower latency
– Consistência transacional- Transactional consistency
– Reutilização da topologia existente após a migração- Reuse existing topology after migration
DesvantagensDisadvantages – Latência de 5 minutos ou mais- 5 min or more latency
– Não há consistência transacional- No transactional consistency
– Maior impacto do desempenho- Higher performance impact
– Não pode publicar do banco de dados individual ou em pool do Banco de Dados SQL do Azure- Can’t publish from Azure SQL Database single database or pooled database
– Alto custo de manutenção- High maintenance cost

Introdução à Sincronização de Dados SQLGet started with SQL Data Sync

Configurar a Sincronização de Dados no Portal do AzureSet up Data Sync in the Azure portal

Configurar a Sincronização de Dados com o PowerShellSet up Data Sync with PowerShell

Revisar as práticas recomendadas para a Sincronização de DadosReview the best practices for Data Sync

Algo deu errado?Did something go wrong

Consistência e desempenhoConsistency and performance

Consistência eventualEventual consistency

Como a Sincronização de Dados é baseada no gatilho, a consistência transacional não é garantida.Since Data Sync is trigger-based, transactional consistency is not guaranteed. A Microsoft garante que todas as alterações são feitas, eventualmente, e que a Sincronização de Dados não causa perda de dados.Microsoft guarantees that all changes are made eventually and that Data Sync does not cause data loss.

Impacto sobre o desempenhoPerformance impact

A Sincronização de Dados usa os gatilhos inserir, atualizar e excluir para controlar as alterações.Data Sync uses insert, update, and delete triggers to track changes. Ela cria tabelas secundárias no banco de dados do usuário para controle de alterações.It creates side tables in the user database for change tracking. Essas atividades de controle de alterações têm um impacto sobre sua carga de trabalho do banco de dados.These change tracking activities have an impact on your database workload. Avalie sua camada de serviço e faça a atualização necessário.Assess your service tier and upgrade if needed.

Provisionamento e desprovisionamento durante a criação do grupo de sincronização, atualização e exclusão também podem afetar o desempenho do banco de dados.Provisioning and deprovisioning during sync group creation, update, and deletion may also impact the database performance.

Requisitos e limitaçõesRequirements and limitations

Requisitos geraisGeneral requirements

  • Cada tabela deve ter uma chave primária.Each table must have a primary key. Não altere o valor da chave primária em nenhuma linha.Don't change the value of the primary key in any row. Se você tiver de alterar o valor de uma chave primária, exclua a linha e recrie-a com o novo valor de chave primária.If you have to change a primary key value, delete the row and recreate it with the new primary key value.
  • O isolamento de instantâneo deve estar habilitado.Snapshot isolation must be enabled. Para obter mais informações, consulte Isolamento de instantâneo no SQL Server.For more info, see Snapshot Isolation in SQL Server.

Limitações geraisGeneral limitations

  • Uma tabela não pode uma coluna de identidade que não seja a chave primária.A table cannot have an identity column that is not the primary key.
  • Uma chave primária não pode ter os seguintes tipos de dados: sql_variant, binário, varbinary, imagem e xml.A primary key cannot have the following data types: sql_variant, binary, varbinary, image, xml.
  • Tenha cuidado ao usar os seguintes tipos de dados como uma chave primária, porque a precisão com suporte é apenas para o segundo: time, datatime, datetime2 e datetimeoffset.Be cautious when you use the following data types as a primary key, because the supported precision is only to the second: time, datetime, datetime2, datetimeoffset.
  • Os nomes de objetos (bancos de dados, tabelas e colunas) não podem conter os caracteres imprimíveis ponto (.), colchete esquerdo ([) ou colchete direito (]).The names of objects (databases, tables, and columns) cannot contain the printable characters period (.), left square bracket ([), or right square bracket (]).
  • A autenticação do Azure Active Directory não tem suporte.Azure Active Directory authentication is not supported.
  • Tabelas com o mesmo nome, mas esquema diferente (por exemplo, dbo.customers e sales.customers) não são suportadas.Tables with same name but different schema (for example, dbo.customers and sales.customers) are not supported.
  • Não há suporte para colunas com tipos de dados definidos pelo usuárioColumns with User Defined Data Types are not supported

Tipos de dados sem suporteUnsupported data types

  • FileStreamFileStream
  • SQL/CLR UDTSQL/CLR UDT
  • XMLSchemaCollection (suporte para XML)XMLSchemaCollection (XML supported)
  • Cursor, RowVersion, Timestamp, HierarchyidCursor, RowVersion, Timestamp, Hierarchyid

Não há suporte para os tipos de colunaUnsupported column types

A Sincronização de Dados não pode sincronizar colunas somente leitura ou geradas pelo sistema.Data Sync can't sync read-only or system-generated columns. Por exemplo:For example:

  • Colunas computadas.Computed columns.
  • Colunas geradas pelo sistema para tabelas temporais.System-generated columns for temporal tables.

Limitações nas dimensões de serviço e do banco de dadosLimitations on service and database dimensions

DimensõesDimensions LimiteLimit Solução alternativaWorkaround
Número máximo de grupos de sincronização aos quais qualquer banco de dados pode pertencer.Maximum number of sync groups any database can belong to. 55
Número máximo de pontos de extremidade em um único grupo de sincronizaçãoMaximum number of endpoints in a single sync group 3030
Número máximo de pontos de extremidade locais em um único grupo de sincronização.Maximum number of on-premises endpoints in a single sync group. 55 Criar vários grupos de sincronizaçãoCreate multiple sync groups
Nomes de coluna, tabela, esquema e banco de dadosDatabase, table, schema, and column names 50 caracteres por nome50 characters per name
Tabelas em um grupo de sincronizaçãoTables in a sync group 500500 Criar vários grupos de sincronizaçãoCreate multiple sync groups
Colunas em uma tabela em um grupo de sincronizaçãoColumns in a table in a sync group 10001000
Tamanho da linha de dados em uma tabelaData row size on a table 24 Mb24 Mb
Intervalo de sincronização mínimaMinimum sync interval 5 Minutos5 Minutes

Observação

Pode haver até 30 pontos de extremidade em um único grupo de sincronização, se houver apenas um grupo de sincronização.There may be up to 30 endpoints in a single sync group if there is only one sync group. Se houver mais de um grupo de sincronização, o número total de pontos de extremidade em todos os grupos de sincronização não pode exceder 30.If there is more than one sync group, the total number of endpoints across all sync groups cannot exceed 30. Se um banco de dados pertencer a vários grupos de sincronização, ele será contado como vários pontos de extremidade, não um.If a database belongs to multiple sync groups, it is counted as multiple endpoints, not one.

Perguntas Frequentes sobre a Sincronização de Dados SQLFAQ about SQL Data Sync

Quanto custa o serviço de Sincronização de Dados SQL?How much does the SQL Data Sync service cost

Não há encargos para o serviço de Sincronização de Dados SQL em si.There is no charge for the SQL Data Sync service itself. No entanto, você ainda acumulará encargos de transferência de dados pela movimentação de dados dentro e fora de sua instância do Banco de Dados SQL.However, you still accrue data transfer charges for data movement in and out of your SQL Database instance. Para saber mais, veja Preços do Banco de Dados SQL.For more info, see SQL Database pricing.

Quais regiões dão suporte à Sincronização de Dados?What regions support Data Sync

A Sincronização de Dados SQL está disponível em todas as regiões.SQL Data Sync is available in all regions.

É necessária uma conta do Banco de Dados SQL?Is a SQL Database account required

Sim.Yes. Você deve ter uma conta do Banco de Dados SQL para hospedar o Banco de Dados Hub.You must have a SQL Database account to host the Hub Database.

Posso usar a Sincronização de Dados para sincronizar somente entre bancos de dados locais do SQL Server?Can I use Data Sync to sync between SQL Server on-premises databases only

Não diretamente.Not directly. Contudo, é possível sincronizar entre bancos de dados locais do SQL Server indiretamente criando um banco de dados Hub no Azure e adicionando os bancos de dados locais ao grupo de sincronização.You can sync between SQL Server on-premises databases indirectly, however, by creating a Hub database in Azure, and then adding the on-premises databases to the sync group.

Posso usar a Sincronização de Dados para sincronizar entre os Bancos de Dados SQL que pertencem a assinaturas diferentes?Can I use Data Sync to sync between SQL Databases that belong to different subscriptions

Sim.Yes. É possível sincronizar entre os Bancos de Dados SQL que pertencem a grupos de recursos pertencentes a assinaturas diferentes.You can sync between SQL Databases that belong to resource groups owned by different subscriptions.

  • Se as assinaturas pertencerem ao mesmo locatário e você tiver permissão para todas as assinaturas, será possível configurar o grupo de sincronização no Portal do Azure.If the subscriptions belong to the same tenant, and you have permission to all subscriptions, you can configure the sync group in the Azure portal.
  • Caso contrário, será necessário usar o PowerShell para adicionar os membros de sincronização que pertencem a assinaturas diferentes.Otherwise, you have to use PowerShell to add the sync members that belong to different subscriptions.

Posso usar a Sincronização de Dados para sincronizar entre Bancos de Dados SQL que pertencem a nuvens diferentes (como Nuvem Pública do Azure e Azure China)?Can I use Data Sync to sync between SQL Databases that belong to different clouds (like Azure Public Cloud and Azure China)

Sim.Yes. É possível sincronizar entre Bancos de Dados SQL que pertencem a nuvens diferentes e, para isso, você precisa usar o PowerShell para adicionar os membros de sincronização que pertencem a assinaturas diferentes.You can sync between SQL Databases that belong to different clouds, you have to use PowerShell to add the sync members that belong to the different subscriptions.

Posso usar a Sincronização de Dados para propagar dados do meu banco de dados de produção para um banco de dados vazio e sincronizá-los?Can I use Data Sync to seed data from my production database to an empty database, and then sync them

Sim.Yes. Crie o esquema manualmente no novo banco de dados desenvolvendo o script com base no original.Create the schema manually in the new database by scripting it from the original. Depois de criar o esquema, adicione as tabelas a um grupo de sincronização para copiar os dados e mantê-los sincronizados.After you create the schema, add the tables to a sync group to copy the data and keep it synced.

Devo usar a Sincronização de Dados SQL para fazer backup e restaurar meus bancos de dados?Should I use SQL Data Sync to back up and restore my databases

Não é recomendável usar a Sincronização de Dados SQL para criar um backup de seus dados.It is not recommended to use SQL Data Sync to create a backup of your data. Você não pode fazer backup e restaurar para um ponto específico no tempo porque as sincronizações da Sincronização de Dados SQL não têm controle de versão.You cannot back up and restore to a specific point in time because SQL Data Sync synchronizations are not versioned. Além disso, a Sincronização de Dados SQL não faz backup de outros objetos SQL, como procedimentos armazenados, e não faz o equivalente a uma operação de restauração rapidamente.Furthermore, SQL Data Sync does not back up other SQL objects, such as stored procedures, and does not do the equivalent of a restore operation quickly.

Para obter uma técnica de backup recomendada, veja Copiar um banco de dados SQL do Azure.For one recommended backup technique, see Copy an Azure SQL database.

A Sincronização de Dados pode sincronizar tabelas e colunas criptografadas?Can Data Sync sync encrypted tables and columns

  • Se um banco de dados usar Always Encrypted, será possível sincronizar apenas as tabelas e colunas não criptografadas.If a database uses Always Encrypted, you can sync only the tables and columns that are not encrypted. Não é possível sincronizar as colunas criptografadas porque a sincronização de dados não pode descriptografar os dados.You can't sync the encrypted columns, because Data Sync can't decrypt the data.
  • Se uma coluna usar a CLE (Criptografia em Nível de Coluna), será possível sincronizar a coluna, desde que o tamanho da linha seja menor que o tamanho máximo de 24 MB.If a column uses Column-Level Encryption (CLE), you can sync the column, as long as the row size is less than the maximum size of 24 Mb. A Sincronização de Dados trata a coluna criptografada pela chave (CLE) como dados binários normais.Data Sync treats the column encrypted by key (CLE) as normal binary data. Para descriptografar os dados em outros membros de sincronização, é necessário ter o mesmo certificado.To decrypt the data on other sync members, you need to have the same certificate.

Ordenações são compatíveis com a Sincronização de Dados SQL?Is collation supported in SQL Data Sync

Sim.Yes. A Sincronização de Dados SQL dá suporte a ordenações nos seguintes cenários:SQL Data Sync supports collation in the following scenarios:

  • Se as tabelas do esquema de sincronização selecionadas ainda não estiverem em seus bancos de dados hub ou membro, então quando você implantar o grupo de sincronização, o serviço criará automaticamente as tabelas e colunas correspondentes com as configurações de ordenação selecionadas nos bancos de dados de destino vazios.If the selected sync schema tables are not already in your hub or member databases, then when you deploy the sync group, the service automatically creates the corresponding tables and columns with the collation settings selected in the empty destination databases.
  • Se as tabelas a serem sincronizadas já existirem nos bancos de dados hub e membro, a Sincronização de Dados SQL exigirá que as colunas de chave primária tenham a mesma ordenação entre bancos de dados hub e membro para implantar com êxito o grupo de sincronização.If the tables to be synced already exist in both your hub and member databases, SQL Data Sync requires that the primary key columns have the same collation between hub and member databases to successfully deploy the sync group. Não há nenhuma restrição de ordenação em colunas que não sejam colunas de chave primária.There are no collation restrictions on columns other than the primary key columns.

A federação é compatível com a Sincronização de Dados SQL?Is federation supported in SQL Data Sync

O Banco de Dados de Raiz da Federação pode ser usado no Serviço da Sincronização de Dados SQL sem qualquer limitação.Federation Root Database can be used in the SQL Data Sync Service without any limitation. Você não pode adicionar o ponto de extremidade do Banco de Dados Federado para a versão atual da Sincronização de Dados SQL.You cannot add the Federated Database endpoint to the current version of SQL Data Sync.

Próximas etapasNext steps

Atualizar o esquema de um banco de dados sincronizadoUpdate the schema of a synced database

Você precisa atualizar o esquema de um banco de dados em um grupo de sincronização?Do you have to update the schema of a database in a sync group? As alterações no esquema não são replicadas automaticamente.Schema changes are not automatically replicated. Para algumas soluções, consulte os seguintes artigos:For some solutions, see the following articles:

Monitorar e solucionar problemasMonitor and troubleshoot

A Sincronização de Dados SQL está funcionando conforme o esperado?Is SQL Data Sync performing as expected? Para monitorar a atividade e solucionar problemas, consulte os seguintes artigos:To monitor activity and troubleshoot issues, see the following articles:

Saiba mais sobre o Banco de Dados SQL do AzureLearn more about Azure SQL Database

Para mais informações sobre Banco de Dados SQL, veja os seguintes artigos:For more info about SQL Database, see the following articles: