Fazer alterações de esquema em bancos de dados de publicaçãoMake Schema Changes on Publication Databases

A replicação oferece suporte para um amplo intervalo de alterações de esquema para objetos publicados.Replication supports a wide range of schema changes to published objects. Ao fazer qualquer uma das seguintes alterações de esquema no objeto publicado adequado em um Publicador do MicrosoftMicrosoft SQL ServerSQL Server , a alteração é propagada por padrão a todos os Assinantes do SQL ServerSQL Server :When you make any of the following schema changes on the appropriate published object at a MicrosoftMicrosoft SQL ServerSQL Server Publisher, that change is propagated by default to all SQL ServerSQL Server Subscribers:

  • ALTER TABLEALTER TABLE

  • ALTER TABLE SET LOCK ESCALATION não deverá ser usado se a replicação da alteração de esquema estiver habilitada e uma topologia incluir SQL Server 2005SQL Server 2005 ou SQL Server Compact 3.5SQL Server Compact 3.5 Subscribers.ALTER VIEWALTER TABLE SET LOCK ESCALATION should not be used if schema change replication is enabled and a topology includes SQL Server 2005SQL Server 2005 or SQL Server Compact 3.5SQL Server Compact 3.5 Subscribers.ALTER VIEW

  • ALTER PROCEDUREALTER PROCEDURE

  • ALTER FUNCTIONALTER FUNCTION

  • ALTER TRIGGERALTER TRIGGER

    ALTER TRIGGER pode ser usado somente para gatilhos DML [linguagem de manipulação de dados], pois os gatilhos DDL [linguagem de definição de dados] não podem ser replicados.ALTER TRIGGER can be used only for data manipulation language [DML] triggers because data definition language [DDL] triggers cannot be replicated.

Importante

As alterações de esquema para tabelas devem ser feitas usando-se Transact-SQLTransact-SQL ou SMO ( SQL ServerSQL Server Management Objects).Schema changes to tables must be made by using Transact-SQLTransact-SQL or SQL ServerSQL Server Management Objects (SMO). Quando alterações de esquema forem feitas em SQL Server Management StudioSQL Server Management Studio, Management StudioManagement Studio tenta descartar e recriar a tabela.When schema changes are made in SQL Server Management StudioSQL Server Management Studio, Management StudioManagement Studio attempts to drop and re-create the table. Não é possível descartar objetos publicados; portanto, há falha na alteração de esquema.You cannot drop published objects, therefore the schema change fails.

Para replicação transacional e replicação de mesclagem, alterações de esquema são propagadas de forma incremental quando o Distribution Agent ou o Merge Agent são executados.For transactional replication and merge replication, schema changes are propagated incrementally when the Distribution Agent or Merge Agent runs. Para replicação de instantâneo, alterações de esquema são propagadas quando um instantâneo novo for aplicado ao Assinante.For snapshot replication, schema changes are propagated when a new snapshot is applied at the Subscriber. Em replicação de instantâneo, uma cópia nova do esquema é enviada ao Assinante a cada vez que ocorrer sincronização.In snapshot replication, a new copy of the schema is sent to the Subscriber each time synchronization occurs. Assim, todas as alterações de esquema (não apenas aquelas listadas acima) para objetos previamente publicados são propagadas automaticamente com cada sincronização.Therefore, all schema changes (not just those listed above) to previously published objects are automatically propagated with each synchronization.

Para obter informações sobre como adicionar e remover artigos de publicações, consulte Adicionar e remover artigos de publicações existentes.For information about adding and removing articles from publications, see Add Articles to and Drop Articles from Existing Publications.

Para replicar alterações de esquemaTo replicate schema changes

As alterações de esquema listadas acima são replicadas por padrão.The schema changes listed above are replicated by default. Para obter informações sobre como desabilitar a replicação de alterações de esquema, consulte Replicate Schema Changes.For information about disabling the replication of schema changes, see Replicate Schema Changes.

