[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