SQL Azure Data Sync no SQL Server 2012

Posted on junho 28, 2012

3


 

Visão Geral

O SQL Data Sync provê a sincronização entre base de dados SQL Server (On-Premise) e SQL Azure(Cloud), essa sincronização pode ser bidirecional, trazendo assim uma maior granularidade para o serviço.

 

(Figura 1 – SQL Azure Data Sync.)

 

 

Opções de Sincronização

 

Com essa sincronização é possível realizar a criação de Grupos de Sincronização, que traz por si uma grande diversidade na hora da sincronização dos registros do banco de dados.

 

A sincronização entre as bases deverá ser composta de dois ou mais bancos de dados e possuir pelo menos um SQL Server (On-Premise). É possível realizar a sincronização não somente de todas as tabelas e dados mais sim de:

 

• Somente colunas que forem realmente necessárias para a importação e negócio.

 

• Utilização de filtros como por exemplo, idade > 25 anos.

 

• Tipo de sincronização no Hub – Unilateral ou Bidirecional.

 

 

Benefícios

 

(Figura 2 – Sincronização das informações de banco de dados On-Premise e Cloud.)

 

Dentre diversos benefícios que não somente o SQL Data Sync mais sim a computação em nuvem como um todo pode proporcionar, temos:

 

• Variedade e mobilidade de criação de modelos de sincronização de acordo com a regra de negócio específica.

 

• Distribuição geográfica das informações, seus dados sincronizados em até 2 datacenters diferentes da Microsoft.

 

• Gerenciamento e administração de todas as informações feita pela nuvem, assim não há preocupação com capacidade de hardware para processamento, tamanho dos arquivos e nem segurança.

 

Requisito

Antes que se possa iniciar o provisionamento de sua base de dados, devemos ter a conta no windows azure criada, para isso realize esse breve tutorial  aqui – http://channel9.msdn.com/posts/Criando-uma-conta-no-Windows-Azure

 

 

Provisionamento – (Passo 1)

 

Primeiramente devemos acessar o portal de gerenciamento do Windows Azure com a conta já criada.

 

image

(Figura 3 – Painel de entrada do Windows Azure.)

 

Logo após entrada no site, devemos criar um banco de dados que nos servirá de centralizador das informações que serão sincronizadas, para isso faça…

 

image

 

 

image

(Figura 3.1 – Criação do banco de dados para sincronização que será utilizado pelo Hub.)

 

Após banco de dados criado, iremos acessar no canto esquerdo a aba Sincronização de Dados.

 

image 

(Figura 4 – SQL Data Sync.)

 

Iremos iniciar o processo de provisionamento, para isso iremos clicar…

 

image 

 

ou se preferir

 

image

 

 

Feito isso, irá aparecer os Termos de uso, leia e após isso clique em avançar, depois você irá selecionar sua assinatura do windows azure, e região na qual você deseja que se encontre o servidor que gerenciará o provisionamento.

 

image

(Figura 5 – Termos de Uso.)

 

image

(Figura 6 – Escolhendo sua assinatura.)

 

image

(Figura 7 – Selecionando a região do servidor do SQL Data Sync.)

 

Após todos esses passos, você irá visualizar seu painel de gerenciamento dessa forma:

 

image

(Figura 8 – Grupo de Sincronização do SQL Azure Data Sync.)

 

 

Criando o Grupo de Sincronização – (Passo 2)

 

Logo após criado o provisionamento, o próximo passo é realizar a criação do grupo de sincronização.

 

Para isso, devemos ir em..

 

image

 

e realizar a criação do Grupo de sincronização, nesse caso irei utilizar o tempo de 5 minutos para nossos exemplos. Esse tempo deve ser configurado conforme seu ambiente e sua necessidade.

 

image

(Figura 9 – Criação do grupo de sincronização – DataSyncGroup1 – Bases Críticas.)

 

Adicionando o Hub de Sincronização – (Passo 3)

 

O SQL Azure Data Sync utiliza um Hub como um banco de dados centralizado para os grupos de sincronização, podendo ser somente um banco de dados SQL Azure.

 

