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

Concluído

Se você precisar que um banco de dados permaneça online para os usuários durante todo o processo de migração, poderá usar 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.

No nosso cenário de fabricante de bicicletas, os armazéns funcionam 24 horas por dia, 7 dias por semana, e não há períodos de inatividade. Seu conselho de administração quer ter certeza de que o banco de dados de inventário está 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 é tirado, todas as alterações subsequentes 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 de instantâneo como um assinante por push. Isso significa que o Banco de Dados SQL do Azure pode receber e aplicar alterações de um editor usando uma replicação transacional ou de instantâneo.

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

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

A replicação transacional requer os seguintes componentes:

Função Definição
Fabricante Uma instância de banco de dados que hospeda os dados a serem replicados (origem).
Subscritor Recebe os dados que estão sendo replicados pelo Publicador (destino).
Distribuidor Recolhe alterações nos artigos de um Editor e distribui-as aos Subscritores.
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 que está sendo replicado.
Subscrição Um pedido de um Subscritor 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 SQL com as permissões necessárias na origem.
@publisher_password Senha para o usuário SQL.
@destination_db Nome do banco de dados no destino.
@subscriber_login Usuário SQL com permissões necessárias no destino.
@subscriber_password Senha para o usuário SQL.
@working_directory Diretório de trabalho de replicação, altere esse local conforme apropriado.

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 de distribuidores, os editores de distribuidores 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 AdventureWorks banco de dados do editor.

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 [Person].[Person] tabela.

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 subscrição e o agente de subscrição

O script a seguir cria a assinatura por 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 gerenciamento e monitoramento de replicação no Banco de Dados SQL do Azure. Em vez disso, execute essas atividades do SQL Server. Para iniciar a replicação, inicie o trabalho de snapshot, o trabalho de leitor de log e o trabalho de distribuidor.

Você pode monitorar o Snapshot Agent e o Log Reader Agent clicando com o botão direito do mouse na publicação e selecionando a opção apropriada. 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 da Sincronização e inicie o agente. Se você encontrar alguma mensagem 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 snapshot:

Screenshot showing the snapshot agent status in a transactional replication.

Agente leitor de log:

Screenshot showing the log reader status in a transactional replication.

Status da 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 suportadas, consulte Replicação para o Banco de Dados SQL do Azure.