Considerações para alterações de esquemaConsiderations for Schema Changes

Lembre-se das seguintes considerações ao replicar alterações de esquema.Keep the following considerations in mind when replicating schema changes.

Considerações geraisGeneral Considerations

  • As alterações de esquema estão sujeitas a qualquer restrição imposta por Transact-SQLTransact-SQL.Schema changes are subject to any restrictions imposed by Transact-SQLTransact-SQL. Por exemplo, ALTER TABLE não lhe permite ALTER colunas de chave primária.For example, ALTER TABLE does not allow you to ALTER primary key columns.

  • O mapeamento de tipo de dados só é executado para o instantâneo inicial.Data type mapping is performed only for the initial snapshot. As alterações de esquema não são mapeadas para versões anteriores de tipos de dados.Schema changes are not mapped to previous versions of data types. Por exemplo, se a instrução ALTER TABLE ADD datetime2 column for usada no SQL Server 2012SQL Server 2012, o tipo de dados não será convertido em nvarchar para Assinantes do SQL Server 2005SQL Server 2005 .For example, if the statement ALTER TABLE ADD datetime2 column is used in SQL Server 2012SQL Server 2012, the data type is not translated to nvarchar for SQL Server 2005SQL Server 2005 Subscribers. Em alguns casos, as alterações de esquema são bloqueadas no Publicador.In some cases, schema changes are blocked on the Publisher.

  • Se uma publicação é definida para permitir a propagação de alterações de esquema, alterações de esquema são propagadas independentemente de como a opção de esquema correspondente é definida para um artigo na publicação.If a publication is set to allow the propagation of schema changes, schema changes are propagated regardless of how the related schema option is set for an article in the publication. Por exemplo, se você selecionar não replicar restrições de chave estrangeira para um artigo de tabela, mas então emitir um comando ALTER TABLE que adiciona uma chave estrangeira à tabela no Publicador, a chave estrangeira será acrescentada à tabela no Assinante.For example, if you select not to replicate foreign key constraints for a table article, but then issue an ALTER TABLE command that adds a foreign key to the table at the Publisher, the foreign key is added to the table at the Subscriber. Para evitar isso, desabilite a propagação de alterações de esquema antes de emitir o comando ALTER TABLE.To prevent this, disable the propagation of schema changes before issuing the ALTER TABLE command.

  • As alterações de esquema devem ser feitas somente no Publicador, não em Assinantes (inclusive Assinantes de republicação).Schema changes should be made only at the Publisher, not at Subscribers (including republishing Subscribers). Replicação de mesclagem evita alterações de esquema no Assinante.Merge replication prevents schema changes at the Subscriber. Replicação transacional não evita as alterações, mas as alterações podem levar à falha da replicação.Transactional replication does not prevent the changes, but the changes can cause replication to fail.

  • Alterações propagadas para um Assinante de republicação são, por padrão, propagadas para seus Assinantes.Changes propagated to a republishing Subscriber are by default propagated to its Subscribers.

  • Se a alteração de esquema faz referência a objetos ou restrições existentes no Publicador mas não no Assinante, a alteração de esquema tem êxito no Publicador mas não no Assinante.If the schema change references objects or constraints existing on the Publisher but not on the Subscriber, the schema change will succeed on the Publisher but will fail on the Subscriber.

  • Todos os objetos no Assinante que são referenciados ao se adicionar uma chave estrangeira devem ter o mesmo nome e proprietário que o objeto correspondente no Publicador.All objects on the Subscriber that are referenced when adding a foreign key must have the same name and owner as the corresponding object on the Publisher.

  • Não há suporte ao se adicionar, descartar ou alterar índices explicitamente.Explicitly adding, dropping, or altering indexes is not supported. Índices criados implicitamente para restrições (como uma restrição de chave primária) têm suporte.Indexes created implicitly for constraints (such as a primary key constraint) are supported.

  • Não há suporte ao se alterar ou descartar colunas de identidade gerenciadas por replicação.Altering or dropping identity columns that are managed by replication is not supported. Para obter mais informações sobre o gerenciamento automático de colunas de identidade, consulte Replicar colunas de identidade.For more information about automatic management of identity columns, see Replicate Identity Columns.

  • As alterações de esquema que incluem funções não determinísticas não têm suporte, pois podem resultar em dados diferentes no Publicador e no Assinante (o que é chamado de não convergência).Schema changes that include nondeterministic functions are not supported because they can result in data at the Publisher and Subscriber being different (referred to as non-convergence). Por exemplo, se você emitir o seguinte comando no Publicador: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), os valores são diferentes quando o comando é replicado para o Assinante e executado.For example, if you issue the following command at the Publisher: ALTER TABLE SalesOrderDetail ADD OrderDate DATETIME DEFAULT GETDATE(), the values are different when the command is replicated to the Subscriber and executed. Para obter mais informações sobre funções não determinísticas, consulte Deterministic and Nondeterministic Functions.For more information about nondeterministic functions, see Deterministic and Nondeterministic Functions.

  • Recomenda-se que restrições sejam nomeadas explicitamente.It is recommended that constraints be explicitly named. Se uma restrição não for nomeada explicitamente, SQL ServerSQL Server gerará um nome para a restrição e esses nomes serão diferentes no Publicador e em cada Assinante.If a constraint is not explicitly named, SQL ServerSQL Server generates a name for the constraint, and these names will be different on the Publisher and each Subscriber. Isso pode causar problemas durante a replicação de alterações de esquema.This can cause issues during the replication of schema changes. Por exemplo, se você descartar uma coluna no Publicador e uma restrição dependente for descartada, a replicação tentará descartar a restrição no Assinante.For example, if you drop a column at the Publisher and a dependent constraint is dropped, replication will attempt to drop the constraint at the Subscriber. O descarte no Assinante irá falhar porque o nome da restrição é diferente.The drop at the Subscriber will fail because the name of the constraint is different. Se a sincronização falhar devido a um problema de nomeação de restrição, descarte manualmente a restrição no Assinante e, então, execute novamente o Merge Agent.If synchronization fails because of a constraint naming issue, manually drop the constraint at the Subscriber and then rerun the Merge Agent.

  • Se uma tabela é publicada para replicação, não é possível alterar uma coluna naquela tabela para um tipo de dados XML se um instantâneo de publicação já tiver sido gerado. Para alterar a coluna, você deve primeiramente remover a replicação.If a table is published for replication, it is not possible to alter a column in that table to a data type of XML if a publication snapshot has already been generated To alter the column, you must first remove replication.

  • Leitura não confirmada não é um nível de isolamento com suporte ao fazer o DDL em uma tabela publicada.Read uncommitted is not a supported isolation level when doing DDL on a published table.

  • SET CONTEXT_INFO não deve ser usado para modificar o contexto de transações em que as alterações de esquema são executadas em objetos publicados.SET CONTEXT_INFO should not be used to modify the context of transactions where schema changes are performed against published objects.

