Usar um método online para migrar para o Banco de Dados SQL do Azure
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.
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, quaisquer 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.
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:
Role | 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.
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:
Agente leitor de log:
Status da 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 suportadas, consulte Replicação para o Banco de Dados SQL do Azure.