De preferência, realize a criação do Hub no mesmo datacenter aonde se encontra a sua instância Azure.

 

Ou seja, quando há alguma mudança entre os bancos de dados dentro do grupo de sincronização,  todas essas informações são mandadas para o Hub aonde ele terá o controle de aceitar ou rejeitar os dados de acordo com  a Política de Resolução de Conflitos que você escolher, logo a frente iremos falar sobre ela.

 

Essa topologia permite a sincronização entre:

 

• SQL Server  e SQL Azure

• SQL Azure e SQL Azure

 

Se houver necessidade de acréscimo de mais um banco de dados, o Hub é totalmente flexível para isso.

 

Capture

(Figura 10 – Criando o Hub.)

 

Agora iremos realizar a criação do Hub de Sincronização, clicando em adicionar, teremos alguns campos a informar.

 

1 – ServerName =  yourservername.database.windows.net

2 – DatabaseName = NomeDoDatabaseSyncHub

 

Como feito anteriormente o banco de dados que servirá como Hub será o banco de dados DataSyncHub.

3 – Credentials = Usuário e Senha do Administrador

 

image

(Figura 11 – Adicionando um banco de dados ao grupo de sincronização.)

 

Após inserido, você deve visualizar seu painel de administração da seguinte forma:

 

Capture

(Figura 12 – Banco de dados do DataSync configurado corretamente.)

 

Adicionando o Banco de Dados SQL Azure – (Passo 4)

 

Como já possuímos o banco de dados que servirá de sincronização entre os demais, agora iremos adicionar o banco de dados SQL Azure.

 

O banco de dados para esse exemplo será o banco de dados utilizado no post – https://luanmorenodba.wordpress.com/2012/06/27/deploy-database-to-sql-azure-no-sql-server-2012/ 

 

Nesse passo iremos adicioná-lo no nosso grupo de sincronização, para isso selecionaremos a aba para adicionar um banco de dados SQL Azure.

 

image

(Figura 13 – Adicionar um SQL Azure no grupo de sincronização).

 

image

(Figura 14 – Conexão com o banco de dados DadoAzureSync).

 

Quando se adiciona um banco de dados ao grupo de sincronização, é necessário que se especifique uma Direcão de sincronização.

 

Nós possuímos 3 modos, são eles:

 

Bi-Direcional = Permite que todas as mudanças feitas entre os bancos de dados selecionados dentro do grupo de sincronização e o banco de dados do Hub sejam refletidas para todos.

 

Sync  from the Hub (Sincronizar para o Hub) = Permite que as alterações realizadas do banco de dados do Hub seja refletida em somente uma direção.

 

Sync to the Hub (Sincronizar do Hub) = Permite que todas as alterações que foram realizadas entres os bancos de dados para o Hub seja refletida em somente uma direção.

 

Logo após a configuração, seu gerenciador do windows azure deverá estar assim..

 

image

(Figura 15 – Banco de dados Hub e Banco de dados Azure configurados.)

 

Adicionando o Banco de Dados SQL Server (On Premises) – (Passo 5)

 

Agora, iremos inserir o banco de dados SQL Server (On-Premise), para isso iremos clicar em Adicionar um banco de dados SQL Server.

 

image

(Figura 16 – Adicionando um banco de dados On-Premise.)

 

Nesse momento, iremos adicionar um novo banco de dados para o SQL Data Sync e realizar a instalação do agente de sincronização entre o banco de dados SQL Server e o SQL Azure.

 

image

(Figura 17 – Adicionando um banco de dados SQL Server com a opção de sincronização Bidirecional.)

 

Como não temos o agente instalado, iremos selecionar instalar um novo agente.

 

Capture

(Figura 18 – Instalando o novo agente para sincronização do Hub;)

 

Nesse momento teremos 3 etapas, sendo que:

 

1ª Etapa – Realizar o download do agente para o computador, e em seguida realizar a instalação do mesmo.

 

Capture

(Passo – 1)

 