Adicionando colunasAdding Columns

  • Para adicionar uma nova coluna a uma tabela e incluir essa coluna em uma publicação existente, execute ALTER TABLE <Table> ADD <Column>.To add a new column to a table and include that column in an existing publication, execute ALTER TABLE <Table> ADD <Column>. Por padrão, a coluna é replicada para todos os Assinantes.By default, the column is then replicated to all Subscribers. A coluna deve permitir valores NULL ou incluir uma restrição padrão.The column must allow NULL values or include a default constraint. Para obter mais informações sobre como adicionar colunas, consulte a seção “Replicação de mesclagem” neste tópico.For more information about adding columns, see the "Merge Replication" section in this topic.

  • Para adicionar uma nova coluna a uma tabela sem incluir essa coluna em uma publicação existente, desabilite a replicação de alterações de esquema e, em seguida, execute ALTER TABLE <Table> ADD <Column>.To add a new column to a table and not include that column in an existing publication, disable the replication of schema changes, and then execute ALTER TABLE <Table> ADD <Column>.

  • Para incluir uma coluna existente em uma publicação existente, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL) ou a caixa de diálogo Propriedades da Publicação – <Publicação>.To include an existing column in an existing publication, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), or the Publication Properties - <Publication> dialog box.

    Para obter mais informações, consulte Define and Modify a Column Filter.For more information, see Define and Modify a Column Filter. Isso exigirá que as assinaturas sejam reinicializadas.This will require subscriptions to be reinitialized.

  • Não há suporte para adicionar uma coluna de identidade a uma tabela publicada, pois isso pode resultar em não convergência quando a coluna é replicada no Assinante.Adding an identity column to a published table is not supported, because it can result in non-convergence when the column is replicated to the Subscriber. Os valores na coluna de identidade no Publicador dependerão da ordem em que as linhas para a tabela afetada forem armazenadas fisicamente.The values in the identity column at the Publisher depend on the order in which the rows for the affected table are physically stored. As linhas podem ser armazenadas de forma diversa no Assinante; assim, o valor da coluna de identidade pode ser diferente para as mesmas linhas.The rows might be stored differently at the Subscriber; therefore the value for the identity column can be different for the same rows.

