Usar um método online para migrar para o Banco de Dados SQL do Azure

Concluído

Se precisar que um banco de dados permaneça online para os usuários durante o processo de migração, use a replicação transacional para mover os dados. A replicação transacional é o único método online disponível para migrar para o Banco de Dados SQL do Azure.

Em nosso cenário de um fabricante de bicicletas, os depósitos funcionam 24 horas por dia, 7 dias por semana e não há períodos de inatividade. O conselho de diretores quer ter certeza de que o banco de dados de estoque esteja constantemente disponível, mesmo durante a migração para o Banco de Dados SQL do Azure.

Diagram showing the replication topology involving SQL Server and Azure SQL Database.

O que é replicação transacional?

A replicação transacional é uma maneira de mover dados entre servidores de banco de dados conectados continuamente.

O processo começa com um instantâneo dos objetos e dados do banco de dados de publicação. Depois que o instantâneo inicial é feito, todas as alterações subsequentes feitas nos dados ou no esquema no Publicador normalmente são entregues ao Banco de Dados SQL do Azure quase em tempo real à medida que ocorrem.

Diagram showing the key components in a transactional replication.

O Banco de Dados SQL do Azure dá suporte à replicação transacional e instantâneo como um assinante push. Isso significa que Banco de Dados SQL do Azure pode receber e aplicar alterações de um publicador usando uma replicação de instantâneo ou transacional.

O publicador e/ou distribuidor pode ser uma instância do SQL Server que está em execução local, em uma máquina virtual do Azure na nuvem ou como um Instância Gerenciada de SQL do Azure.

Você pode configurar a replicação transacional por meio do SQL Server Management Studio ou executando instruções Transact-SQL no publicador. A replicação transacional não pode ser configurada no portal do Microsoft Azure.

A replicação transacional requer os seguintes componentes:

Função Definição
Publicador Uma instância do banco de dados que hospeda os dados a serem replicados (origem).
Assinante Recebe os dados que estão sendo replicados pelo Publicador (destino).
Distribuidor Coleta as alterações nos artigos de um Publicador e as distribui aos Assinantes.
Artigo Um objeto de banco de dados, por exemplo, uma tabela incluída na Publicação.
Publicação Uma coleção de um ou mais artigos do banco de dados sendo replicados.
Assinatura Uma solicitação de um Assinante para uma Publicação.

Configurar uma replicação transacional

Siga as etapas abaixo para migrar a tabela [Person].[Person] do banco de dados AdventureWorks para o Banco de Dados SQL do Azure sem tempo de inatividade. A replicação transacional só pode usar logons de autenticação do SQL Server para se conectar ao Banco de Dados SQL do Azure.

Parâmetro Definição
@distributor Nome da instância de origem.
@publisher Nome da instância de origem.
@subscriber Banco de Dados SQL do Azure no formato: <server>.database.windows.net. O Banco de Dados SQL do Azure deve existir antes de executar o script.
@dbname Nome do banco de dados na origem.
@publisher_login Usuário do SQL com permissões necessárias na origem.
@publisher_password Senha para o usuário do SQL.
@destination_db Nome do banco de dados no destino.
@subscriber_login Usuário do SQL com permissões necessárias no destino.
@subscriber_password Senha para o usuário do SQL.
@working_directory Diretório de trabalho da replicação, altere esse local se necessário.

Ajuste os parâmetros acima de acordo com seu próprio ambiente ao executar o script.

Criar o distribuidor

O script a seguir cria o banco de dados do distribuidor, os editores do distribuidor e os agentes.

USE [master]
GO

EXEC sp_adddistributor @distributor = N'CONTOSO-SRV', @password = N''
GO

EXEC sp_adddistributiondb 
		@database = N'distribution', 
		@data_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data', 
		@data_file = N'distribution.MDF', 
		@data_file_size = 13, 
		@log_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data', 
		@log_file = N'distribution.LDF', 
		@log_file_size = 9, 
		@min_distretention = 0, 
		@max_distretention = 72, 
		@history_retention = 48, 
		@deletebatchsize_xact = 5000, 
		@deletebatchsize_cmd = 2000, 
		@security_mode = 1
GO

-- Adding the distribution publishers
exec sp_adddistpublisher 
	@publisher = N'CONTOSO-SRV', 
	@distribution_db = N'distribution',
	@security_mode = 1, 
	@working_directory = N'C:\REPL', 
	@trusted = N'false', 
	@thirdparty_flag = 0, 
	@publisher_type = N'MSSQLSERVER'
GO

exec sp_addsubscriber 
	@subscriber = N'contoso.database.windows.net', 
	@type = 0, 
	@description = N'Azure SQL Database (target)'
GO

-- Enabling the replication database
use master
exec sp_replicationdboption 
	@dbname = N'AdventureWorks', 
	@optname = N'publish', 
	@value = N'true'
GO

--Adds a Log Reader agent for the AdventureWorks database. 
exec [AdventureWorks].sys.sp_addlogreader_agent 
	@publisher_security_mode = 1
GO

--Adds a Queue Reader agent for the distributor.
exec [AdventureWorks].sys.sp_addqreader_agent 
	@frompublisher = 1
GO

Criar a publicação transacional

O script a seguir cria a publicação transacional do banco de dados AdventureWorks do publicador.

USE [AdventureWorks]
GO