Capture

(Passo – 2)

 

image

(Passo – 3)

image

(Passo – 4)

 

image

(Passo – 5 = Domínio ou ComputadorLocal\Usuário + Senha de Login)

image

(Passo – 6)

2ª Etapa – Especificar um nome para o agente de sincronização.

 

image

(Passo – 1)

 

3ª Etapa – Gerar a chave do agente, essa chave é utilizada para registrar o servidor.

 

Capture

(Passo – 1)

 

Ao terminar todos esses passos e copiar a chave gerada, iremos abrir o Microsoft SQL Data Sync Agent Preview no computador aonde acabamos de realizar a instalação e selecionar Submit Agent Key Configuration.

 

d3dc8975-cf14-4819-8890-396e66ed0226

(Figura 19 – Submit Agent Key Configuration.)

 

image

(Figura 20 – Inserindo a chave de registro.)

 

Feito isso, agora iremos registrar o servidor.

 

image

(Figura 21 – Registrando o servidor e banco de dados do SQL Server (On-Premise).)

 

Capture

(Figura 22 – Informações da conexão com o banco de dados SQL Server (On-Premise).)

 

image

(Figura 22.1 – Realizando o teste de ping no servidor.)

 

Agora com a conexão já estabelecida dentro do Microsoft SQL Data Sync Agent Preview iremos retornar ao console do Windows Azure e proseguir com a instalação.

 

Capture

(Figura 23 – Avançando na instalação.)

 

Capture

(Figura 24 – Obtendo o banco de dados registrado no agente e o banco de dados do SQL Server para ser adicionado no Grupo de sincronização.)

 

Nesse momento, possuímos todas as partes instaladas, sendo assim seu gerenciador deverá estar da seguinte forma:

 

Capture

(Figura 25 – Painel de gerenciamento do grupo de sincronização).

 

 

Configurando o Grupo de Sincronização – (Passo 6)

Como já estabelecemos o Agendamento de sincronização para 5 minutos iremos pular essa parte.

image

(Figura 26 – Agendamento de Sincronização.)

 

Agora, a Resolução de Conflito pode ser configurado de duas formas:

 

Hub Wins (Hub Vence) = Se houver uma alteração no registro do Hub ele sempre irá manter esse registro. A primeira alteração é escrita no Hub e mantida em toda a sincronização e refletida em todos os membros do grupo.

 

Client Wins (Cliente Vence) =  Se houver uma alteração no registro dos membros o mesmo é escrito no Hub. Se esse registro for alterado em diversos membros do grupo, então o último será mantido e escrito em todos os membros.

 

image

(Figura 27 – Resolução de Conflito.)

 

E por final é necessário que seja especificado no Definir Conjunto de Dados de Sincronização, quais tabelas, campos e informações seram inseridas.

 

Capture

(Figura 28 – Definindo o Conjunto de Dados de Sincronização – Selecionar Tudo.)

 

Pronto agora, é só apertar o botão Implantar e esperar a sincronização dos bancos de dados dentro do grupo.

 

image

(Figura 29 – Provisionando……..)

 

image

(Figura 30 – Grupo de Sincronização sincronizado com sucesso, status Bom……..)

 

Cenários e Sincronização de Dados – (Passo 7)

Agora dentro do SSMS 2012 iremos realizar a conexão das duas instâncias a do SQL Server (On-Premise) e a do SQL Azure (Cloud).

 

Capture

(Figura 31 – SSMS 2012 – Instâncias de Banco de Dados.)

 

Agora iremos inserir alguns registros dentro do banco de dados SQL Server e no SQL Azure….

 

No SQL Server (On-Premises)….

SELECT @@SERVERNAME AS ‘SQLServerOnPremises’

 

INSERT INTO Production.Products (productname, supplierid, categoryid, unitprice, discontinued)

VALUES (‘SQL Server’,‘1’,‘1’,‘970000’,0),

        (‘SQL Azure’,‘1’,‘2’,‘13000’,0),

        (‘SSIS’,‘2’,‘2’,‘5000’,0)