Descartando colunasDropping Columns

  • Para remover uma coluna de uma publicação existente e remover a coluna da tabela no Publicador, execute ALTER TABLE <Table> DROP <Column>.To drop a column from an existing publication and drop the column from the table at the Publisher, execute ALTER TABLE <Table> DROP <Column>. Por padrão, a coluna é então descartada da tabela em todos os Assinantes.By default, the column is then dropped from the table at all Subscribers.

  • Para remover uma coluna de uma publicação existente, mas manter a coluna na tabela no Publicador, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL) ou a caixa de diálogo Propriedades da Publicação – <Publicação>.To drop a column from an existing publication but retain the column in the table at the Publisher, use sp_articlecolumn (Transact-SQL), sp_mergearticlecolumn (Transact-SQL), or the Publication Properties - <Publication> dialog box.

    Para obter mais informações, consulte Define and Modify a Column Filter.For more information, see Define and Modify a Column Filter. Isso exigirá a geração de um instantâneo novo.This will require a new snapshot to be generated.

  • A coluna a ser descartada não pode ser usada nas cláusulas de filtro de nenhum artigo de nenhuma publicação no banco de dados.The column to be dropped cannot be used in the filter clauses of any article of any publication in the database.

  • Ao descartar uma coluna de um artigo publicado, considere quaisquer restrições, índices ou propriedades da coluna que possam afetar o banco de dados.When dropping a column from a published article, take into consideration any constraints, indexes, or properties of the column that could affect the database. Por exemplo:For example:

    • Não é possível descartar colunas usadas em uma chave primária de artigos em publicações transacionais, uma vez que elas são usadas pela replicação.You cannot drop columns used in a primary key from articles in transactional publications, because they are used by replication.

    • Não é possível descartar a coluna rowguid de artigos em publicações de mesclagem ou a coluna mstran_repl_version de artigos em publicações transacionais que suportam assinaturas de atualização, uma vez que elas são usadas pela replicação.You cannot drop the rowguid column from articles in merge publications or the mstran_repl_version column from articles in transactional publications that support updating subscriptions, because they are used by replication.

    • As alterações de índices não são propagadas para Assinantes: se você descartar uma coluna no Publicador e um índice dependente for descartado, o índice descartado não será replicado.Index changes are not propagated to Subscribers: if you drop a column at the Publisher and a dependent index is dropped, the index drop is not replicated. Deve-se descartar o índice no Assinante antes de descartar as colunas no Publicador, de forma que o descarte da coluna tenha êxito quando for replicado do Publicador para o Assinante.You should drop the index at the Subscriber before dropping the column at the Publisher, so that the column drop succeeds when it is replicated from the Publisher to the Subscriber. Se a sincronização falhar devido a um índice no Assinante, descarte manualmente o índice e, então, execute novamente o Merge Agent.If synchronization fails because of an index at the Subscriber, manually drop the index and then rerun the Merge Agent.

    • Restrições devem ser explicitamente nomeadas para permitir que sejam descartadas.Constraints should be explicitly named to allow for dropping. Para obter mais informações, consulte a seção "Considerações gerais" anteriormente neste tópico.For more information, see the "General Considerations" section earlier in this topic.

