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 da base de dados de publicações. 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.
A Base de Dados SQL do Azure dá suporte à replicação transacional e por instantâneo como assinante de push. Isso significa que o Banco de Dados SQL do Azure pode receber e aplicar alterações a partir de um publicador usando replicação transacional ou de instantâneo.
O editor e/ou distribuidor pode ser uma instância do SQL Server em execução local, numa máquina virtual do Azure ou como uma Instância Gerida do Azure SQL.
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 a partir do portal do Azure.
A replicação transacional requer os seguintes componentes:
| Função | Definição |
|---|---|
| Editora | Uma instância de banco de dados que hospeda os dados a serem replicados (origem). |
| Subscritor | Recebe os dados que estão a ser 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á a ser 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 |
Utilizador SQL com permissões necessárias no local de 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 a tarefa de snapshot, a tarefa de leitura de log e a tarefa de distribuição.
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 estão a funcionar conforme o esperado, deverá ver os seguintes resultados.
Agente de Instantâneo:
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.