Usar um método online para migrar para o Banco de Dados SQL do Azure
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.
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.
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.
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:
Agente de Leitor de Log:
Status de Sincronização:
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.