Replicação transacionalTransactional Replication

  • As alterações de esquema são propagadas para Assinantes que estão executando versões anteriores de SQL ServerSQL Server, mas a instrução DDL deverá incluir apenas sintaxe que tenha suporte da versão do Assinante.Schema changes are propagated to Subscribers running previous versions of SQL ServerSQL Server, but the DDL statement should only include syntax supported by the version at the Subscriber.

    Se o Assinante republicar dados, as únicas alterações de esquema com suporte incluem adicionar e descartar uma coluna.If the Subscriber republishes data, the only supported schema changes are adding and dropping a column. Essas alterações devem ser feitas no Publicador usando sp_repladdcolumn (Transact-SQL) e sp_repldropcolumn (Transact-SQL) em vez da sintaxe ALTER TABLE DDL.These changes should be made on the Publisher using sp_repladdcolumn (Transact-SQL) and sp_repldropcolumn (Transact-SQL) rather than ALTER TABLE DDL syntax.

  • Não são replicadas alterações de esquema a Assinantes de não SQL Server.Schema changes are not replicated to non-SQL Server Subscribers.

  • As alterações de esquema não são propagadas de Publicadores não SQL ServerSQL Server .Schema changes are not propagated from non- SQL ServerSQL Server Publishers.

  • Não é possível alterar exibições indexadas que são replicadas como tabelas.You cannot alter indexed views that are replicated as tables. Exibições indexadas que são replicadas como exibições indexadas podem ser alteradas, mas sua alteração irá fazer com que sejam exibições regulares e não exibições indexadas.Indexed views that are replicated as indexed views can be altered, but altering them will cause them to become regular views, rather than indexed views.

  • Se a publicação oferecer suporte à atualização imediata ou a assinaturas de atualização enfileirada, o sistema deverá ser confirmado antes que sejam feitas alterações de esquema: toda atividade na tabela publicada deve ser interrompida no Publicador e nos Assinantes, e as alterações de dados pendentes deverão ser propagadas para todos os nós.If the publication supports immediate updating or queued updating subscriptions, the system must be quiesced before making schema changes: all activity on the published table must be stopped at the Publisher and Subscribers, and pending data changes must be propagated to all nodes. Depois que as alterações de esquema tenham se propagado para todos os nós, a atividade pode ser retomada nas tabelas publicadas.After the schema changes have propagated to all nodes, activity can resume on the published tables.

  • Se a publicação estiver em uma topologia ponto a ponto, o sistema deve ser confirmado antes que sejam feitas alterações de esquema.If the publication is in a peer-to-peer topology, the system must be quiesced before making schema changes. Para obter mais informações, consulte Como confirmar uma topologia de replicação (Programação Transact-SQL de replicação).For more information, see Quiesce a Replication Topology (Replication Transact-SQL Programming).

  • O adição de uma coluna de carimbo e o mapeamento do carimbo para binário(8) levam o artigo a ser reinicializado para todas as assinaturas ativas.Adding a timestamp column to a table and mapping the timestamp to binary(8) causes the article to be reinitialized for all active subscriptions.