EXEC sp_addpublication 
	@publication = N'REPL-AdventureWorks', 
	@description = N'Transactional publication of database ''AdventureWorks'' from Publisher ''CONTOSO-SRV''.', 
	@sync_method = N'concurrent', 
	@retention = 0, 
	@allow_push = N'true', 
	@allow_pull = N'true', 
	@allow_anonymous = N'true', 
	@enabled_for_internet = N'false', 
	@snapshot_in_defaultfolder = N'false', 
	@alt_snapshot_folder = N'C:\REPL', 
	@compress_snapshot = N'true', 
	@ftp_port = 21,
	@ftp_login = N'anonymous', 
	@allow_subscription_copy = N'false', 
	@add_to_active_directory = N'false', 
	@repl_freq = N'continuous', 
	@status = N'active', 
	@independent_agent = N'true', 
	@immediate_sync = N'true', 
	@allow_sync_tran = N'false',
	@autogen_sync_procs = N'false', 
	@allow_queued_tran = N'false', 
	@allow_dts = N'false', 
	@replicate_ddl = 1, 
	@allow_initialize_from_backup = N'false', 
	@enabled_for_p2p = N'false',
	@enabled_for_het_sub = N'false'
GO

exec sp_addpublication_snapshot 
	@publication = N'REPL-AdventureWorks', 
	@frequency_type = 1, 
	@frequency_interval = 0, 
	@frequency_relative_interval = 0, 
	@frequency_recurrence_factor = 0, 
	@frequency_subday = 0, 
	@frequency_subday_interval = 0,
	@active_start_time_of_day = 0, 
	@active_end_time_of_day = 235959, 
	@active_start_date = 0,
	@active_end_date = 0, 
	@publisher_security_mode = 0,
	@publisher_login = N'sqladmin', 
	@publisher_password = N'<pwd>'

Criar o artigo para a publicação

O script a seguir cria o artigo para a tabela [Person].[Person].

USE [AdventureWorks]
GO

EXEC sp_addarticle 
	@publication = N'REPL-AdventureWorks', 
	@article = N'Person', 
	@source_owner = N'Person', 
	@source_object = N'Person',
	@type = N'logbased', 
	@description = N'', 
	@creation_script = N'',
	@pre_creation_cmd = N'drop', 
	@schema_option = 0x000000000803509F, 
	@identityrangemanagementoption = N'none', 
	@destination_table = N'Person',
	@destination_owner = N'Person',
	@status = 24, 
	@vertical_partition = N'false', 
	@ins_cmd = N'CALL [sp_MSins_PersonPerson]', 
	@del_cmd = N'CALL [sp_MSdel_PersonPerson]', 
	@upd_cmd = N'SCALL [sp_MSupd_PersonPerson]'
GO

Criar a assinatura e o agente de assinatura

O script a seguir cria a assinatura push para o assinante do Banco de Dados SQL do Azure.

USE [AdventureWorks]
GO

EXEC sp_addsubscription 
	@publication = N'REPL-AdventureWorks', 
	@subscriber = N'contoso.database.windows.net', 
	@destination_db = N'my-db',
	@subscription_type = N'Push',
	@sync_type = N'automatic',
	@article = N'all',
	@update_mode = N'read only', 
	@subscriber_type = 0

exec sp_addpushsubscription_agent 
	@publication = N'REPL-AdventureWorks', 
	@subscriber = N'contoso.database.windows.net', 
	@subscriber_db = N'my-db',
	@job_login = null, 
	@job_password = null, 
	@subscriber_security_mode = 0, 
	@subscriber_login = N'sqladmin',
	@subscriber_password = '<pwd>', 
	@frequency_type = 64, 
	@frequency_interval = 1, 
	@frequency_relative_interval = 1, 
	@frequency_recurrence_factor = 0,
	@frequency_subday = 4, 
	@frequency_subday_interval = 5,
	@active_start_time_of_day = 0, 
	@active_end_time_of_day = 235959, 
	@active_start_date = 0, 
	@active_end_date = 0, 
	@dts_package_location = N'Distributor'
GO

Iniciar e monitorar a replicação

Não há suporte para o gerenciamento e o monitoramento de replicação no Banco de Dados SQL do Azure. Em vez disso, execute essas atividades no SQL Server. Para iniciar a replicação, inicie o trabalho de instantâneo, o trabalho de leitor de log e o trabalho do distribuidor.

Você pode monitorar o Agente de Instantâneo e o Agente de Leitor de Log clicando com o botão direito do mouse na publicação e selecionando a opção adequada. Se os agentes não estiverem em execução, inicie-os.

Screenshot showing how to launch the snapshot agent.

Para exibir o status da sincronização, clique com o botão direito do mouse na assinatura, selecione Exibir Status de Sincronização e inicie o agente. Se você encontrar mensagens de erro, verifique o histórico de trabalhos do agente no SQL Server Agent. Se os agentes estiverem sendo executados conforme o esperado, você verá os seguintes resultados.

Agente de Instantâneo:

Screenshot showing the snapshot agent status in a transactional replication.

Agente de Leitor de Log:

Screenshot showing the log reader status in a transactional replication.

Status de Sincronização:

Diagram showing the synchronization status in a transactional replication.

Depois que os dados forem totalmente replicados para o Banco de Dados SQL do Azure, você poderá direcionar as conexões para o banco de dados do assinante e, em seguida, interromper e remover a replicação.

Para saber mais sobre as configurações compatíveis, confira Replicação para o Banco de Dados SQL do Azure.