No SQL Azure (Cloud)….

 

SELECT @@SERVERNAME AS ‘SQLServerCloud’

 

INSERT INTO Production.Products (productname, supplierid, categoryid, unitprice, discontinued)

VALUES (‘SSAS’,‘2’,‘2’,‘1700’,0),

        (‘SSRS’,‘1’,‘2’,‘11000’,0)

 

Após os registros serem inseridos e o tempo de sincronização ter sido atingido, todos os registros devem constar no banco de dados do SQL Azure Data Sync Hub, para que assim ele possa distribuir os registros corretamente.

 

 

No Hub…

 

SELECT @@SERVERNAME AS ‘Hub’

 

SELECT TOP 5 *

FROM Production.Products

ORDER BY productid DESC

image

(Figura 32 – Dados dentro do banco de dados DataSyncHub, banco de dados do Hub.)

 

Então agora, todos os 5 registros inseridos devem constar tanto no banco de dados SQL Server e no SQL Azure isso porque temos uma sincronização Bilateral, se verificarmos veremos que:

 

SELECT @@SERVERNAME AS ‘SQLServerOnPremises’

SELECT DB_NAME() AS ‘DatabaseName’

 

SELECT TOP 5 *

FROM Production.Products

ORDER BY productid DESC

image

(SQL Server)

 

 

SELECT @@SERVERNAME AS ‘SQLServerCloud’

SELECT DB_NAME() AS ‘DatabaseName’

 

SELECT TOP 5 *

FROM Production.Products

ORDER BY productid DESC

image

(SQL Azure)

 

Como esperávamos, os registros estão em ambos.

 

Agora iremos testar as configuração referentes a Resolução de conflito, nesse momento iremos realizar a atualização de um registro dentro do banco de dados do Hub que nesse caso se chama DataSyncHub.

No Hub…

UPDATE Production.Products

     SET productname = ‘SQL Azure e SQL DataSync’

WHERE productid = 82

 

SELECT *

FROM Production.Products

WHERE productid = 82

image

No SQL Server (On-Premises)….

 

UPDATE Production.Products

     SET productname = ‘SQLServer+SQL Azure+SQL Data Sync’

WHERE productid = 82

 

INSERT INTO Production.Products (productname, supplierid, categoryid, unitprice, discontinued)

VALUES (‘SQL Server 2005’,‘2’,‘2’,‘70000’,1)

SELECT *

FROM Production.Products

WHERE productid = 82

image

 

Primeiramente atualizamos um registro no banco de dados do Hub e em seguida atualizamos o mesmo registro no banco de dados SQL Server. Com isso nos geramos um conflito, qual registro será valido?

 

Bem, durante o processo de criação do grupo de sincronização especificamos o Hub Wins (Hub Vence) ou seja, se verificarmos em todos os bancos de dados veremos que…

 

SELECT *

FROM Production.Products

WHERE productid = 82

image

(No SQL Server (On-Premise).)

 

image

(No SQL Data Sync – Hub.)

 

image

(No SQL Azure.)

 

Ou seja, o registro que foi validado foi o do Hub e por isso temos esse registro presente em todas as bases de dados.

 

Conclusão

 

Com isso vemos claramente como o SQL Azure e SQL Server trabalham em sincronismo, ou seja o SQL Data Sync trabalha em parceria com os dois, mantendo os bancos de dados do azure sempre disponíveis.

 

Ou seja esse novo recurso de alta disponibilidade garante seus dados seguros em diversos locais, podendo ainda aumentar a capacidade de locais aonde eles possam ser armazenados. Se for de necessidade pode se adicionar mais banco de dados do azure ou do SQL Server para participar desse grupo de sincronização.

 

E assim vemos que cada dia que se passa a Microsoft está procupada com a alta disponibilidade e facilidade na entrega das informações de uma forma muito mais eficiente e de fácil implementação.

 

Fontes

http://blogs.msdn.com/b/windowsazure/

https://windows.azure.com/

http://en.wikipedia.org/wiki/Windows_Azure