Replicação de mesclagemMerge Replication

  • A maneira como a replicação de mesclagem trata alterações de esquema é determinada pelo nível de compatibilidade da publicação e pela definição do instantâneo como modo nativo (padrão) ou modo de caractere:How merge replication handles schema changes is determined by the publication compatibility level, and whether the snapshot is set to native mode (default) or character mode:

    • Para replicar alterações de esquema, o nível de compatibilidade da publicação deve ser pelo menos 90RTM.To replicate schema changes, the compatibility level of the publication must be at least 90RTM. Se os Assinantes estiverem executando versões anteriores do SQL ServerSQL Server ou o nível de compatibilidade for inferior a 90RTM, você poderá usar sp_repladdcolumn (Transact-SQL) e sp_repldropcolumn (Transact-SQL) para adicionar e remover colunas.If Subscribers are running previous versions of SQL ServerSQL Server or the compatibility level is less than 90RTM you can use sp_repladdcolumn (Transact-SQL) and sp_repldropcolumn (Transact-SQL) to add and drop columns. Porém, estes procedimentos não são recomendados.However, these procedures are deprecated.

    • Se você tentar adicionar a um artigo existente uma coluna com um tipo de dados que foi lançado no SQL Server 2008SQL Server 2008, o SQL ServerSQL Server terá o seguinte comportamento:If you try to add to an existing article a column with a data type that was introduced in SQL Server 2008SQL Server 2008, SQL ServerSQL Server has the following behavior:

      100RTM, instantâneo nativo100RTM, native snapshot 100RTM, instantâneo de caractere100RTM, character snapshot Todos os outros níveis de compatibilidadeAll other compatibility levels
      hierarchyidhierarchyid Permitir alteraçãoAllow change Bloquear alteraçãoBlock change Bloquear alteraçãoBlock change
      geography e geometrygeography and geometry Permitir alteraçãoAllow change Permitir alteraçãoAllow change Bloquear alteraçãoBlock change
      fluxo de arquivosfilestream Permitir alteraçãoAllow change Bloquear alteraçãoBlock change Bloquear alteraçãoBlock change
      date, time, datetime2e datetimeoffsetdate, time, datetime2, and datetimeoffset Permitir alteraçãoAllow change Permitir alteraçãoAllow change Bloquear alteraçãoBlock change

      Os Assinantes do SQL Server Compact convertem estes tipos de dados no Assinante.SQL Server Compact Subscribers convert these data types at the Subscriber.

  • Se um erro ocorrer ao ser aplicada uma alteração de esquema (como um erro resultante da adição de uma chave estrangeira que faz referência a uma tabela não disponível no Assinante), a sincronização falhará e a assinatura deverá ser reinicializada.If an error occurs when applying a schema change (such as an error resulting from adding a foreign key that references a table not available at the Subscriber), synchronization fails and the subscription must be reinitialized.

  • Se uma alteração de esquema for feita em uma coluna envolvida em um filtro de junção ou filtro com parâmetros, deve reinicializar-se todas as assinaturas e gerar novamente o instantâneo.If a schema change is made on a column involved in a join filter or parameterized filter, you must reinitialize all subscriptions and regenerate the snapshot.

  • A replicação de mesclagem leva os procedimentos armazenados a ignorar alterações de esquema durante a solução de problemas.Merge replication provides stored procedures to skip schema changes during troubleshooting. Para obter mais informações, consulte sp_markpendingschemachange (Transact-SQL) e sp_enumeratependingschemachanges (Transact-SQL).For more information, see sp_markpendingschemachange (Transact-SQL) and sp_enumeratependingschemachanges (Transact-SQL).

Consulte tambémSee Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
ALTER VIEW (Transact-SQL) ALTER VIEW (Transact-SQL)
ALTER PROCEDURE (Transact-SQL) ALTER PROCEDURE (Transact-SQL)
ALTER FUNCTION (Transact-SQL) ALTER FUNCTION (Transact-SQL)
ALTER TRIGGER (Transact-SQL) ALTER TRIGGER (Transact-SQL)
Publicar dados e objetos de banco de dados Publish Data and Database Objects
Regenerar os procedimentos transacionais personalizados para refletir alterações de esquema Regenerate Custom Transactional Procedures to Reflect Schema Changes