[Replicação] SQL Server Comandos DDL
Essa semana me deparei com um cenário bem particular em um de nossos clientes. O cliente utiliza replicação transacional e desabilitou nas propriedades da publicação a opção "Replicate Schema Changes", conforme imagem abaixo:
Para habilitar ou desabilitar esta propriedade, podemos utilizar o SSMS, conforme imagem acima, ou utilizar a procedure sp_changepublication como no script abaixo:
DECLARE @publication AS sysname
SET @publication = N'ReplTesteDropColumn'
USE AdventureWorks2016
EXEC sp_changepublication
@publication = @publication,
@property = N'replicate_ddl',
@value = 0 -- disable
GO
Por padrão esta opção é "true" e quando esta propriedade está habilitada, comandos DDL como ALTER TABLE, ALTER PROCEDURE e ALTER FUNCTION são replicados para os assinantes.
Como essa opção estava desabilitada (false) o cliente esperava que nenhum comando DDL fosse replicado, porém, eles notaram que um ALTER TABLE com DROP COLUMN foi sincronizado para os assinantes.
Analisando a documentação da propriedade "Replicate Schema Changes" verificamos que o ALTER TABLE com DROP COLUMN é uma excessão; portanto, independente dessa propriedade estar habilitada ou não, o ALTER TABLE com DROP COLUMN será replicado para os assinantes.
Pra ficar no radar :)
Referência adicional:
/en-us/sql/relational-databases/replication/publish/replicate-schema-changes
Silas